diff --git a/SOURCES b/SOURCES
index d7d59fb..77357da 100644
--- a/SOURCES
+++ b/SOURCES
@@ -1,20 +1,32 @@
 Sources for this prebuilt toolchain can be downloaded from Android Opensource
 Project GIT repository git://android.googlesource.com/toolchain.
 
+Configure options:
+export CC="gcc -m32"
+export CXX="g++ -m32"
+export ABI=32
+path/to/build/configure --target=arm-linux-androideabi \
+	--host=i686-linux-gnu --build=i686-linux-gnu \
+	--with-gcc-version=4.6 --with-binutils-version=2.21 \
+	--with-gmp-version=4.2.4 --with-mpfr-version=2.4.1 \
+	--with-gdb-version=7.1.x --with-arch=armv5te \
+	--with-sysroot=[ics generic sysroot] \
+	--with-gold-version=2.21 --enable-gold=default
+
 gcc/ synced to
-	commit 40d7cd0fd78fe2004e2a53c4618c148339b02733
+	commit 3f73d6ef90458b45bbbb33ef4c2b174d4662a22d
 	Author: Jing Yu <jingyu@google.com>
-	Date:   Mon Dec 19 16:56:54 2011 -0800
+	Date:   Wed Feb 15 15:40:16 2012 -0800
 
 binutils/ synced to
-	commit cf3cdbf8b3cda61a619299e7966a83df66244036
+	commit d5d495ac8d60e791eab3c6efe795b5c9cff91e33
 	Author: Jing Yu <jingyu@google.com>
-	Date:   Tue Dec 20 10:27:58 2011 -0800
+	Date:   Wed Feb 15 16:11:53 2012 -0800
 
 gdb/ synced to
-	commit 5f9d38fd85e779aa1fd17eb38d24f8ec994d9147
-	Author: Doug Kwan <dougkwan@google.com>
-	Date:   Wed Aug 31 15:31:16 2011 -0700
+	commit d3fbc74c42021bf9d385a3d3b8813d0d91318137
+	Author: Jing Yu <jingyu@google.com>
+	Date:   Wed Feb 15 16:23:30 2012 -0800
 
 gmp/ synced to
 	commit 9fb242a79dd122d7fbf867daf5620dba6927bd2e
@@ -27,6 +39,6 @@
 	Date:   Thu Nov 5 17:50:13 2009 -0800
 
 build/ synced to
-	commit 84b232badae3b50c749d37e81506ce2f3b0edefd
+	commit 5ef7fa6f214e96660a9b16343fea904831e5e6e2
 	Author: Jing Yu <jingyu@google.com>
-	Date:   Tue Dec 20 17:01:04 2011 -0800
+	Date:   Wed Feb 15 16:03:22 2012 -0800
diff --git a/arm-linux-androideabi/bin/ar b/arm-linux-androideabi/bin/ar
index ce7908d..c123d83 100755
--- a/arm-linux-androideabi/bin/ar
+++ b/arm-linux-androideabi/bin/ar
Binary files differ
diff --git a/arm-linux-androideabi/bin/as b/arm-linux-androideabi/bin/as
index 1d71fe7..da34349 100755
--- a/arm-linux-androideabi/bin/as
+++ b/arm-linux-androideabi/bin/as
Binary files differ
diff --git a/arm-linux-androideabi/bin/c++ b/arm-linux-androideabi/bin/c++
index a271d8d..11ba0dd 100755
--- a/arm-linux-androideabi/bin/c++
+++ b/arm-linux-androideabi/bin/c++
Binary files differ
diff --git a/arm-linux-androideabi/bin/g++ b/arm-linux-androideabi/bin/g++
index a271d8d..11ba0dd 100755
--- a/arm-linux-androideabi/bin/g++
+++ b/arm-linux-androideabi/bin/g++
Binary files differ
diff --git a/arm-linux-androideabi/bin/gcc b/arm-linux-androideabi/bin/gcc
index dbcb341..976de8a 100755
--- a/arm-linux-androideabi/bin/gcc
+++ b/arm-linux-androideabi/bin/gcc
Binary files differ
diff --git a/arm-linux-androideabi/bin/ld b/arm-linux-androideabi/bin/ld
index 83a60f5..fc1c99b 100755
--- a/arm-linux-androideabi/bin/ld
+++ b/arm-linux-androideabi/bin/ld
Binary files differ
diff --git a/arm-linux-androideabi/bin/ld.bfd b/arm-linux-androideabi/bin/ld.bfd
index 4edd050..34b54bf 100755
--- a/arm-linux-androideabi/bin/ld.bfd
+++ b/arm-linux-androideabi/bin/ld.bfd
Binary files differ
diff --git a/arm-linux-androideabi/bin/ld.gold b/arm-linux-androideabi/bin/ld.gold
index 83a60f5..fc1c99b 100755
--- a/arm-linux-androideabi/bin/ld.gold
+++ b/arm-linux-androideabi/bin/ld.gold
Binary files differ
diff --git a/arm-linux-androideabi/bin/nm b/arm-linux-androideabi/bin/nm
index 22d6c79..fe4aefa 100755
--- a/arm-linux-androideabi/bin/nm
+++ b/arm-linux-androideabi/bin/nm
Binary files differ
diff --git a/arm-linux-androideabi/bin/objcopy b/arm-linux-androideabi/bin/objcopy
index d47a13b..08cc747 100755
--- a/arm-linux-androideabi/bin/objcopy
+++ b/arm-linux-androideabi/bin/objcopy
Binary files differ
diff --git a/arm-linux-androideabi/bin/objdump b/arm-linux-androideabi/bin/objdump
index 96f6147..7dbbe25 100755
--- a/arm-linux-androideabi/bin/objdump
+++ b/arm-linux-androideabi/bin/objdump
Binary files differ
diff --git a/arm-linux-androideabi/bin/ranlib b/arm-linux-androideabi/bin/ranlib
index bf6d827..2ef7098 100755
--- a/arm-linux-androideabi/bin/ranlib
+++ b/arm-linux-androideabi/bin/ranlib
Binary files differ
diff --git a/arm-linux-androideabi/bin/strip b/arm-linux-androideabi/bin/strip
index 5d47d5a..eba2fd1 100755
--- a/arm-linux-androideabi/bin/strip
+++ b/arm-linux-androideabi/bin/strip
Binary files differ
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/bits/c++config.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/bits/c++config.h
deleted file mode 100644
index 309d185..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/bits/c++config.h
+++ /dev/null
@@ -1,1568 +0,0 @@
-// Predefined symbols and macros -*- C++ -*-
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/c++config.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{iosfwd}
- */
-
-#ifndef _GLIBCXX_CXX_CONFIG_H
-#define _GLIBCXX_CXX_CONFIG_H 1
-
-// The current version of the C++ library in compressed ISO date format.
-#define __GLIBCXX__ 20110718
-
-// Macros for various attributes.
-//   _GLIBCXX_PURE
-//   _GLIBCXX_CONST
-//   _GLIBCXX_NORETURN
-//   _GLIBCXX_NOTHROW
-//   _GLIBCXX_VISIBILITY
-#ifndef _GLIBCXX_PURE
-# define _GLIBCXX_PURE __attribute__ ((__pure__))
-#endif
-
-#ifndef _GLIBCXX_CONST
-# define _GLIBCXX_CONST __attribute__ ((__const__))
-#endif
-
-#ifndef _GLIBCXX_NORETURN
-# define _GLIBCXX_NORETURN __attribute__ ((__noreturn__))
-#endif
-
-#ifndef _GLIBCXX_NOTHROW
-# ifdef __cplusplus
-#  define _GLIBCXX_NOTHROW throw()
-# else
-#  define _GLIBCXX_NOTHROW __attribute__((__nothrow__))
-# endif
-#endif
-
-// Macros for visibility attributes.
-//   _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
-//   _GLIBCXX_VISIBILITY
-# define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY 1
-
-#if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
-# define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))
-#else
-// If this is not supplied by the OS-specific or CPU-specific
-// headers included below, it will be defined to an empty default.
-# define _GLIBCXX_VISIBILITY(V) _GLIBCXX_PSEUDO_VISIBILITY(V)
-#endif
-
-// Macros for deprecated attributes.
-//   _GLIBCXX_USE_DEPRECATED
-//   _GLIBCXX_DEPRECATED
-#ifndef _GLIBCXX_USE_DEPRECATED
-# define _GLIBCXX_USE_DEPRECATED 1
-#endif
-
-#if defined(__DEPRECATED) && defined(__GXX_EXPERIMENTAL_CXX0X__)
-# define _GLIBCXX_DEPRECATED __attribute__ ((__deprecated__))
-#else
-# define _GLIBCXX_DEPRECATED
-#endif
-
-#if __cplusplus
-
-// Macro for constexpr, to support in mixed 03/0x mode.
-#ifndef _GLIBCXX_CONSTEXPR
-# ifdef __GXX_EXPERIMENTAL_CXX0X__
-#  define _GLIBCXX_CONSTEXPR constexpr
-#  define _GLIBCXX_USE_CONSTEXPR constexpr
-# else
-#  define _GLIBCXX_CONSTEXPR
-#  define _GLIBCXX_USE_CONSTEXPR const
-# endif
-#endif
-
-// Macro for extern template, ie controling template linkage via use
-// of extern keyword on template declaration. As documented in the g++
-// manual, it inhibits all implicit instantiations and is used
-// throughout the library to avoid multiple weak definitions for
-// required types that are already explicitly instantiated in the
-// library binary. This substantially reduces the binary size of
-// resulting executables.
-// Special case: _GLIBCXX_EXTERN_TEMPLATE == -1 disallows extern
-// templates only in basic_string, thus activating its debug-mode
-// checks even at -O0.
-# define _GLIBCXX_EXTERN_TEMPLATE 1
-
-/*
-  Outline of libstdc++ namespaces.
-
-  namespace std
-  {
-    namespace __debug { }
-    namespace __parallel { }
-    namespace __profile { }
-    namespace __cxx1998 { }
-
-    namespace __detail { }
-
-    namespace rel_ops { }
-
-    namespace tr1
-    {
-      namespace placeholders { }
-      namespace regex_constants { }
-      namespace __detail { }
-    }
-
-    namespace decimal { }
-
-    namespace chrono { }
-    namespace placeholders { }
-    namespace regex_constants { }
-    namespace this_thread { }
-  }
-
-  namespace abi { }
-
-  namespace __gnu_cxx
-  {
-    namespace __detail { }
-  }
-
-  For full details see:
-  http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html
-*/
-namespace std
-{
-  typedef __SIZE_TYPE__ 	size_t;
-  typedef __PTRDIFF_TYPE__	ptrdiff_t;
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-  typedef decltype(nullptr)	nullptr_t;
-#endif
-}
-
-
-// Defined if inline namespaces are used for versioning.
-# define _GLIBCXX_INLINE_VERSION 0
-
-// Inline namespace for symbol versioning.
-#if _GLIBCXX_INLINE_VERSION
-namespace std
-{
-  inline namespace _6 { }
-
-  namespace rel_ops { inline namespace _6 { } }
-
-  namespace tr1
-  {
-    inline namespace _6 { }
-    namespace placeholders { inline namespace _6 { } }
-    namespace regex_constants { inline namespace _6 { } }
-    namespace __detail { inline namespace _6 { } }
-  }
-
-  namespace decimal { inline namespace _6 { } }
-
-  namespace chrono { inline namespace _6 { } }
-  namespace placeholders { inline namespace _6 { } }
-  namespace regex_constants { inline namespace _6 { } }
-  namespace this_thread { inline namespace _6 { } }
-
-  namespace __detail { inline namespace _6 { } }
-  namespace __regex { inline namespace _6 { } }
-}
-
-namespace __gnu_cxx
-{
-  inline namespace _6 { }
-  namespace __detail { inline namespace _6 { } }
-}
-# define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace _6 {
-# define _GLIBCXX_END_NAMESPACE_VERSION }
-#else
-# define _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_VERSION
-#endif
-
-
-// Inline namespaces for special modes: debug, parallel, profile.
-#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PARALLEL) \
-    || defined(_GLIBCXX_PROFILE)
-namespace std
-{
-  // Non-inline namespace for components replaced by alternates in active mode.
-  namespace __cxx1998
-  {
-#if _GLIBCXX_INLINE_VERSION
- inline namespace _6 { }
-#endif
-  }
-
-  // Inline namespace for debug mode.
-# ifdef _GLIBCXX_DEBUG
-  inline namespace __debug { }
-# endif
-
-  // Inline namespaces for parallel mode.
-# ifdef _GLIBCXX_PARALLEL
-  inline namespace __parallel { }
-# endif
-
-  // Inline namespaces for profile mode
-# ifdef _GLIBCXX_PROFILE
-  inline namespace __profile { }
-# endif
-}
-
-// Check for invalid usage and unsupported mixed-mode use.
-# if defined(_GLIBCXX_DEBUG) && defined(_GLIBCXX_PARALLEL)
-#  error illegal use of multiple inlined namespaces
-# endif
-# if defined(_GLIBCXX_PROFILE) && defined(_GLIBCXX_DEBUG)
-#  error illegal use of multiple inlined namespaces
-# endif
-# if defined(_GLIBCXX_PROFILE) && defined(_GLIBCXX_PARALLEL)
-#  error illegal use of multiple inlined namespaces
-# endif
-
-// Check for invalid use due to lack for weak symbols.
-# if __NO_INLINE__ && !__GXX_WEAK__
-#  warning currently using inlined namespace mode which may fail \
-   without inlining due to lack of weak symbols
-# endif
-#endif
-
-// Macros for namespace scope. Either namespace std:: or the name
-// of some nested namespace within it corresponding to the active mode.
-// _GLIBCXX_STD_A
-// _GLIBCXX_STD_C
-//
-// Macros for opening/closing conditional namespaces.
-// _GLIBCXX_BEGIN_NAMESPACE_ALGO
-// _GLIBCXX_END_NAMESPACE_ALGO
-// _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
-// _GLIBCXX_END_NAMESPACE_CONTAINER
-#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PROFILE)
-# define _GLIBCXX_STD_C __cxx1998
-# define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER \
-	 namespace _GLIBCXX_STD_C { _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_CONTAINER \
-	 } _GLIBCXX_END_NAMESPACE_VERSION
-# undef _GLIBCXX_EXTERN_TEMPLATE
-#  define _GLIBCXX_EXTERN_TEMPLATE 1 -1
-#endif
-
-#ifdef _GLIBCXX_PARALLEL
-# define _GLIBCXX_STD_A __cxx1998
-# define _GLIBCXX_BEGIN_NAMESPACE_ALGO \
-	 namespace _GLIBCXX_STD_A { _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_ALGO \
-	 } _GLIBCXX_END_NAMESPACE_VERSION
-#endif
-
-#ifndef _GLIBCXX_STD_A
-# define _GLIBCXX_STD_A std
-#endif
-
-#ifndef _GLIBCXX_STD_C
-# define _GLIBCXX_STD_C std
-#endif
-
-#ifndef _GLIBCXX_BEGIN_NAMESPACE_ALGO
-# define _GLIBCXX_BEGIN_NAMESPACE_ALGO
-#endif
-
-#ifndef _GLIBCXX_END_NAMESPACE_ALGO
-# define _GLIBCXX_END_NAMESPACE_ALGO
-#endif
-
-#ifndef _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
-# define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
-#endif
-
-#ifndef _GLIBCXX_END_NAMESPACE_CONTAINER
-# define _GLIBCXX_END_NAMESPACE_CONTAINER
-#endif
-
-// GLIBCXX_ABI Deprecated
-// Define if compatibility should be provided for -mlong-double-64.
-#undef _GLIBCXX_LONG_DOUBLE_COMPAT
-
-// Inline namespace for long double 128 mode.
-#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
-namespace std
-{
-  inline namespace __gnu_cxx_ldbl128 { }
-}
-# define _GLIBCXX_NAMESPACE_LDBL __gnu_cxx_ldbl128::
-# define _GLIBCXX_BEGIN_NAMESPACE_LDBL namespace __gnu_cxx_ldbl128 {
-# define _GLIBCXX_END_NAMESPACE_LDBL }
-#else
-# define _GLIBCXX_NAMESPACE_LDBL
-# define _GLIBCXX_BEGIN_NAMESPACE_LDBL
-# define _GLIBCXX_END_NAMESPACE_LDBL
-#endif
-
-// Assert.
-#if !defined(_GLIBCXX_DEBUG) && !defined(_GLIBCXX_PARALLEL)
-# define __glibcxx_assert(_Condition)
-#else
-namespace std
-{
-  // Avoid the use of assert, because we're trying to keep the <cassert>
-  // include out of the mix.
-  inline void
-  __replacement_assert(const char* __file, int __line,
-		       const char* __function, const char* __condition)
-  {
-    __builtin_printf("%s:%d: %s: Assertion '%s' failed.\n", __file, __line,
-		     __function, __condition);
-    __builtin_abort();
-  }
-}
-#define __glibcxx_assert(_Condition)				   	 \
-  do 									 \
-  {							      		 \
-    if (! (_Condition))                                                  \
-      std::__replacement_assert(__FILE__, __LINE__, __PRETTY_FUNCTION__, \
-				#_Condition);				 \
-  } while (false)
-#endif
-
-// Macros for race detectors.
-// _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) and
-// _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) should be used to explain
-// atomic (lock-free) synchronization to race detectors:
-// the race detector will infer a happens-before arc from the former to the
-// latter when they share the same argument pointer.
-//
-// The most frequent use case for these macros (and the only case in the
-// current implementation of the library) is atomic reference counting:
-//   void _M_remove_reference()
-//   {
-//     _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&this->_M_refcount);
-//     if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount, -1) <= 0)
-//       {
-//         _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&this->_M_refcount);
-//         _M_destroy(__a);
-//       }
-//   }
-// The annotations in this example tell the race detector that all memory
-// accesses occurred when the refcount was positive do not race with
-// memory accesses which occurred after the refcount became zero.
-#ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE
-# define  _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A)
-#endif
-#ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER
-# define  _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A)
-#endif
-
-// Macros for C linkage: define extern "C" linkage only when using C++.
-# define _GLIBCXX_BEGIN_EXTERN_C extern "C" {
-# define _GLIBCXX_END_EXTERN_C }
-
-#else // !__cplusplus
-# define _GLIBCXX_BEGIN_EXTERN_C
-# define _GLIBCXX_END_EXTERN_C
-#endif
-
-
-// First includes.
-
-// Pick up any OS-specific definitions.
-#include <bits/os_defines.h>
-
-// Pick up any CPU-specific definitions.
-#include <bits/cpu_defines.h>
-
-// If platform uses neither visibility nor psuedo-visibility,
-// specify empty default for namespace annotation macros.
-#ifndef _GLIBCXX_PSEUDO_VISIBILITY
-# define _GLIBCXX_PSEUDO_VISIBILITY(V)
-#endif
-
-// Certain function definitions that are meant to be overridable from
-// user code are decorated with this macro.  For some targets, this
-// macro causes these definitions to be weak.
-#ifndef _GLIBCXX_WEAK_DEFINITION
-# define _GLIBCXX_WEAK_DEFINITION
-#endif
-
-
-// The remainder of the prewritten config is automatic; all the
-// user hooks are listed above.
-
-// Create a boolean flag to be used to determine if --fast-math is set.
-#ifdef __FAST_MATH__
-# define _GLIBCXX_FAST_MATH 1
-#else
-# define _GLIBCXX_FAST_MATH 0
-#endif
-
-// This marks string literals in header files to be extracted for eventual
-// translation.  It is primarily used for messages in thrown exceptions; see
-// src/functexcept.cc.  We use __N because the more traditional _N is used
-// for something else under certain OSes (see BADNAMES).
-#define __N(msgid)     (msgid)
-
-// For example, <windows.h> is known to #define min and max as macros...
-#undef min
-#undef max
-
-// End of prewritten config; the settings discovered at configure time follow.
-/* config.h.  Generated from config.h.in by configure.  */
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to 1 if you have the `acosf' function. */
-#define _GLIBCXX_HAVE_ACOSF 1
-
-/* Define to 1 if you have the `acosl' function. */
-/* #undef _GLIBCXX_HAVE_ACOSL */
-
-/* Define to 1 if you have the `asinf' function. */
-#define _GLIBCXX_HAVE_ASINF 1
-
-/* Define to 1 if you have the `asinl' function. */
-/* #undef _GLIBCXX_HAVE_ASINL */
-
-/* Define to 1 if the target assembler supports .symver directive. */
-#define _GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE 1
-
-/* Define to 1 if you have the `atan2f' function. */
-#define _GLIBCXX_HAVE_ATAN2F 1
-
-/* Define to 1 if you have the `atan2l' function. */
-/* #undef _GLIBCXX_HAVE_ATAN2L */
-
-/* Define to 1 if you have the `atanf' function. */
-#define _GLIBCXX_HAVE_ATANF 1
-
-/* Define to 1 if you have the `atanl' function. */
-/* #undef _GLIBCXX_HAVE_ATANL */
-
-/* Define to 1 if the target assembler supports thread-local storage. */
-/* #undef _GLIBCXX_HAVE_CC_TLS */
-
-/* Define to 1 if you have the `ceilf' function. */
-#define _GLIBCXX_HAVE_CEILF 1
-
-/* Define to 1 if you have the `ceill' function. */
-#define _GLIBCXX_HAVE_CEILL 1
-
-/* Define to 1 if you have the <complex.h> header file. */
-/* #undef _GLIBCXX_HAVE_COMPLEX_H */
-
-/* Define to 1 if you have the `cosf' function. */
-#define _GLIBCXX_HAVE_COSF 1
-
-/* Define to 1 if you have the `coshf' function. */
-#define _GLIBCXX_HAVE_COSHF 1
-
-/* Define to 1 if you have the `coshl' function. */
-/* #undef _GLIBCXX_HAVE_COSHL */
-
-/* Define to 1 if you have the `cosl' function. */
-/* #undef _GLIBCXX_HAVE_COSL */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define _GLIBCXX_HAVE_DLFCN_H 1
-
-/* Define if EBADMSG exists. */
-#define _GLIBCXX_HAVE_EBADMSG 1
-
-/* Define if ECANCELED exists. */
-#define _GLIBCXX_HAVE_ECANCELED 1
-
-/* Define if EIDRM exists. */
-#define _GLIBCXX_HAVE_EIDRM 1
-
-/* Define to 1 if you have the <endian.h> header file. */
-#define _GLIBCXX_HAVE_ENDIAN_H 1
-
-/* Define if ENODATA exists. */
-#define _GLIBCXX_HAVE_ENODATA 1
-
-/* Define if ENOLINK exists. */
-#define _GLIBCXX_HAVE_ENOLINK 1
-
-/* Define if ENOSR exists. */
-#define _GLIBCXX_HAVE_ENOSR 1
-
-/* Define if ENOSTR exists. */
-#define _GLIBCXX_HAVE_ENOSTR 1
-
-/* Define if ENOTRECOVERABLE exists. */
-#define _GLIBCXX_HAVE_ENOTRECOVERABLE 1
-
-/* Define if ENOTSUP exists. */
-#define _GLIBCXX_HAVE_ENOTSUP 1
-
-/* Define if EOVERFLOW exists. */
-#define _GLIBCXX_HAVE_EOVERFLOW 1
-
-/* Define if EOWNERDEAD exists. */
-#define _GLIBCXX_HAVE_EOWNERDEAD 1
-
-/* Define if EPROTO exists. */
-#define _GLIBCXX_HAVE_EPROTO 1
-
-/* Define if ETIME exists. */
-#define _GLIBCXX_HAVE_ETIME 1
-
-/* Define if ETXTBSY exists. */
-#define _GLIBCXX_HAVE_ETXTBSY 1
-
-/* Define to 1 if you have the <execinfo.h> header file. */
-/* #undef _GLIBCXX_HAVE_EXECINFO_H */
-
-/* Define to 1 if you have the `expf' function. */
-#define _GLIBCXX_HAVE_EXPF 1
-
-/* Define to 1 if you have the `expl' function. */
-/* #undef _GLIBCXX_HAVE_EXPL */
-
-/* Define to 1 if you have the `fabsf' function. */
-#define _GLIBCXX_HAVE_FABSF 1
-
-/* Define to 1 if you have the `fabsl' function. */
-#define _GLIBCXX_HAVE_FABSL 1
-
-/* Define to 1 if you have the <fenv.h> header file. */
-/* #undef _GLIBCXX_HAVE_FENV_H */
-
-/* Define to 1 if you have the `finite' function. */
-#define _GLIBCXX_HAVE_FINITE 1
-
-/* Define to 1 if you have the `finitef' function. */
-#define _GLIBCXX_HAVE_FINITEF 1
-
-/* Define to 1 if you have the `finitel' function. */
-/* #undef _GLIBCXX_HAVE_FINITEL */
-
-/* Define to 1 if you have the <float.h> header file. */
-#define _GLIBCXX_HAVE_FLOAT_H 1
-
-/* Define to 1 if you have the `floorf' function. */
-#define _GLIBCXX_HAVE_FLOORF 1
-
-/* Define to 1 if you have the `floorl' function. */
-#define _GLIBCXX_HAVE_FLOORL 1
-
-/* Define to 1 if you have the `fmodf' function. */
-#define _GLIBCXX_HAVE_FMODF 1
-
-/* Define to 1 if you have the `fmodl' function. */
-/* #undef _GLIBCXX_HAVE_FMODL */
-
-/* Define to 1 if you have the `fpclass' function. */
-/* #undef _GLIBCXX_HAVE_FPCLASS */
-
-/* Define to 1 if you have the <fp.h> header file. */
-/* #undef _GLIBCXX_HAVE_FP_H */
-
-/* Define to 1 if you have the `frexpf' function. */
-#define _GLIBCXX_HAVE_FREXPF 1
-
-/* Define to 1 if you have the `frexpl' function. */
-/* #undef _GLIBCXX_HAVE_FREXPL */
-
-/* Define if _Unwind_GetIPInfo is available. */
-#define _GLIBCXX_HAVE_GETIPINFO 1
-
-/* Define if gthr-default.h exists (meaning that threading support is
-   enabled). */
-#define _GLIBCXX_HAVE_GTHR_DEFAULT 1
-
-/* Define to 1 if you have the `hypot' function. */
-#define _GLIBCXX_HAVE_HYPOT 1
-
-/* Define to 1 if you have the `hypotf' function. */
-#define _GLIBCXX_HAVE_HYPOTF 1
-
-/* Define to 1 if you have the `hypotl' function. */
-/* #undef _GLIBCXX_HAVE_HYPOTL */
-
-/* Define if you have the iconv() function. */
-/* #undef _GLIBCXX_HAVE_ICONV */
-
-/* Define to 1 if you have the <ieeefp.h> header file. */
-/* #undef _GLIBCXX_HAVE_IEEEFP_H */
-
-/* Define if int64_t is available in <stdint.h>. */
-#define _GLIBCXX_HAVE_INT64_T 1
-
-/* Define if int64_t is a long. */
-/* #undef _GLIBCXX_HAVE_INT64_T_LONG */
-
-/* Define if int64_t is a long long. */
-#define _GLIBCXX_HAVE_INT64_T_LONG_LONG 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define _GLIBCXX_HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `isinf' function. */
-/* #undef _GLIBCXX_HAVE_ISINF */
-
-/* Define to 1 if you have the `isinff' function. */
-/* #undef _GLIBCXX_HAVE_ISINFF */
-
-/* Define to 1 if you have the `isinfl' function. */
-/* #undef _GLIBCXX_HAVE_ISINFL */
-
-/* Define to 1 if you have the `isnan' function. */
-#define _GLIBCXX_HAVE_ISNAN 1
-
-/* Define to 1 if you have the `isnanf' function. */
-#define _GLIBCXX_HAVE_ISNANF 1
-
-/* Define to 1 if you have the `isnanl' function. */
-/* #undef _GLIBCXX_HAVE_ISNANL */
-
-/* Defined if iswblank exists. */
-/* #undef _GLIBCXX_HAVE_ISWBLANK */
-
-/* Define if LC_MESSAGES is available in <locale.h>. */
-#define _GLIBCXX_HAVE_LC_MESSAGES 1
-
-/* Define to 1 if you have the `ldexpf' function. */
-#define _GLIBCXX_HAVE_LDEXPF 1
-
-/* Define to 1 if you have the `ldexpl' function. */
-#define _GLIBCXX_HAVE_LDEXPL 1
-
-/* Define to 1 if you have the <libintl.h> header file. */
-/* #undef _GLIBCXX_HAVE_LIBINTL_H */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_AS */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_DATA */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_FSIZE */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_RSS */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_VMEM */
-
-/* Define if futex syscall is available. */
-/* #undef _GLIBCXX_HAVE_LINUX_FUTEX */
-
-/* Define to 1 if you have the <locale.h> header file. */
-#define _GLIBCXX_HAVE_LOCALE_H 1
-
-/* Define to 1 if you have the `log10f' function. */
-#define _GLIBCXX_HAVE_LOG10F 1
-
-/* Define to 1 if you have the `log10l' function. */
-/* #undef _GLIBCXX_HAVE_LOG10L */
-
-/* Define to 1 if you have the `logf' function. */
-#define _GLIBCXX_HAVE_LOGF 1
-
-/* Define to 1 if you have the `logl' function. */
-/* #undef _GLIBCXX_HAVE_LOGL */
-
-/* Define to 1 if you have the <machine/endian.h> header file. */
-/* #undef _GLIBCXX_HAVE_MACHINE_ENDIAN_H */
-
-/* Define to 1 if you have the <machine/param.h> header file. */
-/* #undef _GLIBCXX_HAVE_MACHINE_PARAM_H */
-
-/* Define if mbstate_t exists in wchar.h. */
-#define _GLIBCXX_HAVE_MBSTATE_T 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define _GLIBCXX_HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `modf' function. */
-#define _GLIBCXX_HAVE_MODF 1
-
-/* Define to 1 if you have the `modff' function. */
-#define _GLIBCXX_HAVE_MODFF 1
-
-/* Define to 1 if you have the `modfl' function. */
-/* #undef _GLIBCXX_HAVE_MODFL */
-
-/* Define to 1 if you have the <nan.h> header file. */
-/* #undef _GLIBCXX_HAVE_NAN_H */
-
-/* Define if poll is available in <poll.h>. */
-#define _GLIBCXX_HAVE_POLL 1
-
-/* Define to 1 if you have the `powf' function. */
-#define _GLIBCXX_HAVE_POWF 1
-
-/* Define to 1 if you have the `powl' function. */
-/* #undef _GLIBCXX_HAVE_POWL */
-
-/* Define to 1 if you have the `qfpclass' function. */
-/* #undef _GLIBCXX_HAVE_QFPCLASS */
-
-/* Define to 1 if you have the `setenv' function. */
-/* #undef _GLIBCXX_HAVE_SETENV */
-
-/* Define to 1 if you have the `sincos' function. */
-#define _GLIBCXX_HAVE_SINCOS 1
-
-/* Define to 1 if you have the `sincosf' function. */
-#define _GLIBCXX_HAVE_SINCOSF 1
-
-/* Define to 1 if you have the `sincosl' function. */
-#define _GLIBCXX_HAVE_SINCOSL 1
-
-/* Define to 1 if you have the `sinf' function. */
-#define _GLIBCXX_HAVE_SINF 1
-
-/* Define to 1 if you have the `sinhf' function. */
-#define _GLIBCXX_HAVE_SINHF 1
-
-/* Define to 1 if you have the `sinhl' function. */
-/* #undef _GLIBCXX_HAVE_SINHL */
-
-/* Define to 1 if you have the `sinl' function. */
-/* #undef _GLIBCXX_HAVE_SINL */
-
-/* Define to 1 if you have the `sqrtf' function. */
-#define _GLIBCXX_HAVE_SQRTF 1
-
-/* Define to 1 if you have the `sqrtl' function. */
-/* #undef _GLIBCXX_HAVE_SQRTL */
-
-/* Define to 1 if you have the <stdbool.h> header file. */
-/* #undef _GLIBCXX_HAVE_STDBOOL_H */
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define _GLIBCXX_HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define _GLIBCXX_HAVE_STDLIB_H 1
-
-/* Define if strerror_l is available in <string.h>. */
-/* #undef _GLIBCXX_HAVE_STRERROR_L */
-
-/* Define if strerror_r is available in <string.h>. */
-#define _GLIBCXX_HAVE_STRERROR_R 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define _GLIBCXX_HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define _GLIBCXX_HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strtof' function. */
-/* #undef _GLIBCXX_HAVE_STRTOF */
-
-/* Define to 1 if you have the `strtold' function. */
-/* #undef _GLIBCXX_HAVE_STRTOLD */
-
-/* Define if strxfrm_l is available in <string.h>. */
-/* #undef _GLIBCXX_HAVE_STRXFRM_L */
-
-/* Define to 1 if the target runtime linker supports binding the same symbol
-   to different versions. */
-/* #undef _GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT */
-
-/* Define to 1 if you have the <sys/filio.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_FILIO_H */
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#define _GLIBCXX_HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the <sys/ipc.h> header file. */
-#define _GLIBCXX_HAVE_SYS_IPC_H 1
-
-/* Define to 1 if you have the <sys/isa_defs.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_ISA_DEFS_H */
-
-/* Define to 1 if you have the <sys/machine.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_MACHINE_H */
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#define _GLIBCXX_HAVE_SYS_PARAM_H 1
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#define _GLIBCXX_HAVE_SYS_RESOURCE_H 1
-
-/* Define to 1 if you have the <sys/sem.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_SEM_H */
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define _GLIBCXX_HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define _GLIBCXX_HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define _GLIBCXX_HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/uio.h> header file. */
-#define _GLIBCXX_HAVE_SYS_UIO_H 1
-
-/* Define if S_IFREG is available in <sys/stat.h>. */
-/* #undef _GLIBCXX_HAVE_S_IFREG */
-
-/* Define if S_IFREG is available in <sys/stat.h>. */
-#define _GLIBCXX_HAVE_S_ISREG 1
-
-/* Define to 1 if you have the `tanf' function. */
-#define _GLIBCXX_HAVE_TANF 1
-
-/* Define to 1 if you have the `tanhf' function. */
-#define _GLIBCXX_HAVE_TANHF 1
-
-/* Define to 1 if you have the `tanhl' function. */
-/* #undef _GLIBCXX_HAVE_TANHL */
-
-/* Define to 1 if you have the `tanl' function. */
-/* #undef _GLIBCXX_HAVE_TANL */
-
-/* Define to 1 if you have the <tgmath.h> header file. */
-/* #undef _GLIBCXX_HAVE_TGMATH_H */
-
-/* Define to 1 if the target supports thread-local storage. */
-/* #undef _GLIBCXX_HAVE_TLS */
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define _GLIBCXX_HAVE_UNISTD_H 1
-
-/* Defined if vfwscanf exists. */
-/* #undef _GLIBCXX_HAVE_VFWSCANF */
-
-/* Defined if vswscanf exists. */
-/* #undef _GLIBCXX_HAVE_VSWSCANF */
-
-/* Defined if vwscanf exists. */
-/* #undef _GLIBCXX_HAVE_VWSCANF */
-
-/* Define to 1 if you have the <wchar.h> header file. */
-#define _GLIBCXX_HAVE_WCHAR_H 1
-
-/* Defined if wcstof exists. */
-/* #undef _GLIBCXX_HAVE_WCSTOF */
-
-/* Define to 1 if you have the <wctype.h> header file. */
-#define _GLIBCXX_HAVE_WCTYPE_H 1
-
-/* Define if writev is available in <sys/uio.h>. */
-#define _GLIBCXX_HAVE_WRITEV 1
-
-/* Define to 1 if you have the `_acosf' function. */
-/* #undef _GLIBCXX_HAVE__ACOSF */
-
-/* Define to 1 if you have the `_acosl' function. */
-/* #undef _GLIBCXX_HAVE__ACOSL */
-
-/* Define to 1 if you have the `_asinf' function. */
-/* #undef _GLIBCXX_HAVE__ASINF */
-
-/* Define to 1 if you have the `_asinl' function. */
-/* #undef _GLIBCXX_HAVE__ASINL */
-
-/* Define to 1 if you have the `_atan2f' function. */
-/* #undef _GLIBCXX_HAVE__ATAN2F */
-
-/* Define to 1 if you have the `_atan2l' function. */
-/* #undef _GLIBCXX_HAVE__ATAN2L */
-
-/* Define to 1 if you have the `_atanf' function. */
-/* #undef _GLIBCXX_HAVE__ATANF */
-
-/* Define to 1 if you have the `_atanl' function. */
-/* #undef _GLIBCXX_HAVE__ATANL */
-
-/* Define to 1 if you have the `_ceilf' function. */
-/* #undef _GLIBCXX_HAVE__CEILF */
-
-/* Define to 1 if you have the `_ceill' function. */
-/* #undef _GLIBCXX_HAVE__CEILL */
-
-/* Define to 1 if you have the `_cosf' function. */
-/* #undef _GLIBCXX_HAVE__COSF */
-
-/* Define to 1 if you have the `_coshf' function. */
-/* #undef _GLIBCXX_HAVE__COSHF */
-
-/* Define to 1 if you have the `_coshl' function. */
-/* #undef _GLIBCXX_HAVE__COSHL */
-
-/* Define to 1 if you have the `_cosl' function. */
-/* #undef _GLIBCXX_HAVE__COSL */
-
-/* Define to 1 if you have the `_expf' function. */
-/* #undef _GLIBCXX_HAVE__EXPF */
-
-/* Define to 1 if you have the `_expl' function. */
-/* #undef _GLIBCXX_HAVE__EXPL */
-
-/* Define to 1 if you have the `_fabsf' function. */
-/* #undef _GLIBCXX_HAVE__FABSF */
-
-/* Define to 1 if you have the `_fabsl' function. */
-/* #undef _GLIBCXX_HAVE__FABSL */
-
-/* Define to 1 if you have the `_finite' function. */
-/* #undef _GLIBCXX_HAVE__FINITE */
-
-/* Define to 1 if you have the `_finitef' function. */
-/* #undef _GLIBCXX_HAVE__FINITEF */
-
-/* Define to 1 if you have the `_finitel' function. */
-/* #undef _GLIBCXX_HAVE__FINITEL */
-
-/* Define to 1 if you have the `_floorf' function. */
-/* #undef _GLIBCXX_HAVE__FLOORF */
-
-/* Define to 1 if you have the `_floorl' function. */
-/* #undef _GLIBCXX_HAVE__FLOORL */
-
-/* Define to 1 if you have the `_fmodf' function. */
-/* #undef _GLIBCXX_HAVE__FMODF */
-
-/* Define to 1 if you have the `_fmodl' function. */
-/* #undef _GLIBCXX_HAVE__FMODL */
-
-/* Define to 1 if you have the `_fpclass' function. */
-/* #undef _GLIBCXX_HAVE__FPCLASS */
-
-/* Define to 1 if you have the `_frexpf' function. */
-/* #undef _GLIBCXX_HAVE__FREXPF */
-
-/* Define to 1 if you have the `_frexpl' function. */
-/* #undef _GLIBCXX_HAVE__FREXPL */
-
-/* Define to 1 if you have the `_hypot' function. */
-/* #undef _GLIBCXX_HAVE__HYPOT */
-
-/* Define to 1 if you have the `_hypotf' function. */
-/* #undef _GLIBCXX_HAVE__HYPOTF */
-
-/* Define to 1 if you have the `_hypotl' function. */
-/* #undef _GLIBCXX_HAVE__HYPOTL */
-
-/* Define to 1 if you have the `_isinf' function. */
-/* #undef _GLIBCXX_HAVE__ISINF */
-
-/* Define to 1 if you have the `_isinff' function. */
-/* #undef _GLIBCXX_HAVE__ISINFF */
-
-/* Define to 1 if you have the `_isinfl' function. */
-/* #undef _GLIBCXX_HAVE__ISINFL */
-
-/* Define to 1 if you have the `_isnan' function. */
-/* #undef _GLIBCXX_HAVE__ISNAN */
-
-/* Define to 1 if you have the `_isnanf' function. */
-/* #undef _GLIBCXX_HAVE__ISNANF */
-
-/* Define to 1 if you have the `_isnanl' function. */
-/* #undef _GLIBCXX_HAVE__ISNANL */
-
-/* Define to 1 if you have the `_ldexpf' function. */
-/* #undef _GLIBCXX_HAVE__LDEXPF */
-
-/* Define to 1 if you have the `_ldexpl' function. */
-/* #undef _GLIBCXX_HAVE__LDEXPL */
-
-/* Define to 1 if you have the `_log10f' function. */
-/* #undef _GLIBCXX_HAVE__LOG10F */
-
-/* Define to 1 if you have the `_log10l' function. */
-/* #undef _GLIBCXX_HAVE__LOG10L */
-
-/* Define to 1 if you have the `_logf' function. */
-/* #undef _GLIBCXX_HAVE__LOGF */
-
-/* Define to 1 if you have the `_logl' function. */
-/* #undef _GLIBCXX_HAVE__LOGL */
-
-/* Define to 1 if you have the `_modf' function. */
-/* #undef _GLIBCXX_HAVE__MODF */
-
-/* Define to 1 if you have the `_modff' function. */
-/* #undef _GLIBCXX_HAVE__MODFF */
-
-/* Define to 1 if you have the `_modfl' function. */
-/* #undef _GLIBCXX_HAVE__MODFL */
-
-/* Define to 1 if you have the `_powf' function. */
-/* #undef _GLIBCXX_HAVE__POWF */
-
-/* Define to 1 if you have the `_powl' function. */
-/* #undef _GLIBCXX_HAVE__POWL */
-
-/* Define to 1 if you have the `_qfpclass' function. */
-/* #undef _GLIBCXX_HAVE__QFPCLASS */
-
-/* Define to 1 if you have the `_sincos' function. */
-/* #undef _GLIBCXX_HAVE__SINCOS */
-
-/* Define to 1 if you have the `_sincosf' function. */
-/* #undef _GLIBCXX_HAVE__SINCOSF */
-
-/* Define to 1 if you have the `_sincosl' function. */
-/* #undef _GLIBCXX_HAVE__SINCOSL */
-
-/* Define to 1 if you have the `_sinf' function. */
-/* #undef _GLIBCXX_HAVE__SINF */
-
-/* Define to 1 if you have the `_sinhf' function. */
-/* #undef _GLIBCXX_HAVE__SINHF */
-
-/* Define to 1 if you have the `_sinhl' function. */
-/* #undef _GLIBCXX_HAVE__SINHL */
-
-/* Define to 1 if you have the `_sinl' function. */
-/* #undef _GLIBCXX_HAVE__SINL */
-
-/* Define to 1 if you have the `_sqrtf' function. */
-/* #undef _GLIBCXX_HAVE__SQRTF */
-
-/* Define to 1 if you have the `_sqrtl' function. */
-/* #undef _GLIBCXX_HAVE__SQRTL */
-
-/* Define to 1 if you have the `_tanf' function. */
-/* #undef _GLIBCXX_HAVE__TANF */
-
-/* Define to 1 if you have the `_tanhf' function. */
-/* #undef _GLIBCXX_HAVE__TANHF */
-
-/* Define to 1 if you have the `_tanhl' function. */
-/* #undef _GLIBCXX_HAVE__TANHL */
-
-/* Define to 1 if you have the `_tanl' function. */
-/* #undef _GLIBCXX_HAVE__TANL */
-
-/* Define as const if the declaration of iconv() needs const. */
-/* #undef _GLIBCXX_ICONV_CONST */
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
-#define LT_OBJDIR ".libs/"
-
-/* Name of package */
-/* #undef _GLIBCXX_PACKAGE */
-
-/* Define to the address where bug reports for this package should be sent. */
-#define _GLIBCXX_PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define _GLIBCXX_PACKAGE_NAME "package-unused"
-
-/* Define to the full name and version of this package. */
-#define _GLIBCXX_PACKAGE_STRING "package-unused version-unused"
-
-/* Define to the one symbol short name of this package. */
-#define _GLIBCXX_PACKAGE_TARNAME "libstdc++"
-
-/* Define to the home page for this package. */
-#define _GLIBCXX_PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define _GLIBCXX_PACKAGE__GLIBCXX_VERSION "version-unused"
-
-/* The size of `char', as computed by sizeof. */
-/* #undef SIZEOF_CHAR */
-
-/* The size of `int', as computed by sizeof. */
-/* #undef SIZEOF_INT */
-
-/* The size of `long', as computed by sizeof. */
-/* #undef SIZEOF_LONG */
-
-/* The size of `short', as computed by sizeof. */
-/* #undef SIZEOF_SHORT */
-
-/* The size of `void *', as computed by sizeof. */
-/* #undef SIZEOF_VOID_P */
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Version number of package */
-/* #undef _GLIBCXX_VERSION */
-
-/* Define if builtin atomic operations for bool are supported on this host. */
-#define _GLIBCXX_ATOMIC_BUILTINS_1 1
-
-/* Define if builtin atomic operations for short are supported on this host.
-   */
-#define _GLIBCXX_ATOMIC_BUILTINS_2 1
-
-/* Define if builtin atomic operations for int are supported on this host. */
-#define _GLIBCXX_ATOMIC_BUILTINS_4 1
-
-/* Define if builtin atomic operations for long long are supported on this
-   host. */
-/* #undef _GLIBCXX_ATOMIC_BUILTINS_8 */
-
-/* Define to use concept checking code from the boost libraries. */
-/* #undef _GLIBCXX_CONCEPT_CHECKS */
-
-/* Define if a fully dynamic basic_string is wanted. */
-/* #undef _GLIBCXX_FULLY_DYNAMIC_STRING */
-
-/* Define if gthreads library is available. */
-/* #undef _GLIBCXX_HAS_GTHREADS */
-
-/* Define to 1 if a full hosted library is built, or 0 if freestanding. */
-#define _GLIBCXX_HOSTED 0
-
-/* Define if compatibility should be provided for -mlong-double-64. */
-
-/* Define if ptrdiff_t is int. */
-#define _GLIBCXX_PTRDIFF_T_IS_INT 1
-
-/* Define if using setrlimit to set resource limits during "make check" */
-/* #undef _GLIBCXX_RES_LIMITS */
-
-/* Define if size_t is unsigned int. */
-#define _GLIBCXX_SIZE_T_IS_UINT 1
-
-/* Define if the compiler is configured for setjmp/longjmp exceptions. */
-/* #undef _GLIBCXX_SJLJ_EXCEPTIONS */
-
-/* Define to the value of the EOF integer constant. */
-#define _GLIBCXX_STDIO_EOF -1
-
-/* Define to the value of the SEEK_CUR integer constant. */
-#define _GLIBCXX_STDIO_SEEK_CUR 1
-
-/* Define to the value of the SEEK_END integer constant. */
-#define _GLIBCXX_STDIO_SEEK_END 2
-
-/* Define to use symbol versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER */
-
-/* Define to use darwin versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_DARWIN */
-
-/* Define to use GNU versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_GNU */
-
-/* Define to use GNU namespace versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_GNU_NAMESPACE */
-
-/* Define to use Sun versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_SUN */
-
-/* Define if C99 functions or macros from <wchar.h>, <math.h>, <complex.h>,
-   <stdio.h>, and <stdlib.h> can be used or exposed. */
-/* #undef _GLIBCXX_USE_C99 */
-
-/* Define if C99 functions in <complex.h> should be used in <complex>. Using
-   compiler builtins for these functions requires corresponding C99 library
-   functions to be present. */
-/* #undef _GLIBCXX_USE_C99_COMPLEX */
-
-/* Define if C99 functions in <complex.h> should be used in <tr1/complex>.
-   Using compiler builtins for these functions requires corresponding C99
-   library functions to be present. */
-/* #undef _GLIBCXX_USE_C99_COMPLEX_TR1 */
-
-/* Define if C99 functions in <ctype.h> should be imported in <tr1/cctype> in
-   namespace std::tr1. */
-#define _GLIBCXX_USE_C99_CTYPE_TR1 1
-
-/* Define if C99 functions in <fenv.h> should be imported in <tr1/cfenv> in
-   namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_FENV_TR1 */
-
-/* Define if C99 functions in <inttypes.h> should be imported in
-   <tr1/cinttypes> in namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_INTTYPES_TR1 */
-
-/* Define if wchar_t C99 functions in <inttypes.h> should be imported in
-   <tr1/cinttypes> in namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1 */
-
-/* Define if C99 functions or macros in <math.h> should be imported in <cmath>
-   in namespace std. */
-/* #undef _GLIBCXX_USE_C99_MATH */
-
-/* Define if C99 functions or macros in <math.h> should be imported in
-   <tr1/cmath> in namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_MATH_TR1 */
-
-/* Define if C99 types in <stdint.h> should be imported in <tr1/cstdint> in
-   namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_STDINT_TR1 */
-
-/* Defined if clock_gettime has monotonic clock support. */
-/* #undef _GLIBCXX_USE_CLOCK_MONOTONIC */
-
-/* Defined if clock_gettime has realtime clock support. */
-/* #undef _GLIBCXX_USE_CLOCK_REALTIME */
-
-/* Define if ISO/IEC TR 24733 decimal floating point types are supported on
-   this host. */
-/* #undef _GLIBCXX_USE_DECIMAL_FLOAT */
-
-/* Defined if gettimeofday is available. */
-#define _GLIBCXX_USE_GETTIMEOFDAY 1
-
-/* Define if LFS support is available. */
-/* #undef _GLIBCXX_USE_LFS */
-
-/* Define if code specialized for long long should be used. */
-#define _GLIBCXX_USE_LONG_LONG 1
-
-/* Defined if nanosleep is available. */
-/* #undef _GLIBCXX_USE_NANOSLEEP */
-
-/* Define if NLS translations are to be used. */
-/* #undef _GLIBCXX_USE_NLS */
-
-/* Define if /dev/random and /dev/urandom are available for the random_device
-   of TR1 (Chapter 5.1). */
-#define _GLIBCXX_USE_RANDOM_TR1 1
-
-/* Defined if sched_yield is available. */
-/* #undef _GLIBCXX_USE_SCHED_YIELD */
-
-/* Define if code specialized for wchar_t should be used. */
-/* #undef _GLIBCXX_USE_WCHAR_T */
-
-#if defined (_GLIBCXX_HAVE__ACOSF) && ! defined (_GLIBCXX_HAVE_ACOSF)
-# define _GLIBCXX_HAVE_ACOSF 1
-# define acosf _acosf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ACOSL) && ! defined (_GLIBCXX_HAVE_ACOSL)
-# define _GLIBCXX_HAVE_ACOSL 1
-# define acosl _acosl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ASINF) && ! defined (_GLIBCXX_HAVE_ASINF)
-# define _GLIBCXX_HAVE_ASINF 1
-# define asinf _asinf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ASINL) && ! defined (_GLIBCXX_HAVE_ASINL)
-# define _GLIBCXX_HAVE_ASINL 1
-# define asinl _asinl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATAN2F) && ! defined (_GLIBCXX_HAVE_ATAN2F)
-# define _GLIBCXX_HAVE_ATAN2F 1
-# define atan2f _atan2f
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATAN2L) && ! defined (_GLIBCXX_HAVE_ATAN2L)
-# define _GLIBCXX_HAVE_ATAN2L 1
-# define atan2l _atan2l
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATANF) && ! defined (_GLIBCXX_HAVE_ATANF)
-# define _GLIBCXX_HAVE_ATANF 1
-# define atanf _atanf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATANL) && ! defined (_GLIBCXX_HAVE_ATANL)
-# define _GLIBCXX_HAVE_ATANL 1
-# define atanl _atanl
-#endif
-
-#if defined (_GLIBCXX_HAVE__CEILF) && ! defined (_GLIBCXX_HAVE_CEILF)
-# define _GLIBCXX_HAVE_CEILF 1
-# define ceilf _ceilf
-#endif
-
-#if defined (_GLIBCXX_HAVE__CEILL) && ! defined (_GLIBCXX_HAVE_CEILL)
-# define _GLIBCXX_HAVE_CEILL 1
-# define ceill _ceill
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSF) && ! defined (_GLIBCXX_HAVE_COSF)
-# define _GLIBCXX_HAVE_COSF 1
-# define cosf _cosf
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSHF) && ! defined (_GLIBCXX_HAVE_COSHF)
-# define _GLIBCXX_HAVE_COSHF 1
-# define coshf _coshf
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSHL) && ! defined (_GLIBCXX_HAVE_COSHL)
-# define _GLIBCXX_HAVE_COSHL 1
-# define coshl _coshl
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSL) && ! defined (_GLIBCXX_HAVE_COSL)
-# define _GLIBCXX_HAVE_COSL 1
-# define cosl _cosl
-#endif
-
-#if defined (_GLIBCXX_HAVE__EXPF) && ! defined (_GLIBCXX_HAVE_EXPF)
-# define _GLIBCXX_HAVE_EXPF 1
-# define expf _expf
-#endif
-
-#if defined (_GLIBCXX_HAVE__EXPL) && ! defined (_GLIBCXX_HAVE_EXPL)
-# define _GLIBCXX_HAVE_EXPL 1
-# define expl _expl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FABSF) && ! defined (_GLIBCXX_HAVE_FABSF)
-# define _GLIBCXX_HAVE_FABSF 1
-# define fabsf _fabsf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FABSL) && ! defined (_GLIBCXX_HAVE_FABSL)
-# define _GLIBCXX_HAVE_FABSL 1
-# define fabsl _fabsl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FINITE) && ! defined (_GLIBCXX_HAVE_FINITE)
-# define _GLIBCXX_HAVE_FINITE 1
-# define finite _finite
-#endif
-
-#if defined (_GLIBCXX_HAVE__FINITEF) && ! defined (_GLIBCXX_HAVE_FINITEF)
-# define _GLIBCXX_HAVE_FINITEF 1
-# define finitef _finitef
-#endif
-
-#if defined (_GLIBCXX_HAVE__FINITEL) && ! defined (_GLIBCXX_HAVE_FINITEL)
-# define _GLIBCXX_HAVE_FINITEL 1
-# define finitel _finitel
-#endif
-
-#if defined (_GLIBCXX_HAVE__FLOORF) && ! defined (_GLIBCXX_HAVE_FLOORF)
-# define _GLIBCXX_HAVE_FLOORF 1
-# define floorf _floorf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FLOORL) && ! defined (_GLIBCXX_HAVE_FLOORL)
-# define _GLIBCXX_HAVE_FLOORL 1
-# define floorl _floorl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FMODF) && ! defined (_GLIBCXX_HAVE_FMODF)
-# define _GLIBCXX_HAVE_FMODF 1
-# define fmodf _fmodf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FMODL) && ! defined (_GLIBCXX_HAVE_FMODL)
-# define _GLIBCXX_HAVE_FMODL 1
-# define fmodl _fmodl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FPCLASS) && ! defined (_GLIBCXX_HAVE_FPCLASS)
-# define _GLIBCXX_HAVE_FPCLASS 1
-# define fpclass _fpclass
-#endif
-
-#if defined (_GLIBCXX_HAVE__FREXPF) && ! defined (_GLIBCXX_HAVE_FREXPF)
-# define _GLIBCXX_HAVE_FREXPF 1
-# define frexpf _frexpf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FREXPL) && ! defined (_GLIBCXX_HAVE_FREXPL)
-# define _GLIBCXX_HAVE_FREXPL 1
-# define frexpl _frexpl
-#endif
-
-#if defined (_GLIBCXX_HAVE__HYPOT) && ! defined (_GLIBCXX_HAVE_HYPOT)
-# define _GLIBCXX_HAVE_HYPOT 1
-# define hypot _hypot
-#endif
-
-#if defined (_GLIBCXX_HAVE__HYPOTF) && ! defined (_GLIBCXX_HAVE_HYPOTF)
-# define _GLIBCXX_HAVE_HYPOTF 1
-# define hypotf _hypotf
-#endif
-
-#if defined (_GLIBCXX_HAVE__HYPOTL) && ! defined (_GLIBCXX_HAVE_HYPOTL)
-# define _GLIBCXX_HAVE_HYPOTL 1
-# define hypotl _hypotl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISINF) && ! defined (_GLIBCXX_HAVE_ISINF)
-# define _GLIBCXX_HAVE_ISINF 1
-# define isinf _isinf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISINFF) && ! defined (_GLIBCXX_HAVE_ISINFF)
-# define _GLIBCXX_HAVE_ISINFF 1
-# define isinff _isinff
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISINFL) && ! defined (_GLIBCXX_HAVE_ISINFL)
-# define _GLIBCXX_HAVE_ISINFL 1
-# define isinfl _isinfl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISNAN) && ! defined (_GLIBCXX_HAVE_ISNAN)
-# define _GLIBCXX_HAVE_ISNAN 1
-# define isnan _isnan
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISNANF) && ! defined (_GLIBCXX_HAVE_ISNANF)
-# define _GLIBCXX_HAVE_ISNANF 1
-# define isnanf _isnanf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISNANL) && ! defined (_GLIBCXX_HAVE_ISNANL)
-# define _GLIBCXX_HAVE_ISNANL 1
-# define isnanl _isnanl
-#endif
-
-#if defined (_GLIBCXX_HAVE__LDEXPF) && ! defined (_GLIBCXX_HAVE_LDEXPF)
-# define _GLIBCXX_HAVE_LDEXPF 1
-# define ldexpf _ldexpf
-#endif
-
-#if defined (_GLIBCXX_HAVE__LDEXPL) && ! defined (_GLIBCXX_HAVE_LDEXPL)
-# define _GLIBCXX_HAVE_LDEXPL 1
-# define ldexpl _ldexpl
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOG10F) && ! defined (_GLIBCXX_HAVE_LOG10F)
-# define _GLIBCXX_HAVE_LOG10F 1
-# define log10f _log10f
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOG10L) && ! defined (_GLIBCXX_HAVE_LOG10L)
-# define _GLIBCXX_HAVE_LOG10L 1
-# define log10l _log10l
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOGF) && ! defined (_GLIBCXX_HAVE_LOGF)
-# define _GLIBCXX_HAVE_LOGF 1
-# define logf _logf
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOGL) && ! defined (_GLIBCXX_HAVE_LOGL)
-# define _GLIBCXX_HAVE_LOGL 1
-# define logl _logl
-#endif
-
-#if defined (_GLIBCXX_HAVE__MODF) && ! defined (_GLIBCXX_HAVE_MODF)
-# define _GLIBCXX_HAVE_MODF 1
-# define modf _modf
-#endif
-
-#if defined (_GLIBCXX_HAVE__MODFF) && ! defined (_GLIBCXX_HAVE_MODFF)
-# define _GLIBCXX_HAVE_MODFF 1
-# define modff _modff
-#endif
-
-#if defined (_GLIBCXX_HAVE__MODFL) && ! defined (_GLIBCXX_HAVE_MODFL)
-# define _GLIBCXX_HAVE_MODFL 1
-# define modfl _modfl
-#endif
-
-#if defined (_GLIBCXX_HAVE__POWF) && ! defined (_GLIBCXX_HAVE_POWF)
-# define _GLIBCXX_HAVE_POWF 1
-# define powf _powf
-#endif
-
-#if defined (_GLIBCXX_HAVE__POWL) && ! defined (_GLIBCXX_HAVE_POWL)
-# define _GLIBCXX_HAVE_POWL 1
-# define powl _powl
-#endif
-
-#if defined (_GLIBCXX_HAVE__QFPCLASS) && ! defined (_GLIBCXX_HAVE_QFPCLASS)
-# define _GLIBCXX_HAVE_QFPCLASS 1
-# define qfpclass _qfpclass
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINCOS) && ! defined (_GLIBCXX_HAVE_SINCOS)
-# define _GLIBCXX_HAVE_SINCOS 1
-# define sincos _sincos
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINCOSF) && ! defined (_GLIBCXX_HAVE_SINCOSF)
-# define _GLIBCXX_HAVE_SINCOSF 1
-# define sincosf _sincosf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINCOSL) && ! defined (_GLIBCXX_HAVE_SINCOSL)
-# define _GLIBCXX_HAVE_SINCOSL 1
-# define sincosl _sincosl
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINF) && ! defined (_GLIBCXX_HAVE_SINF)
-# define _GLIBCXX_HAVE_SINF 1
-# define sinf _sinf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINHF) && ! defined (_GLIBCXX_HAVE_SINHF)
-# define _GLIBCXX_HAVE_SINHF 1
-# define sinhf _sinhf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINHL) && ! defined (_GLIBCXX_HAVE_SINHL)
-# define _GLIBCXX_HAVE_SINHL 1
-# define sinhl _sinhl
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINL) && ! defined (_GLIBCXX_HAVE_SINL)
-# define _GLIBCXX_HAVE_SINL 1
-# define sinl _sinl
-#endif
-
-#if defined (_GLIBCXX_HAVE__SQRTF) && ! defined (_GLIBCXX_HAVE_SQRTF)
-# define _GLIBCXX_HAVE_SQRTF 1
-# define sqrtf _sqrtf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SQRTL) && ! defined (_GLIBCXX_HAVE_SQRTL)
-# define _GLIBCXX_HAVE_SQRTL 1
-# define sqrtl _sqrtl
-#endif
-
-#if defined (_GLIBCXX_HAVE__STRTOF) && ! defined (_GLIBCXX_HAVE_STRTOF)
-# define _GLIBCXX_HAVE_STRTOF 1
-# define strtof _strtof
-#endif
-
-#if defined (_GLIBCXX_HAVE__STRTOLD) && ! defined (_GLIBCXX_HAVE_STRTOLD)
-# define _GLIBCXX_HAVE_STRTOLD 1
-# define strtold _strtold
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANF) && ! defined (_GLIBCXX_HAVE_TANF)
-# define _GLIBCXX_HAVE_TANF 1
-# define tanf _tanf
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANHF) && ! defined (_GLIBCXX_HAVE_TANHF)
-# define _GLIBCXX_HAVE_TANHF 1
-# define tanhf _tanhf
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANHL) && ! defined (_GLIBCXX_HAVE_TANHL)
-# define _GLIBCXX_HAVE_TANHL 1
-# define tanhl _tanhl
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANL) && ! defined (_GLIBCXX_HAVE_TANL)
-# define _GLIBCXX_HAVE_TANL 1
-# define tanl _tanl
-#endif
-
-#endif // _GLIBCXX_CXX_CONFIG_H
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/bits/cpu_defines.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/bits/cpu_defines.h
deleted file mode 100644
index c1b9863..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/bits/cpu_defines.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Specific definitions for generic platforms  -*- C++ -*-
-
-// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/cpu_defines.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{iosfwd}
- */
-
-#ifndef _GLIBCXX_CPU_DEFINES
-#define _GLIBCXX_CPU_DEFINES 1
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/bits/cxxabi_tweaks.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/bits/cxxabi_tweaks.h
deleted file mode 100644
index 2ac349d..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/bits/cxxabi_tweaks.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Control various target specific ABI tweaks.  ARM version.
-
-// Copyright (C) 2004, 2006, 2008, 2009, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/cxxabi_tweaks.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{cxxabi.h}
- */
-
-#ifndef _CXXABI_TWEAKS_H
-#define _CXXABI_TWEAKS_H 1
-
-#ifdef __cplusplus
-namespace __cxxabiv1
-{
-  extern "C" 
-  {
-#endif
-
-#ifdef __ARM_EABI__
-  // The ARM EABI uses the least significant bit of a 32-bit
-  // guard variable.  */
-#define _GLIBCXX_GUARD_TEST(x) ((*(x) & 1) != 0)
-#define _GLIBCXX_GUARD_SET(x) *(x) = 1
-#define _GLIBCXX_GUARD_BIT 1
-#define _GLIBCXX_GUARD_PENDING_BIT __guard_test_bit (1, 1)
-#define _GLIBCXX_GUARD_WAITING_BIT __guard_test_bit (2, 1)
-  typedef int __guard;
-
-  // We also want the element size in array cookies.
-#define _GLIBCXX_ELTSIZE_IN_COOKIE 1
-  
-  // __cxa_vec_ctor should return a pointer to the array.
-  typedef void * __cxa_vec_ctor_return_type;
-#define _GLIBCXX_CXA_VEC_CTOR_RETURN(x) return x
-  // Constructors and destructors return the "this" pointer.
-  typedef void * __cxa_cdtor_return_type;
-
-#else // __ARM_EABI__
-
-  // The generic ABI uses the first byte of a 64-bit guard variable.
-#define _GLIBCXX_GUARD_TEST(x) (*(char *) (x) != 0)
-#define _GLIBCXX_GUARD_SET(x) *(char *) (x) = 1
-#define _GLIBCXX_GUARD_BIT __guard_test_bit (0, 1)
-#define _GLIBCXX_GUARD_PENDING_BIT __guard_test_bit (1, 1)
-#define _GLIBCXX_GUARD_WAITING_BIT __guard_test_bit (2, 1)
-  __extension__ typedef int __guard __attribute__((mode (__DI__)));
-
-  // __cxa_vec_ctor has void return type.
-  typedef void __cxa_vec_ctor_return_type;
-#define _GLIBCXX_CXA_VEC_CTOR_RETURN(x) return
-  // Constructors and destructors do not return a value.
-  typedef void __cxa_cdtor_return_type;
-
-#endif //!__ARM_EABI__
-
-#ifdef __cplusplus
-  }
-} // namespace __cxxabiv1
-#endif
-
-#endif 
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/bits/os_defines.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/bits/os_defines.h
deleted file mode 100644
index 0c8f77d..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/bits/os_defines.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Specific definitions for Bionic  -*- C++ -*-
-
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/os_defines.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{iosfwd}
- */
-
-#ifndef _GLIBCXX_OS_DEFINES
-#define _GLIBCXX_OS_DEFINES 1
-
-// System-specific #define, typedefs, corrections, etc, go here.  This
-// file will come before all others.
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/thumb/bits/c++config.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/thumb/bits/c++config.h
deleted file mode 100644
index 309d185..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/thumb/bits/c++config.h
+++ /dev/null
@@ -1,1568 +0,0 @@
-// Predefined symbols and macros -*- C++ -*-
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/c++config.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{iosfwd}
- */
-
-#ifndef _GLIBCXX_CXX_CONFIG_H
-#define _GLIBCXX_CXX_CONFIG_H 1
-
-// The current version of the C++ library in compressed ISO date format.
-#define __GLIBCXX__ 20110718
-
-// Macros for various attributes.
-//   _GLIBCXX_PURE
-//   _GLIBCXX_CONST
-//   _GLIBCXX_NORETURN
-//   _GLIBCXX_NOTHROW
-//   _GLIBCXX_VISIBILITY
-#ifndef _GLIBCXX_PURE
-# define _GLIBCXX_PURE __attribute__ ((__pure__))
-#endif
-
-#ifndef _GLIBCXX_CONST
-# define _GLIBCXX_CONST __attribute__ ((__const__))
-#endif
-
-#ifndef _GLIBCXX_NORETURN
-# define _GLIBCXX_NORETURN __attribute__ ((__noreturn__))
-#endif
-
-#ifndef _GLIBCXX_NOTHROW
-# ifdef __cplusplus
-#  define _GLIBCXX_NOTHROW throw()
-# else
-#  define _GLIBCXX_NOTHROW __attribute__((__nothrow__))
-# endif
-#endif
-
-// Macros for visibility attributes.
-//   _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
-//   _GLIBCXX_VISIBILITY
-# define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY 1
-
-#if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
-# define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))
-#else
-// If this is not supplied by the OS-specific or CPU-specific
-// headers included below, it will be defined to an empty default.
-# define _GLIBCXX_VISIBILITY(V) _GLIBCXX_PSEUDO_VISIBILITY(V)
-#endif
-
-// Macros for deprecated attributes.
-//   _GLIBCXX_USE_DEPRECATED
-//   _GLIBCXX_DEPRECATED
-#ifndef _GLIBCXX_USE_DEPRECATED
-# define _GLIBCXX_USE_DEPRECATED 1
-#endif
-
-#if defined(__DEPRECATED) && defined(__GXX_EXPERIMENTAL_CXX0X__)
-# define _GLIBCXX_DEPRECATED __attribute__ ((__deprecated__))
-#else
-# define _GLIBCXX_DEPRECATED
-#endif
-
-#if __cplusplus
-
-// Macro for constexpr, to support in mixed 03/0x mode.
-#ifndef _GLIBCXX_CONSTEXPR
-# ifdef __GXX_EXPERIMENTAL_CXX0X__
-#  define _GLIBCXX_CONSTEXPR constexpr
-#  define _GLIBCXX_USE_CONSTEXPR constexpr
-# else
-#  define _GLIBCXX_CONSTEXPR
-#  define _GLIBCXX_USE_CONSTEXPR const
-# endif
-#endif
-
-// Macro for extern template, ie controling template linkage via use
-// of extern keyword on template declaration. As documented in the g++
-// manual, it inhibits all implicit instantiations and is used
-// throughout the library to avoid multiple weak definitions for
-// required types that are already explicitly instantiated in the
-// library binary. This substantially reduces the binary size of
-// resulting executables.
-// Special case: _GLIBCXX_EXTERN_TEMPLATE == -1 disallows extern
-// templates only in basic_string, thus activating its debug-mode
-// checks even at -O0.
-# define _GLIBCXX_EXTERN_TEMPLATE 1
-
-/*
-  Outline of libstdc++ namespaces.
-
-  namespace std
-  {
-    namespace __debug { }
-    namespace __parallel { }
-    namespace __profile { }
-    namespace __cxx1998 { }
-
-    namespace __detail { }
-
-    namespace rel_ops { }
-
-    namespace tr1
-    {
-      namespace placeholders { }
-      namespace regex_constants { }
-      namespace __detail { }
-    }
-
-    namespace decimal { }
-
-    namespace chrono { }
-    namespace placeholders { }
-    namespace regex_constants { }
-    namespace this_thread { }
-  }
-
-  namespace abi { }
-
-  namespace __gnu_cxx
-  {
-    namespace __detail { }
-  }
-
-  For full details see:
-  http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html
-*/
-namespace std
-{
-  typedef __SIZE_TYPE__ 	size_t;
-  typedef __PTRDIFF_TYPE__	ptrdiff_t;
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-  typedef decltype(nullptr)	nullptr_t;
-#endif
-}
-
-
-// Defined if inline namespaces are used for versioning.
-# define _GLIBCXX_INLINE_VERSION 0
-
-// Inline namespace for symbol versioning.
-#if _GLIBCXX_INLINE_VERSION
-namespace std
-{
-  inline namespace _6 { }
-
-  namespace rel_ops { inline namespace _6 { } }
-
-  namespace tr1
-  {
-    inline namespace _6 { }
-    namespace placeholders { inline namespace _6 { } }
-    namespace regex_constants { inline namespace _6 { } }
-    namespace __detail { inline namespace _6 { } }
-  }
-
-  namespace decimal { inline namespace _6 { } }
-
-  namespace chrono { inline namespace _6 { } }
-  namespace placeholders { inline namespace _6 { } }
-  namespace regex_constants { inline namespace _6 { } }
-  namespace this_thread { inline namespace _6 { } }
-
-  namespace __detail { inline namespace _6 { } }
-  namespace __regex { inline namespace _6 { } }
-}
-
-namespace __gnu_cxx
-{
-  inline namespace _6 { }
-  namespace __detail { inline namespace _6 { } }
-}
-# define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace _6 {
-# define _GLIBCXX_END_NAMESPACE_VERSION }
-#else
-# define _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_VERSION
-#endif
-
-
-// Inline namespaces for special modes: debug, parallel, profile.
-#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PARALLEL) \
-    || defined(_GLIBCXX_PROFILE)
-namespace std
-{
-  // Non-inline namespace for components replaced by alternates in active mode.
-  namespace __cxx1998
-  {
-#if _GLIBCXX_INLINE_VERSION
- inline namespace _6 { }
-#endif
-  }
-
-  // Inline namespace for debug mode.
-# ifdef _GLIBCXX_DEBUG
-  inline namespace __debug { }
-# endif
-
-  // Inline namespaces for parallel mode.
-# ifdef _GLIBCXX_PARALLEL
-  inline namespace __parallel { }
-# endif
-
-  // Inline namespaces for profile mode
-# ifdef _GLIBCXX_PROFILE
-  inline namespace __profile { }
-# endif
-}
-
-// Check for invalid usage and unsupported mixed-mode use.
-# if defined(_GLIBCXX_DEBUG) && defined(_GLIBCXX_PARALLEL)
-#  error illegal use of multiple inlined namespaces
-# endif
-# if defined(_GLIBCXX_PROFILE) && defined(_GLIBCXX_DEBUG)
-#  error illegal use of multiple inlined namespaces
-# endif
-# if defined(_GLIBCXX_PROFILE) && defined(_GLIBCXX_PARALLEL)
-#  error illegal use of multiple inlined namespaces
-# endif
-
-// Check for invalid use due to lack for weak symbols.
-# if __NO_INLINE__ && !__GXX_WEAK__
-#  warning currently using inlined namespace mode which may fail \
-   without inlining due to lack of weak symbols
-# endif
-#endif
-
-// Macros for namespace scope. Either namespace std:: or the name
-// of some nested namespace within it corresponding to the active mode.
-// _GLIBCXX_STD_A
-// _GLIBCXX_STD_C
-//
-// Macros for opening/closing conditional namespaces.
-// _GLIBCXX_BEGIN_NAMESPACE_ALGO
-// _GLIBCXX_END_NAMESPACE_ALGO
-// _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
-// _GLIBCXX_END_NAMESPACE_CONTAINER
-#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PROFILE)
-# define _GLIBCXX_STD_C __cxx1998
-# define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER \
-	 namespace _GLIBCXX_STD_C { _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_CONTAINER \
-	 } _GLIBCXX_END_NAMESPACE_VERSION
-# undef _GLIBCXX_EXTERN_TEMPLATE
-#  define _GLIBCXX_EXTERN_TEMPLATE 1 -1
-#endif
-
-#ifdef _GLIBCXX_PARALLEL
-# define _GLIBCXX_STD_A __cxx1998
-# define _GLIBCXX_BEGIN_NAMESPACE_ALGO \
-	 namespace _GLIBCXX_STD_A { _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_ALGO \
-	 } _GLIBCXX_END_NAMESPACE_VERSION
-#endif
-
-#ifndef _GLIBCXX_STD_A
-# define _GLIBCXX_STD_A std
-#endif
-
-#ifndef _GLIBCXX_STD_C
-# define _GLIBCXX_STD_C std
-#endif
-
-#ifndef _GLIBCXX_BEGIN_NAMESPACE_ALGO
-# define _GLIBCXX_BEGIN_NAMESPACE_ALGO
-#endif
-
-#ifndef _GLIBCXX_END_NAMESPACE_ALGO
-# define _GLIBCXX_END_NAMESPACE_ALGO
-#endif
-
-#ifndef _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
-# define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
-#endif
-
-#ifndef _GLIBCXX_END_NAMESPACE_CONTAINER
-# define _GLIBCXX_END_NAMESPACE_CONTAINER
-#endif
-
-// GLIBCXX_ABI Deprecated
-// Define if compatibility should be provided for -mlong-double-64.
-#undef _GLIBCXX_LONG_DOUBLE_COMPAT
-
-// Inline namespace for long double 128 mode.
-#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
-namespace std
-{
-  inline namespace __gnu_cxx_ldbl128 { }
-}
-# define _GLIBCXX_NAMESPACE_LDBL __gnu_cxx_ldbl128::
-# define _GLIBCXX_BEGIN_NAMESPACE_LDBL namespace __gnu_cxx_ldbl128 {
-# define _GLIBCXX_END_NAMESPACE_LDBL }
-#else
-# define _GLIBCXX_NAMESPACE_LDBL
-# define _GLIBCXX_BEGIN_NAMESPACE_LDBL
-# define _GLIBCXX_END_NAMESPACE_LDBL
-#endif
-
-// Assert.
-#if !defined(_GLIBCXX_DEBUG) && !defined(_GLIBCXX_PARALLEL)
-# define __glibcxx_assert(_Condition)
-#else
-namespace std
-{
-  // Avoid the use of assert, because we're trying to keep the <cassert>
-  // include out of the mix.
-  inline void
-  __replacement_assert(const char* __file, int __line,
-		       const char* __function, const char* __condition)
-  {
-    __builtin_printf("%s:%d: %s: Assertion '%s' failed.\n", __file, __line,
-		     __function, __condition);
-    __builtin_abort();
-  }
-}
-#define __glibcxx_assert(_Condition)				   	 \
-  do 									 \
-  {							      		 \
-    if (! (_Condition))                                                  \
-      std::__replacement_assert(__FILE__, __LINE__, __PRETTY_FUNCTION__, \
-				#_Condition);				 \
-  } while (false)
-#endif
-
-// Macros for race detectors.
-// _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) and
-// _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) should be used to explain
-// atomic (lock-free) synchronization to race detectors:
-// the race detector will infer a happens-before arc from the former to the
-// latter when they share the same argument pointer.
-//
-// The most frequent use case for these macros (and the only case in the
-// current implementation of the library) is atomic reference counting:
-//   void _M_remove_reference()
-//   {
-//     _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&this->_M_refcount);
-//     if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount, -1) <= 0)
-//       {
-//         _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&this->_M_refcount);
-//         _M_destroy(__a);
-//       }
-//   }
-// The annotations in this example tell the race detector that all memory
-// accesses occurred when the refcount was positive do not race with
-// memory accesses which occurred after the refcount became zero.
-#ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE
-# define  _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A)
-#endif
-#ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER
-# define  _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A)
-#endif
-
-// Macros for C linkage: define extern "C" linkage only when using C++.
-# define _GLIBCXX_BEGIN_EXTERN_C extern "C" {
-# define _GLIBCXX_END_EXTERN_C }
-
-#else // !__cplusplus
-# define _GLIBCXX_BEGIN_EXTERN_C
-# define _GLIBCXX_END_EXTERN_C
-#endif
-
-
-// First includes.
-
-// Pick up any OS-specific definitions.
-#include <bits/os_defines.h>
-
-// Pick up any CPU-specific definitions.
-#include <bits/cpu_defines.h>
-
-// If platform uses neither visibility nor psuedo-visibility,
-// specify empty default for namespace annotation macros.
-#ifndef _GLIBCXX_PSEUDO_VISIBILITY
-# define _GLIBCXX_PSEUDO_VISIBILITY(V)
-#endif
-
-// Certain function definitions that are meant to be overridable from
-// user code are decorated with this macro.  For some targets, this
-// macro causes these definitions to be weak.
-#ifndef _GLIBCXX_WEAK_DEFINITION
-# define _GLIBCXX_WEAK_DEFINITION
-#endif
-
-
-// The remainder of the prewritten config is automatic; all the
-// user hooks are listed above.
-
-// Create a boolean flag to be used to determine if --fast-math is set.
-#ifdef __FAST_MATH__
-# define _GLIBCXX_FAST_MATH 1
-#else
-# define _GLIBCXX_FAST_MATH 0
-#endif
-
-// This marks string literals in header files to be extracted for eventual
-// translation.  It is primarily used for messages in thrown exceptions; see
-// src/functexcept.cc.  We use __N because the more traditional _N is used
-// for something else under certain OSes (see BADNAMES).
-#define __N(msgid)     (msgid)
-
-// For example, <windows.h> is known to #define min and max as macros...
-#undef min
-#undef max
-
-// End of prewritten config; the settings discovered at configure time follow.
-/* config.h.  Generated from config.h.in by configure.  */
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to 1 if you have the `acosf' function. */
-#define _GLIBCXX_HAVE_ACOSF 1
-
-/* Define to 1 if you have the `acosl' function. */
-/* #undef _GLIBCXX_HAVE_ACOSL */
-
-/* Define to 1 if you have the `asinf' function. */
-#define _GLIBCXX_HAVE_ASINF 1
-
-/* Define to 1 if you have the `asinl' function. */
-/* #undef _GLIBCXX_HAVE_ASINL */
-
-/* Define to 1 if the target assembler supports .symver directive. */
-#define _GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE 1
-
-/* Define to 1 if you have the `atan2f' function. */
-#define _GLIBCXX_HAVE_ATAN2F 1
-
-/* Define to 1 if you have the `atan2l' function. */
-/* #undef _GLIBCXX_HAVE_ATAN2L */
-
-/* Define to 1 if you have the `atanf' function. */
-#define _GLIBCXX_HAVE_ATANF 1
-
-/* Define to 1 if you have the `atanl' function. */
-/* #undef _GLIBCXX_HAVE_ATANL */
-
-/* Define to 1 if the target assembler supports thread-local storage. */
-/* #undef _GLIBCXX_HAVE_CC_TLS */
-
-/* Define to 1 if you have the `ceilf' function. */
-#define _GLIBCXX_HAVE_CEILF 1
-
-/* Define to 1 if you have the `ceill' function. */
-#define _GLIBCXX_HAVE_CEILL 1
-
-/* Define to 1 if you have the <complex.h> header file. */
-/* #undef _GLIBCXX_HAVE_COMPLEX_H */
-
-/* Define to 1 if you have the `cosf' function. */
-#define _GLIBCXX_HAVE_COSF 1
-
-/* Define to 1 if you have the `coshf' function. */
-#define _GLIBCXX_HAVE_COSHF 1
-
-/* Define to 1 if you have the `coshl' function. */
-/* #undef _GLIBCXX_HAVE_COSHL */
-
-/* Define to 1 if you have the `cosl' function. */
-/* #undef _GLIBCXX_HAVE_COSL */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define _GLIBCXX_HAVE_DLFCN_H 1
-
-/* Define if EBADMSG exists. */
-#define _GLIBCXX_HAVE_EBADMSG 1
-
-/* Define if ECANCELED exists. */
-#define _GLIBCXX_HAVE_ECANCELED 1
-
-/* Define if EIDRM exists. */
-#define _GLIBCXX_HAVE_EIDRM 1
-
-/* Define to 1 if you have the <endian.h> header file. */
-#define _GLIBCXX_HAVE_ENDIAN_H 1
-
-/* Define if ENODATA exists. */
-#define _GLIBCXX_HAVE_ENODATA 1
-
-/* Define if ENOLINK exists. */
-#define _GLIBCXX_HAVE_ENOLINK 1
-
-/* Define if ENOSR exists. */
-#define _GLIBCXX_HAVE_ENOSR 1
-
-/* Define if ENOSTR exists. */
-#define _GLIBCXX_HAVE_ENOSTR 1
-
-/* Define if ENOTRECOVERABLE exists. */
-#define _GLIBCXX_HAVE_ENOTRECOVERABLE 1
-
-/* Define if ENOTSUP exists. */
-#define _GLIBCXX_HAVE_ENOTSUP 1
-
-/* Define if EOVERFLOW exists. */
-#define _GLIBCXX_HAVE_EOVERFLOW 1
-
-/* Define if EOWNERDEAD exists. */
-#define _GLIBCXX_HAVE_EOWNERDEAD 1
-
-/* Define if EPROTO exists. */
-#define _GLIBCXX_HAVE_EPROTO 1
-
-/* Define if ETIME exists. */
-#define _GLIBCXX_HAVE_ETIME 1
-
-/* Define if ETXTBSY exists. */
-#define _GLIBCXX_HAVE_ETXTBSY 1
-
-/* Define to 1 if you have the <execinfo.h> header file. */
-/* #undef _GLIBCXX_HAVE_EXECINFO_H */
-
-/* Define to 1 if you have the `expf' function. */
-#define _GLIBCXX_HAVE_EXPF 1
-
-/* Define to 1 if you have the `expl' function. */
-/* #undef _GLIBCXX_HAVE_EXPL */
-
-/* Define to 1 if you have the `fabsf' function. */
-#define _GLIBCXX_HAVE_FABSF 1
-
-/* Define to 1 if you have the `fabsl' function. */
-#define _GLIBCXX_HAVE_FABSL 1
-
-/* Define to 1 if you have the <fenv.h> header file. */
-/* #undef _GLIBCXX_HAVE_FENV_H */
-
-/* Define to 1 if you have the `finite' function. */
-#define _GLIBCXX_HAVE_FINITE 1
-
-/* Define to 1 if you have the `finitef' function. */
-#define _GLIBCXX_HAVE_FINITEF 1
-
-/* Define to 1 if you have the `finitel' function. */
-/* #undef _GLIBCXX_HAVE_FINITEL */
-
-/* Define to 1 if you have the <float.h> header file. */
-#define _GLIBCXX_HAVE_FLOAT_H 1
-
-/* Define to 1 if you have the `floorf' function. */
-#define _GLIBCXX_HAVE_FLOORF 1
-
-/* Define to 1 if you have the `floorl' function. */
-#define _GLIBCXX_HAVE_FLOORL 1
-
-/* Define to 1 if you have the `fmodf' function. */
-#define _GLIBCXX_HAVE_FMODF 1
-
-/* Define to 1 if you have the `fmodl' function. */
-/* #undef _GLIBCXX_HAVE_FMODL */
-
-/* Define to 1 if you have the `fpclass' function. */
-/* #undef _GLIBCXX_HAVE_FPCLASS */
-
-/* Define to 1 if you have the <fp.h> header file. */
-/* #undef _GLIBCXX_HAVE_FP_H */
-
-/* Define to 1 if you have the `frexpf' function. */
-#define _GLIBCXX_HAVE_FREXPF 1
-
-/* Define to 1 if you have the `frexpl' function. */
-/* #undef _GLIBCXX_HAVE_FREXPL */
-
-/* Define if _Unwind_GetIPInfo is available. */
-#define _GLIBCXX_HAVE_GETIPINFO 1
-
-/* Define if gthr-default.h exists (meaning that threading support is
-   enabled). */
-#define _GLIBCXX_HAVE_GTHR_DEFAULT 1
-
-/* Define to 1 if you have the `hypot' function. */
-#define _GLIBCXX_HAVE_HYPOT 1
-
-/* Define to 1 if you have the `hypotf' function. */
-#define _GLIBCXX_HAVE_HYPOTF 1
-
-/* Define to 1 if you have the `hypotl' function. */
-/* #undef _GLIBCXX_HAVE_HYPOTL */
-
-/* Define if you have the iconv() function. */
-/* #undef _GLIBCXX_HAVE_ICONV */
-
-/* Define to 1 if you have the <ieeefp.h> header file. */
-/* #undef _GLIBCXX_HAVE_IEEEFP_H */
-
-/* Define if int64_t is available in <stdint.h>. */
-#define _GLIBCXX_HAVE_INT64_T 1
-
-/* Define if int64_t is a long. */
-/* #undef _GLIBCXX_HAVE_INT64_T_LONG */
-
-/* Define if int64_t is a long long. */
-#define _GLIBCXX_HAVE_INT64_T_LONG_LONG 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define _GLIBCXX_HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `isinf' function. */
-/* #undef _GLIBCXX_HAVE_ISINF */
-
-/* Define to 1 if you have the `isinff' function. */
-/* #undef _GLIBCXX_HAVE_ISINFF */
-
-/* Define to 1 if you have the `isinfl' function. */
-/* #undef _GLIBCXX_HAVE_ISINFL */
-
-/* Define to 1 if you have the `isnan' function. */
-#define _GLIBCXX_HAVE_ISNAN 1
-
-/* Define to 1 if you have the `isnanf' function. */
-#define _GLIBCXX_HAVE_ISNANF 1
-
-/* Define to 1 if you have the `isnanl' function. */
-/* #undef _GLIBCXX_HAVE_ISNANL */
-
-/* Defined if iswblank exists. */
-/* #undef _GLIBCXX_HAVE_ISWBLANK */
-
-/* Define if LC_MESSAGES is available in <locale.h>. */
-#define _GLIBCXX_HAVE_LC_MESSAGES 1
-
-/* Define to 1 if you have the `ldexpf' function. */
-#define _GLIBCXX_HAVE_LDEXPF 1
-
-/* Define to 1 if you have the `ldexpl' function. */
-#define _GLIBCXX_HAVE_LDEXPL 1
-
-/* Define to 1 if you have the <libintl.h> header file. */
-/* #undef _GLIBCXX_HAVE_LIBINTL_H */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_AS */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_DATA */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_FSIZE */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_RSS */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_VMEM */
-
-/* Define if futex syscall is available. */
-/* #undef _GLIBCXX_HAVE_LINUX_FUTEX */
-
-/* Define to 1 if you have the <locale.h> header file. */
-#define _GLIBCXX_HAVE_LOCALE_H 1
-
-/* Define to 1 if you have the `log10f' function. */
-#define _GLIBCXX_HAVE_LOG10F 1
-
-/* Define to 1 if you have the `log10l' function. */
-/* #undef _GLIBCXX_HAVE_LOG10L */
-
-/* Define to 1 if you have the `logf' function. */
-#define _GLIBCXX_HAVE_LOGF 1
-
-/* Define to 1 if you have the `logl' function. */
-/* #undef _GLIBCXX_HAVE_LOGL */
-
-/* Define to 1 if you have the <machine/endian.h> header file. */
-/* #undef _GLIBCXX_HAVE_MACHINE_ENDIAN_H */
-
-/* Define to 1 if you have the <machine/param.h> header file. */
-/* #undef _GLIBCXX_HAVE_MACHINE_PARAM_H */
-
-/* Define if mbstate_t exists in wchar.h. */
-#define _GLIBCXX_HAVE_MBSTATE_T 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define _GLIBCXX_HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `modf' function. */
-#define _GLIBCXX_HAVE_MODF 1
-
-/* Define to 1 if you have the `modff' function. */
-#define _GLIBCXX_HAVE_MODFF 1
-
-/* Define to 1 if you have the `modfl' function. */
-/* #undef _GLIBCXX_HAVE_MODFL */
-
-/* Define to 1 if you have the <nan.h> header file. */
-/* #undef _GLIBCXX_HAVE_NAN_H */
-
-/* Define if poll is available in <poll.h>. */
-#define _GLIBCXX_HAVE_POLL 1
-
-/* Define to 1 if you have the `powf' function. */
-#define _GLIBCXX_HAVE_POWF 1
-
-/* Define to 1 if you have the `powl' function. */
-/* #undef _GLIBCXX_HAVE_POWL */
-
-/* Define to 1 if you have the `qfpclass' function. */
-/* #undef _GLIBCXX_HAVE_QFPCLASS */
-
-/* Define to 1 if you have the `setenv' function. */
-/* #undef _GLIBCXX_HAVE_SETENV */
-
-/* Define to 1 if you have the `sincos' function. */
-#define _GLIBCXX_HAVE_SINCOS 1
-
-/* Define to 1 if you have the `sincosf' function. */
-#define _GLIBCXX_HAVE_SINCOSF 1
-
-/* Define to 1 if you have the `sincosl' function. */
-#define _GLIBCXX_HAVE_SINCOSL 1
-
-/* Define to 1 if you have the `sinf' function. */
-#define _GLIBCXX_HAVE_SINF 1
-
-/* Define to 1 if you have the `sinhf' function. */
-#define _GLIBCXX_HAVE_SINHF 1
-
-/* Define to 1 if you have the `sinhl' function. */
-/* #undef _GLIBCXX_HAVE_SINHL */
-
-/* Define to 1 if you have the `sinl' function. */
-/* #undef _GLIBCXX_HAVE_SINL */
-
-/* Define to 1 if you have the `sqrtf' function. */
-#define _GLIBCXX_HAVE_SQRTF 1
-
-/* Define to 1 if you have the `sqrtl' function. */
-/* #undef _GLIBCXX_HAVE_SQRTL */
-
-/* Define to 1 if you have the <stdbool.h> header file. */
-/* #undef _GLIBCXX_HAVE_STDBOOL_H */
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define _GLIBCXX_HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define _GLIBCXX_HAVE_STDLIB_H 1
-
-/* Define if strerror_l is available in <string.h>. */
-/* #undef _GLIBCXX_HAVE_STRERROR_L */
-
-/* Define if strerror_r is available in <string.h>. */
-#define _GLIBCXX_HAVE_STRERROR_R 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define _GLIBCXX_HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define _GLIBCXX_HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strtof' function. */
-/* #undef _GLIBCXX_HAVE_STRTOF */
-
-/* Define to 1 if you have the `strtold' function. */
-/* #undef _GLIBCXX_HAVE_STRTOLD */
-
-/* Define if strxfrm_l is available in <string.h>. */
-/* #undef _GLIBCXX_HAVE_STRXFRM_L */
-
-/* Define to 1 if the target runtime linker supports binding the same symbol
-   to different versions. */
-/* #undef _GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT */
-
-/* Define to 1 if you have the <sys/filio.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_FILIO_H */
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#define _GLIBCXX_HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the <sys/ipc.h> header file. */
-#define _GLIBCXX_HAVE_SYS_IPC_H 1
-
-/* Define to 1 if you have the <sys/isa_defs.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_ISA_DEFS_H */
-
-/* Define to 1 if you have the <sys/machine.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_MACHINE_H */
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#define _GLIBCXX_HAVE_SYS_PARAM_H 1
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#define _GLIBCXX_HAVE_SYS_RESOURCE_H 1
-
-/* Define to 1 if you have the <sys/sem.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_SEM_H */
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define _GLIBCXX_HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define _GLIBCXX_HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define _GLIBCXX_HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/uio.h> header file. */
-#define _GLIBCXX_HAVE_SYS_UIO_H 1
-
-/* Define if S_IFREG is available in <sys/stat.h>. */
-/* #undef _GLIBCXX_HAVE_S_IFREG */
-
-/* Define if S_IFREG is available in <sys/stat.h>. */
-#define _GLIBCXX_HAVE_S_ISREG 1
-
-/* Define to 1 if you have the `tanf' function. */
-#define _GLIBCXX_HAVE_TANF 1
-
-/* Define to 1 if you have the `tanhf' function. */
-#define _GLIBCXX_HAVE_TANHF 1
-
-/* Define to 1 if you have the `tanhl' function. */
-/* #undef _GLIBCXX_HAVE_TANHL */
-
-/* Define to 1 if you have the `tanl' function. */
-/* #undef _GLIBCXX_HAVE_TANL */
-
-/* Define to 1 if you have the <tgmath.h> header file. */
-/* #undef _GLIBCXX_HAVE_TGMATH_H */
-
-/* Define to 1 if the target supports thread-local storage. */
-/* #undef _GLIBCXX_HAVE_TLS */
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define _GLIBCXX_HAVE_UNISTD_H 1
-
-/* Defined if vfwscanf exists. */
-/* #undef _GLIBCXX_HAVE_VFWSCANF */
-
-/* Defined if vswscanf exists. */
-/* #undef _GLIBCXX_HAVE_VSWSCANF */
-
-/* Defined if vwscanf exists. */
-/* #undef _GLIBCXX_HAVE_VWSCANF */
-
-/* Define to 1 if you have the <wchar.h> header file. */
-#define _GLIBCXX_HAVE_WCHAR_H 1
-
-/* Defined if wcstof exists. */
-/* #undef _GLIBCXX_HAVE_WCSTOF */
-
-/* Define to 1 if you have the <wctype.h> header file. */
-#define _GLIBCXX_HAVE_WCTYPE_H 1
-
-/* Define if writev is available in <sys/uio.h>. */
-#define _GLIBCXX_HAVE_WRITEV 1
-
-/* Define to 1 if you have the `_acosf' function. */
-/* #undef _GLIBCXX_HAVE__ACOSF */
-
-/* Define to 1 if you have the `_acosl' function. */
-/* #undef _GLIBCXX_HAVE__ACOSL */
-
-/* Define to 1 if you have the `_asinf' function. */
-/* #undef _GLIBCXX_HAVE__ASINF */
-
-/* Define to 1 if you have the `_asinl' function. */
-/* #undef _GLIBCXX_HAVE__ASINL */
-
-/* Define to 1 if you have the `_atan2f' function. */
-/* #undef _GLIBCXX_HAVE__ATAN2F */
-
-/* Define to 1 if you have the `_atan2l' function. */
-/* #undef _GLIBCXX_HAVE__ATAN2L */
-
-/* Define to 1 if you have the `_atanf' function. */
-/* #undef _GLIBCXX_HAVE__ATANF */
-
-/* Define to 1 if you have the `_atanl' function. */
-/* #undef _GLIBCXX_HAVE__ATANL */
-
-/* Define to 1 if you have the `_ceilf' function. */
-/* #undef _GLIBCXX_HAVE__CEILF */
-
-/* Define to 1 if you have the `_ceill' function. */
-/* #undef _GLIBCXX_HAVE__CEILL */
-
-/* Define to 1 if you have the `_cosf' function. */
-/* #undef _GLIBCXX_HAVE__COSF */
-
-/* Define to 1 if you have the `_coshf' function. */
-/* #undef _GLIBCXX_HAVE__COSHF */
-
-/* Define to 1 if you have the `_coshl' function. */
-/* #undef _GLIBCXX_HAVE__COSHL */
-
-/* Define to 1 if you have the `_cosl' function. */
-/* #undef _GLIBCXX_HAVE__COSL */
-
-/* Define to 1 if you have the `_expf' function. */
-/* #undef _GLIBCXX_HAVE__EXPF */
-
-/* Define to 1 if you have the `_expl' function. */
-/* #undef _GLIBCXX_HAVE__EXPL */
-
-/* Define to 1 if you have the `_fabsf' function. */
-/* #undef _GLIBCXX_HAVE__FABSF */
-
-/* Define to 1 if you have the `_fabsl' function. */
-/* #undef _GLIBCXX_HAVE__FABSL */
-
-/* Define to 1 if you have the `_finite' function. */
-/* #undef _GLIBCXX_HAVE__FINITE */
-
-/* Define to 1 if you have the `_finitef' function. */
-/* #undef _GLIBCXX_HAVE__FINITEF */
-
-/* Define to 1 if you have the `_finitel' function. */
-/* #undef _GLIBCXX_HAVE__FINITEL */
-
-/* Define to 1 if you have the `_floorf' function. */
-/* #undef _GLIBCXX_HAVE__FLOORF */
-
-/* Define to 1 if you have the `_floorl' function. */
-/* #undef _GLIBCXX_HAVE__FLOORL */
-
-/* Define to 1 if you have the `_fmodf' function. */
-/* #undef _GLIBCXX_HAVE__FMODF */
-
-/* Define to 1 if you have the `_fmodl' function. */
-/* #undef _GLIBCXX_HAVE__FMODL */
-
-/* Define to 1 if you have the `_fpclass' function. */
-/* #undef _GLIBCXX_HAVE__FPCLASS */
-
-/* Define to 1 if you have the `_frexpf' function. */
-/* #undef _GLIBCXX_HAVE__FREXPF */
-
-/* Define to 1 if you have the `_frexpl' function. */
-/* #undef _GLIBCXX_HAVE__FREXPL */
-
-/* Define to 1 if you have the `_hypot' function. */
-/* #undef _GLIBCXX_HAVE__HYPOT */
-
-/* Define to 1 if you have the `_hypotf' function. */
-/* #undef _GLIBCXX_HAVE__HYPOTF */
-
-/* Define to 1 if you have the `_hypotl' function. */
-/* #undef _GLIBCXX_HAVE__HYPOTL */
-
-/* Define to 1 if you have the `_isinf' function. */
-/* #undef _GLIBCXX_HAVE__ISINF */
-
-/* Define to 1 if you have the `_isinff' function. */
-/* #undef _GLIBCXX_HAVE__ISINFF */
-
-/* Define to 1 if you have the `_isinfl' function. */
-/* #undef _GLIBCXX_HAVE__ISINFL */
-
-/* Define to 1 if you have the `_isnan' function. */
-/* #undef _GLIBCXX_HAVE__ISNAN */
-
-/* Define to 1 if you have the `_isnanf' function. */
-/* #undef _GLIBCXX_HAVE__ISNANF */
-
-/* Define to 1 if you have the `_isnanl' function. */
-/* #undef _GLIBCXX_HAVE__ISNANL */
-
-/* Define to 1 if you have the `_ldexpf' function. */
-/* #undef _GLIBCXX_HAVE__LDEXPF */
-
-/* Define to 1 if you have the `_ldexpl' function. */
-/* #undef _GLIBCXX_HAVE__LDEXPL */
-
-/* Define to 1 if you have the `_log10f' function. */
-/* #undef _GLIBCXX_HAVE__LOG10F */
-
-/* Define to 1 if you have the `_log10l' function. */
-/* #undef _GLIBCXX_HAVE__LOG10L */
-
-/* Define to 1 if you have the `_logf' function. */
-/* #undef _GLIBCXX_HAVE__LOGF */
-
-/* Define to 1 if you have the `_logl' function. */
-/* #undef _GLIBCXX_HAVE__LOGL */
-
-/* Define to 1 if you have the `_modf' function. */
-/* #undef _GLIBCXX_HAVE__MODF */
-
-/* Define to 1 if you have the `_modff' function. */
-/* #undef _GLIBCXX_HAVE__MODFF */
-
-/* Define to 1 if you have the `_modfl' function. */
-/* #undef _GLIBCXX_HAVE__MODFL */
-
-/* Define to 1 if you have the `_powf' function. */
-/* #undef _GLIBCXX_HAVE__POWF */
-
-/* Define to 1 if you have the `_powl' function. */
-/* #undef _GLIBCXX_HAVE__POWL */
-
-/* Define to 1 if you have the `_qfpclass' function. */
-/* #undef _GLIBCXX_HAVE__QFPCLASS */
-
-/* Define to 1 if you have the `_sincos' function. */
-/* #undef _GLIBCXX_HAVE__SINCOS */
-
-/* Define to 1 if you have the `_sincosf' function. */
-/* #undef _GLIBCXX_HAVE__SINCOSF */
-
-/* Define to 1 if you have the `_sincosl' function. */
-/* #undef _GLIBCXX_HAVE__SINCOSL */
-
-/* Define to 1 if you have the `_sinf' function. */
-/* #undef _GLIBCXX_HAVE__SINF */
-
-/* Define to 1 if you have the `_sinhf' function. */
-/* #undef _GLIBCXX_HAVE__SINHF */
-
-/* Define to 1 if you have the `_sinhl' function. */
-/* #undef _GLIBCXX_HAVE__SINHL */
-
-/* Define to 1 if you have the `_sinl' function. */
-/* #undef _GLIBCXX_HAVE__SINL */
-
-/* Define to 1 if you have the `_sqrtf' function. */
-/* #undef _GLIBCXX_HAVE__SQRTF */
-
-/* Define to 1 if you have the `_sqrtl' function. */
-/* #undef _GLIBCXX_HAVE__SQRTL */
-
-/* Define to 1 if you have the `_tanf' function. */
-/* #undef _GLIBCXX_HAVE__TANF */
-
-/* Define to 1 if you have the `_tanhf' function. */
-/* #undef _GLIBCXX_HAVE__TANHF */
-
-/* Define to 1 if you have the `_tanhl' function. */
-/* #undef _GLIBCXX_HAVE__TANHL */
-
-/* Define to 1 if you have the `_tanl' function. */
-/* #undef _GLIBCXX_HAVE__TANL */
-
-/* Define as const if the declaration of iconv() needs const. */
-/* #undef _GLIBCXX_ICONV_CONST */
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
-#define LT_OBJDIR ".libs/"
-
-/* Name of package */
-/* #undef _GLIBCXX_PACKAGE */
-
-/* Define to the address where bug reports for this package should be sent. */
-#define _GLIBCXX_PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define _GLIBCXX_PACKAGE_NAME "package-unused"
-
-/* Define to the full name and version of this package. */
-#define _GLIBCXX_PACKAGE_STRING "package-unused version-unused"
-
-/* Define to the one symbol short name of this package. */
-#define _GLIBCXX_PACKAGE_TARNAME "libstdc++"
-
-/* Define to the home page for this package. */
-#define _GLIBCXX_PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define _GLIBCXX_PACKAGE__GLIBCXX_VERSION "version-unused"
-
-/* The size of `char', as computed by sizeof. */
-/* #undef SIZEOF_CHAR */
-
-/* The size of `int', as computed by sizeof. */
-/* #undef SIZEOF_INT */
-
-/* The size of `long', as computed by sizeof. */
-/* #undef SIZEOF_LONG */
-
-/* The size of `short', as computed by sizeof. */
-/* #undef SIZEOF_SHORT */
-
-/* The size of `void *', as computed by sizeof. */
-/* #undef SIZEOF_VOID_P */
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Version number of package */
-/* #undef _GLIBCXX_VERSION */
-
-/* Define if builtin atomic operations for bool are supported on this host. */
-#define _GLIBCXX_ATOMIC_BUILTINS_1 1
-
-/* Define if builtin atomic operations for short are supported on this host.
-   */
-#define _GLIBCXX_ATOMIC_BUILTINS_2 1
-
-/* Define if builtin atomic operations for int are supported on this host. */
-#define _GLIBCXX_ATOMIC_BUILTINS_4 1
-
-/* Define if builtin atomic operations for long long are supported on this
-   host. */
-/* #undef _GLIBCXX_ATOMIC_BUILTINS_8 */
-
-/* Define to use concept checking code from the boost libraries. */
-/* #undef _GLIBCXX_CONCEPT_CHECKS */
-
-/* Define if a fully dynamic basic_string is wanted. */
-/* #undef _GLIBCXX_FULLY_DYNAMIC_STRING */
-
-/* Define if gthreads library is available. */
-/* #undef _GLIBCXX_HAS_GTHREADS */
-
-/* Define to 1 if a full hosted library is built, or 0 if freestanding. */
-#define _GLIBCXX_HOSTED 0
-
-/* Define if compatibility should be provided for -mlong-double-64. */
-
-/* Define if ptrdiff_t is int. */
-#define _GLIBCXX_PTRDIFF_T_IS_INT 1
-
-/* Define if using setrlimit to set resource limits during "make check" */
-/* #undef _GLIBCXX_RES_LIMITS */
-
-/* Define if size_t is unsigned int. */
-#define _GLIBCXX_SIZE_T_IS_UINT 1
-
-/* Define if the compiler is configured for setjmp/longjmp exceptions. */
-/* #undef _GLIBCXX_SJLJ_EXCEPTIONS */
-
-/* Define to the value of the EOF integer constant. */
-#define _GLIBCXX_STDIO_EOF -1
-
-/* Define to the value of the SEEK_CUR integer constant. */
-#define _GLIBCXX_STDIO_SEEK_CUR 1
-
-/* Define to the value of the SEEK_END integer constant. */
-#define _GLIBCXX_STDIO_SEEK_END 2
-
-/* Define to use symbol versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER */
-
-/* Define to use darwin versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_DARWIN */
-
-/* Define to use GNU versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_GNU */
-
-/* Define to use GNU namespace versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_GNU_NAMESPACE */
-
-/* Define to use Sun versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_SUN */
-
-/* Define if C99 functions or macros from <wchar.h>, <math.h>, <complex.h>,
-   <stdio.h>, and <stdlib.h> can be used or exposed. */
-/* #undef _GLIBCXX_USE_C99 */
-
-/* Define if C99 functions in <complex.h> should be used in <complex>. Using
-   compiler builtins for these functions requires corresponding C99 library
-   functions to be present. */
-/* #undef _GLIBCXX_USE_C99_COMPLEX */
-
-/* Define if C99 functions in <complex.h> should be used in <tr1/complex>.
-   Using compiler builtins for these functions requires corresponding C99
-   library functions to be present. */
-/* #undef _GLIBCXX_USE_C99_COMPLEX_TR1 */
-
-/* Define if C99 functions in <ctype.h> should be imported in <tr1/cctype> in
-   namespace std::tr1. */
-#define _GLIBCXX_USE_C99_CTYPE_TR1 1
-
-/* Define if C99 functions in <fenv.h> should be imported in <tr1/cfenv> in
-   namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_FENV_TR1 */
-
-/* Define if C99 functions in <inttypes.h> should be imported in
-   <tr1/cinttypes> in namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_INTTYPES_TR1 */
-
-/* Define if wchar_t C99 functions in <inttypes.h> should be imported in
-   <tr1/cinttypes> in namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1 */
-
-/* Define if C99 functions or macros in <math.h> should be imported in <cmath>
-   in namespace std. */
-/* #undef _GLIBCXX_USE_C99_MATH */
-
-/* Define if C99 functions or macros in <math.h> should be imported in
-   <tr1/cmath> in namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_MATH_TR1 */
-
-/* Define if C99 types in <stdint.h> should be imported in <tr1/cstdint> in
-   namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_STDINT_TR1 */
-
-/* Defined if clock_gettime has monotonic clock support. */
-/* #undef _GLIBCXX_USE_CLOCK_MONOTONIC */
-
-/* Defined if clock_gettime has realtime clock support. */
-/* #undef _GLIBCXX_USE_CLOCK_REALTIME */
-
-/* Define if ISO/IEC TR 24733 decimal floating point types are supported on
-   this host. */
-/* #undef _GLIBCXX_USE_DECIMAL_FLOAT */
-
-/* Defined if gettimeofday is available. */
-#define _GLIBCXX_USE_GETTIMEOFDAY 1
-
-/* Define if LFS support is available. */
-/* #undef _GLIBCXX_USE_LFS */
-
-/* Define if code specialized for long long should be used. */
-#define _GLIBCXX_USE_LONG_LONG 1
-
-/* Defined if nanosleep is available. */
-/* #undef _GLIBCXX_USE_NANOSLEEP */
-
-/* Define if NLS translations are to be used. */
-/* #undef _GLIBCXX_USE_NLS */
-
-/* Define if /dev/random and /dev/urandom are available for the random_device
-   of TR1 (Chapter 5.1). */
-#define _GLIBCXX_USE_RANDOM_TR1 1
-
-/* Defined if sched_yield is available. */
-/* #undef _GLIBCXX_USE_SCHED_YIELD */
-
-/* Define if code specialized for wchar_t should be used. */
-/* #undef _GLIBCXX_USE_WCHAR_T */
-
-#if defined (_GLIBCXX_HAVE__ACOSF) && ! defined (_GLIBCXX_HAVE_ACOSF)
-# define _GLIBCXX_HAVE_ACOSF 1
-# define acosf _acosf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ACOSL) && ! defined (_GLIBCXX_HAVE_ACOSL)
-# define _GLIBCXX_HAVE_ACOSL 1
-# define acosl _acosl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ASINF) && ! defined (_GLIBCXX_HAVE_ASINF)
-# define _GLIBCXX_HAVE_ASINF 1
-# define asinf _asinf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ASINL) && ! defined (_GLIBCXX_HAVE_ASINL)
-# define _GLIBCXX_HAVE_ASINL 1
-# define asinl _asinl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATAN2F) && ! defined (_GLIBCXX_HAVE_ATAN2F)
-# define _GLIBCXX_HAVE_ATAN2F 1
-# define atan2f _atan2f
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATAN2L) && ! defined (_GLIBCXX_HAVE_ATAN2L)
-# define _GLIBCXX_HAVE_ATAN2L 1
-# define atan2l _atan2l
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATANF) && ! defined (_GLIBCXX_HAVE_ATANF)
-# define _GLIBCXX_HAVE_ATANF 1
-# define atanf _atanf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATANL) && ! defined (_GLIBCXX_HAVE_ATANL)
-# define _GLIBCXX_HAVE_ATANL 1
-# define atanl _atanl
-#endif
-
-#if defined (_GLIBCXX_HAVE__CEILF) && ! defined (_GLIBCXX_HAVE_CEILF)
-# define _GLIBCXX_HAVE_CEILF 1
-# define ceilf _ceilf
-#endif
-
-#if defined (_GLIBCXX_HAVE__CEILL) && ! defined (_GLIBCXX_HAVE_CEILL)
-# define _GLIBCXX_HAVE_CEILL 1
-# define ceill _ceill
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSF) && ! defined (_GLIBCXX_HAVE_COSF)
-# define _GLIBCXX_HAVE_COSF 1
-# define cosf _cosf
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSHF) && ! defined (_GLIBCXX_HAVE_COSHF)
-# define _GLIBCXX_HAVE_COSHF 1
-# define coshf _coshf
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSHL) && ! defined (_GLIBCXX_HAVE_COSHL)
-# define _GLIBCXX_HAVE_COSHL 1
-# define coshl _coshl
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSL) && ! defined (_GLIBCXX_HAVE_COSL)
-# define _GLIBCXX_HAVE_COSL 1
-# define cosl _cosl
-#endif
-
-#if defined (_GLIBCXX_HAVE__EXPF) && ! defined (_GLIBCXX_HAVE_EXPF)
-# define _GLIBCXX_HAVE_EXPF 1
-# define expf _expf
-#endif
-
-#if defined (_GLIBCXX_HAVE__EXPL) && ! defined (_GLIBCXX_HAVE_EXPL)
-# define _GLIBCXX_HAVE_EXPL 1
-# define expl _expl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FABSF) && ! defined (_GLIBCXX_HAVE_FABSF)
-# define _GLIBCXX_HAVE_FABSF 1
-# define fabsf _fabsf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FABSL) && ! defined (_GLIBCXX_HAVE_FABSL)
-# define _GLIBCXX_HAVE_FABSL 1
-# define fabsl _fabsl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FINITE) && ! defined (_GLIBCXX_HAVE_FINITE)
-# define _GLIBCXX_HAVE_FINITE 1
-# define finite _finite
-#endif
-
-#if defined (_GLIBCXX_HAVE__FINITEF) && ! defined (_GLIBCXX_HAVE_FINITEF)
-# define _GLIBCXX_HAVE_FINITEF 1
-# define finitef _finitef
-#endif
-
-#if defined (_GLIBCXX_HAVE__FINITEL) && ! defined (_GLIBCXX_HAVE_FINITEL)
-# define _GLIBCXX_HAVE_FINITEL 1
-# define finitel _finitel
-#endif
-
-#if defined (_GLIBCXX_HAVE__FLOORF) && ! defined (_GLIBCXX_HAVE_FLOORF)
-# define _GLIBCXX_HAVE_FLOORF 1
-# define floorf _floorf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FLOORL) && ! defined (_GLIBCXX_HAVE_FLOORL)
-# define _GLIBCXX_HAVE_FLOORL 1
-# define floorl _floorl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FMODF) && ! defined (_GLIBCXX_HAVE_FMODF)
-# define _GLIBCXX_HAVE_FMODF 1
-# define fmodf _fmodf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FMODL) && ! defined (_GLIBCXX_HAVE_FMODL)
-# define _GLIBCXX_HAVE_FMODL 1
-# define fmodl _fmodl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FPCLASS) && ! defined (_GLIBCXX_HAVE_FPCLASS)
-# define _GLIBCXX_HAVE_FPCLASS 1
-# define fpclass _fpclass
-#endif
-
-#if defined (_GLIBCXX_HAVE__FREXPF) && ! defined (_GLIBCXX_HAVE_FREXPF)
-# define _GLIBCXX_HAVE_FREXPF 1
-# define frexpf _frexpf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FREXPL) && ! defined (_GLIBCXX_HAVE_FREXPL)
-# define _GLIBCXX_HAVE_FREXPL 1
-# define frexpl _frexpl
-#endif
-
-#if defined (_GLIBCXX_HAVE__HYPOT) && ! defined (_GLIBCXX_HAVE_HYPOT)
-# define _GLIBCXX_HAVE_HYPOT 1
-# define hypot _hypot
-#endif
-
-#if defined (_GLIBCXX_HAVE__HYPOTF) && ! defined (_GLIBCXX_HAVE_HYPOTF)
-# define _GLIBCXX_HAVE_HYPOTF 1
-# define hypotf _hypotf
-#endif
-
-#if defined (_GLIBCXX_HAVE__HYPOTL) && ! defined (_GLIBCXX_HAVE_HYPOTL)
-# define _GLIBCXX_HAVE_HYPOTL 1
-# define hypotl _hypotl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISINF) && ! defined (_GLIBCXX_HAVE_ISINF)
-# define _GLIBCXX_HAVE_ISINF 1
-# define isinf _isinf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISINFF) && ! defined (_GLIBCXX_HAVE_ISINFF)
-# define _GLIBCXX_HAVE_ISINFF 1
-# define isinff _isinff
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISINFL) && ! defined (_GLIBCXX_HAVE_ISINFL)
-# define _GLIBCXX_HAVE_ISINFL 1
-# define isinfl _isinfl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISNAN) && ! defined (_GLIBCXX_HAVE_ISNAN)
-# define _GLIBCXX_HAVE_ISNAN 1
-# define isnan _isnan
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISNANF) && ! defined (_GLIBCXX_HAVE_ISNANF)
-# define _GLIBCXX_HAVE_ISNANF 1
-# define isnanf _isnanf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISNANL) && ! defined (_GLIBCXX_HAVE_ISNANL)
-# define _GLIBCXX_HAVE_ISNANL 1
-# define isnanl _isnanl
-#endif
-
-#if defined (_GLIBCXX_HAVE__LDEXPF) && ! defined (_GLIBCXX_HAVE_LDEXPF)
-# define _GLIBCXX_HAVE_LDEXPF 1
-# define ldexpf _ldexpf
-#endif
-
-#if defined (_GLIBCXX_HAVE__LDEXPL) && ! defined (_GLIBCXX_HAVE_LDEXPL)
-# define _GLIBCXX_HAVE_LDEXPL 1
-# define ldexpl _ldexpl
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOG10F) && ! defined (_GLIBCXX_HAVE_LOG10F)
-# define _GLIBCXX_HAVE_LOG10F 1
-# define log10f _log10f
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOG10L) && ! defined (_GLIBCXX_HAVE_LOG10L)
-# define _GLIBCXX_HAVE_LOG10L 1
-# define log10l _log10l
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOGF) && ! defined (_GLIBCXX_HAVE_LOGF)
-# define _GLIBCXX_HAVE_LOGF 1
-# define logf _logf
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOGL) && ! defined (_GLIBCXX_HAVE_LOGL)
-# define _GLIBCXX_HAVE_LOGL 1
-# define logl _logl
-#endif
-
-#if defined (_GLIBCXX_HAVE__MODF) && ! defined (_GLIBCXX_HAVE_MODF)
-# define _GLIBCXX_HAVE_MODF 1
-# define modf _modf
-#endif
-
-#if defined (_GLIBCXX_HAVE__MODFF) && ! defined (_GLIBCXX_HAVE_MODFF)
-# define _GLIBCXX_HAVE_MODFF 1
-# define modff _modff
-#endif
-
-#if defined (_GLIBCXX_HAVE__MODFL) && ! defined (_GLIBCXX_HAVE_MODFL)
-# define _GLIBCXX_HAVE_MODFL 1
-# define modfl _modfl
-#endif
-
-#if defined (_GLIBCXX_HAVE__POWF) && ! defined (_GLIBCXX_HAVE_POWF)
-# define _GLIBCXX_HAVE_POWF 1
-# define powf _powf
-#endif
-
-#if defined (_GLIBCXX_HAVE__POWL) && ! defined (_GLIBCXX_HAVE_POWL)
-# define _GLIBCXX_HAVE_POWL 1
-# define powl _powl
-#endif
-
-#if defined (_GLIBCXX_HAVE__QFPCLASS) && ! defined (_GLIBCXX_HAVE_QFPCLASS)
-# define _GLIBCXX_HAVE_QFPCLASS 1
-# define qfpclass _qfpclass
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINCOS) && ! defined (_GLIBCXX_HAVE_SINCOS)
-# define _GLIBCXX_HAVE_SINCOS 1
-# define sincos _sincos
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINCOSF) && ! defined (_GLIBCXX_HAVE_SINCOSF)
-# define _GLIBCXX_HAVE_SINCOSF 1
-# define sincosf _sincosf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINCOSL) && ! defined (_GLIBCXX_HAVE_SINCOSL)
-# define _GLIBCXX_HAVE_SINCOSL 1
-# define sincosl _sincosl
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINF) && ! defined (_GLIBCXX_HAVE_SINF)
-# define _GLIBCXX_HAVE_SINF 1
-# define sinf _sinf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINHF) && ! defined (_GLIBCXX_HAVE_SINHF)
-# define _GLIBCXX_HAVE_SINHF 1
-# define sinhf _sinhf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINHL) && ! defined (_GLIBCXX_HAVE_SINHL)
-# define _GLIBCXX_HAVE_SINHL 1
-# define sinhl _sinhl
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINL) && ! defined (_GLIBCXX_HAVE_SINL)
-# define _GLIBCXX_HAVE_SINL 1
-# define sinl _sinl
-#endif
-
-#if defined (_GLIBCXX_HAVE__SQRTF) && ! defined (_GLIBCXX_HAVE_SQRTF)
-# define _GLIBCXX_HAVE_SQRTF 1
-# define sqrtf _sqrtf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SQRTL) && ! defined (_GLIBCXX_HAVE_SQRTL)
-# define _GLIBCXX_HAVE_SQRTL 1
-# define sqrtl _sqrtl
-#endif
-
-#if defined (_GLIBCXX_HAVE__STRTOF) && ! defined (_GLIBCXX_HAVE_STRTOF)
-# define _GLIBCXX_HAVE_STRTOF 1
-# define strtof _strtof
-#endif
-
-#if defined (_GLIBCXX_HAVE__STRTOLD) && ! defined (_GLIBCXX_HAVE_STRTOLD)
-# define _GLIBCXX_HAVE_STRTOLD 1
-# define strtold _strtold
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANF) && ! defined (_GLIBCXX_HAVE_TANF)
-# define _GLIBCXX_HAVE_TANF 1
-# define tanf _tanf
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANHF) && ! defined (_GLIBCXX_HAVE_TANHF)
-# define _GLIBCXX_HAVE_TANHF 1
-# define tanhf _tanhf
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANHL) && ! defined (_GLIBCXX_HAVE_TANHL)
-# define _GLIBCXX_HAVE_TANHL 1
-# define tanhl _tanhl
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANL) && ! defined (_GLIBCXX_HAVE_TANL)
-# define _GLIBCXX_HAVE_TANL 1
-# define tanl _tanl
-#endif
-
-#endif // _GLIBCXX_CXX_CONFIG_H
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/thumb/bits/cpu_defines.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/thumb/bits/cpu_defines.h
deleted file mode 100644
index c1b9863..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/thumb/bits/cpu_defines.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Specific definitions for generic platforms  -*- C++ -*-
-
-// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/cpu_defines.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{iosfwd}
- */
-
-#ifndef _GLIBCXX_CPU_DEFINES
-#define _GLIBCXX_CPU_DEFINES 1
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/thumb/bits/cxxabi_tweaks.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/thumb/bits/cxxabi_tweaks.h
deleted file mode 100644
index 2ac349d..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/thumb/bits/cxxabi_tweaks.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Control various target specific ABI tweaks.  ARM version.
-
-// Copyright (C) 2004, 2006, 2008, 2009, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/cxxabi_tweaks.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{cxxabi.h}
- */
-
-#ifndef _CXXABI_TWEAKS_H
-#define _CXXABI_TWEAKS_H 1
-
-#ifdef __cplusplus
-namespace __cxxabiv1
-{
-  extern "C" 
-  {
-#endif
-
-#ifdef __ARM_EABI__
-  // The ARM EABI uses the least significant bit of a 32-bit
-  // guard variable.  */
-#define _GLIBCXX_GUARD_TEST(x) ((*(x) & 1) != 0)
-#define _GLIBCXX_GUARD_SET(x) *(x) = 1
-#define _GLIBCXX_GUARD_BIT 1
-#define _GLIBCXX_GUARD_PENDING_BIT __guard_test_bit (1, 1)
-#define _GLIBCXX_GUARD_WAITING_BIT __guard_test_bit (2, 1)
-  typedef int __guard;
-
-  // We also want the element size in array cookies.
-#define _GLIBCXX_ELTSIZE_IN_COOKIE 1
-  
-  // __cxa_vec_ctor should return a pointer to the array.
-  typedef void * __cxa_vec_ctor_return_type;
-#define _GLIBCXX_CXA_VEC_CTOR_RETURN(x) return x
-  // Constructors and destructors return the "this" pointer.
-  typedef void * __cxa_cdtor_return_type;
-
-#else // __ARM_EABI__
-
-  // The generic ABI uses the first byte of a 64-bit guard variable.
-#define _GLIBCXX_GUARD_TEST(x) (*(char *) (x) != 0)
-#define _GLIBCXX_GUARD_SET(x) *(char *) (x) = 1
-#define _GLIBCXX_GUARD_BIT __guard_test_bit (0, 1)
-#define _GLIBCXX_GUARD_PENDING_BIT __guard_test_bit (1, 1)
-#define _GLIBCXX_GUARD_WAITING_BIT __guard_test_bit (2, 1)
-  __extension__ typedef int __guard __attribute__((mode (__DI__)));
-
-  // __cxa_vec_ctor has void return type.
-  typedef void __cxa_vec_ctor_return_type;
-#define _GLIBCXX_CXA_VEC_CTOR_RETURN(x) return
-  // Constructors and destructors do not return a value.
-  typedef void __cxa_cdtor_return_type;
-
-#endif //!__ARM_EABI__
-
-#ifdef __cplusplus
-  }
-} // namespace __cxxabiv1
-#endif
-
-#endif 
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/thumb/bits/os_defines.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/thumb/bits/os_defines.h
deleted file mode 100644
index 0c8f77d..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/armv7-a/thumb/bits/os_defines.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Specific definitions for Bionic  -*- C++ -*-
-
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/os_defines.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{iosfwd}
- */
-
-#ifndef _GLIBCXX_OS_DEFINES
-#define _GLIBCXX_OS_DEFINES 1
-
-// System-specific #define, typedefs, corrections, etc, go here.  This
-// file will come before all others.
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/bits/c++config.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/bits/c++config.h
deleted file mode 100644
index 309d185..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/bits/c++config.h
+++ /dev/null
@@ -1,1568 +0,0 @@
-// Predefined symbols and macros -*- C++ -*-
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/c++config.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{iosfwd}
- */
-
-#ifndef _GLIBCXX_CXX_CONFIG_H
-#define _GLIBCXX_CXX_CONFIG_H 1
-
-// The current version of the C++ library in compressed ISO date format.
-#define __GLIBCXX__ 20110718
-
-// Macros for various attributes.
-//   _GLIBCXX_PURE
-//   _GLIBCXX_CONST
-//   _GLIBCXX_NORETURN
-//   _GLIBCXX_NOTHROW
-//   _GLIBCXX_VISIBILITY
-#ifndef _GLIBCXX_PURE
-# define _GLIBCXX_PURE __attribute__ ((__pure__))
-#endif
-
-#ifndef _GLIBCXX_CONST
-# define _GLIBCXX_CONST __attribute__ ((__const__))
-#endif
-
-#ifndef _GLIBCXX_NORETURN
-# define _GLIBCXX_NORETURN __attribute__ ((__noreturn__))
-#endif
-
-#ifndef _GLIBCXX_NOTHROW
-# ifdef __cplusplus
-#  define _GLIBCXX_NOTHROW throw()
-# else
-#  define _GLIBCXX_NOTHROW __attribute__((__nothrow__))
-# endif
-#endif
-
-// Macros for visibility attributes.
-//   _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
-//   _GLIBCXX_VISIBILITY
-# define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY 1
-
-#if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
-# define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))
-#else
-// If this is not supplied by the OS-specific or CPU-specific
-// headers included below, it will be defined to an empty default.
-# define _GLIBCXX_VISIBILITY(V) _GLIBCXX_PSEUDO_VISIBILITY(V)
-#endif
-
-// Macros for deprecated attributes.
-//   _GLIBCXX_USE_DEPRECATED
-//   _GLIBCXX_DEPRECATED
-#ifndef _GLIBCXX_USE_DEPRECATED
-# define _GLIBCXX_USE_DEPRECATED 1
-#endif
-
-#if defined(__DEPRECATED) && defined(__GXX_EXPERIMENTAL_CXX0X__)
-# define _GLIBCXX_DEPRECATED __attribute__ ((__deprecated__))
-#else
-# define _GLIBCXX_DEPRECATED
-#endif
-
-#if __cplusplus
-
-// Macro for constexpr, to support in mixed 03/0x mode.
-#ifndef _GLIBCXX_CONSTEXPR
-# ifdef __GXX_EXPERIMENTAL_CXX0X__
-#  define _GLIBCXX_CONSTEXPR constexpr
-#  define _GLIBCXX_USE_CONSTEXPR constexpr
-# else
-#  define _GLIBCXX_CONSTEXPR
-#  define _GLIBCXX_USE_CONSTEXPR const
-# endif
-#endif
-
-// Macro for extern template, ie controling template linkage via use
-// of extern keyword on template declaration. As documented in the g++
-// manual, it inhibits all implicit instantiations and is used
-// throughout the library to avoid multiple weak definitions for
-// required types that are already explicitly instantiated in the
-// library binary. This substantially reduces the binary size of
-// resulting executables.
-// Special case: _GLIBCXX_EXTERN_TEMPLATE == -1 disallows extern
-// templates only in basic_string, thus activating its debug-mode
-// checks even at -O0.
-# define _GLIBCXX_EXTERN_TEMPLATE 1
-
-/*
-  Outline of libstdc++ namespaces.
-
-  namespace std
-  {
-    namespace __debug { }
-    namespace __parallel { }
-    namespace __profile { }
-    namespace __cxx1998 { }
-
-    namespace __detail { }
-
-    namespace rel_ops { }
-
-    namespace tr1
-    {
-      namespace placeholders { }
-      namespace regex_constants { }
-      namespace __detail { }
-    }
-
-    namespace decimal { }
-
-    namespace chrono { }
-    namespace placeholders { }
-    namespace regex_constants { }
-    namespace this_thread { }
-  }
-
-  namespace abi { }
-
-  namespace __gnu_cxx
-  {
-    namespace __detail { }
-  }
-
-  For full details see:
-  http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html
-*/
-namespace std
-{
-  typedef __SIZE_TYPE__ 	size_t;
-  typedef __PTRDIFF_TYPE__	ptrdiff_t;
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-  typedef decltype(nullptr)	nullptr_t;
-#endif
-}
-
-
-// Defined if inline namespaces are used for versioning.
-# define _GLIBCXX_INLINE_VERSION 0
-
-// Inline namespace for symbol versioning.
-#if _GLIBCXX_INLINE_VERSION
-namespace std
-{
-  inline namespace _6 { }
-
-  namespace rel_ops { inline namespace _6 { } }
-
-  namespace tr1
-  {
-    inline namespace _6 { }
-    namespace placeholders { inline namespace _6 { } }
-    namespace regex_constants { inline namespace _6 { } }
-    namespace __detail { inline namespace _6 { } }
-  }
-
-  namespace decimal { inline namespace _6 { } }
-
-  namespace chrono { inline namespace _6 { } }
-  namespace placeholders { inline namespace _6 { } }
-  namespace regex_constants { inline namespace _6 { } }
-  namespace this_thread { inline namespace _6 { } }
-
-  namespace __detail { inline namespace _6 { } }
-  namespace __regex { inline namespace _6 { } }
-}
-
-namespace __gnu_cxx
-{
-  inline namespace _6 { }
-  namespace __detail { inline namespace _6 { } }
-}
-# define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace _6 {
-# define _GLIBCXX_END_NAMESPACE_VERSION }
-#else
-# define _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_VERSION
-#endif
-
-
-// Inline namespaces for special modes: debug, parallel, profile.
-#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PARALLEL) \
-    || defined(_GLIBCXX_PROFILE)
-namespace std
-{
-  // Non-inline namespace for components replaced by alternates in active mode.
-  namespace __cxx1998
-  {
-#if _GLIBCXX_INLINE_VERSION
- inline namespace _6 { }
-#endif
-  }
-
-  // Inline namespace for debug mode.
-# ifdef _GLIBCXX_DEBUG
-  inline namespace __debug { }
-# endif
-
-  // Inline namespaces for parallel mode.
-# ifdef _GLIBCXX_PARALLEL
-  inline namespace __parallel { }
-# endif
-
-  // Inline namespaces for profile mode
-# ifdef _GLIBCXX_PROFILE
-  inline namespace __profile { }
-# endif
-}
-
-// Check for invalid usage and unsupported mixed-mode use.
-# if defined(_GLIBCXX_DEBUG) && defined(_GLIBCXX_PARALLEL)
-#  error illegal use of multiple inlined namespaces
-# endif
-# if defined(_GLIBCXX_PROFILE) && defined(_GLIBCXX_DEBUG)
-#  error illegal use of multiple inlined namespaces
-# endif
-# if defined(_GLIBCXX_PROFILE) && defined(_GLIBCXX_PARALLEL)
-#  error illegal use of multiple inlined namespaces
-# endif
-
-// Check for invalid use due to lack for weak symbols.
-# if __NO_INLINE__ && !__GXX_WEAK__
-#  warning currently using inlined namespace mode which may fail \
-   without inlining due to lack of weak symbols
-# endif
-#endif
-
-// Macros for namespace scope. Either namespace std:: or the name
-// of some nested namespace within it corresponding to the active mode.
-// _GLIBCXX_STD_A
-// _GLIBCXX_STD_C
-//
-// Macros for opening/closing conditional namespaces.
-// _GLIBCXX_BEGIN_NAMESPACE_ALGO
-// _GLIBCXX_END_NAMESPACE_ALGO
-// _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
-// _GLIBCXX_END_NAMESPACE_CONTAINER
-#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PROFILE)
-# define _GLIBCXX_STD_C __cxx1998
-# define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER \
-	 namespace _GLIBCXX_STD_C { _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_CONTAINER \
-	 } _GLIBCXX_END_NAMESPACE_VERSION
-# undef _GLIBCXX_EXTERN_TEMPLATE
-#  define _GLIBCXX_EXTERN_TEMPLATE 1 -1
-#endif
-
-#ifdef _GLIBCXX_PARALLEL
-# define _GLIBCXX_STD_A __cxx1998
-# define _GLIBCXX_BEGIN_NAMESPACE_ALGO \
-	 namespace _GLIBCXX_STD_A { _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_ALGO \
-	 } _GLIBCXX_END_NAMESPACE_VERSION
-#endif
-
-#ifndef _GLIBCXX_STD_A
-# define _GLIBCXX_STD_A std
-#endif
-
-#ifndef _GLIBCXX_STD_C
-# define _GLIBCXX_STD_C std
-#endif
-
-#ifndef _GLIBCXX_BEGIN_NAMESPACE_ALGO
-# define _GLIBCXX_BEGIN_NAMESPACE_ALGO
-#endif
-
-#ifndef _GLIBCXX_END_NAMESPACE_ALGO
-# define _GLIBCXX_END_NAMESPACE_ALGO
-#endif
-
-#ifndef _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
-# define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
-#endif
-
-#ifndef _GLIBCXX_END_NAMESPACE_CONTAINER
-# define _GLIBCXX_END_NAMESPACE_CONTAINER
-#endif
-
-// GLIBCXX_ABI Deprecated
-// Define if compatibility should be provided for -mlong-double-64.
-#undef _GLIBCXX_LONG_DOUBLE_COMPAT
-
-// Inline namespace for long double 128 mode.
-#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
-namespace std
-{
-  inline namespace __gnu_cxx_ldbl128 { }
-}
-# define _GLIBCXX_NAMESPACE_LDBL __gnu_cxx_ldbl128::
-# define _GLIBCXX_BEGIN_NAMESPACE_LDBL namespace __gnu_cxx_ldbl128 {
-# define _GLIBCXX_END_NAMESPACE_LDBL }
-#else
-# define _GLIBCXX_NAMESPACE_LDBL
-# define _GLIBCXX_BEGIN_NAMESPACE_LDBL
-# define _GLIBCXX_END_NAMESPACE_LDBL
-#endif
-
-// Assert.
-#if !defined(_GLIBCXX_DEBUG) && !defined(_GLIBCXX_PARALLEL)
-# define __glibcxx_assert(_Condition)
-#else
-namespace std
-{
-  // Avoid the use of assert, because we're trying to keep the <cassert>
-  // include out of the mix.
-  inline void
-  __replacement_assert(const char* __file, int __line,
-		       const char* __function, const char* __condition)
-  {
-    __builtin_printf("%s:%d: %s: Assertion '%s' failed.\n", __file, __line,
-		     __function, __condition);
-    __builtin_abort();
-  }
-}
-#define __glibcxx_assert(_Condition)				   	 \
-  do 									 \
-  {							      		 \
-    if (! (_Condition))                                                  \
-      std::__replacement_assert(__FILE__, __LINE__, __PRETTY_FUNCTION__, \
-				#_Condition);				 \
-  } while (false)
-#endif
-
-// Macros for race detectors.
-// _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) and
-// _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) should be used to explain
-// atomic (lock-free) synchronization to race detectors:
-// the race detector will infer a happens-before arc from the former to the
-// latter when they share the same argument pointer.
-//
-// The most frequent use case for these macros (and the only case in the
-// current implementation of the library) is atomic reference counting:
-//   void _M_remove_reference()
-//   {
-//     _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&this->_M_refcount);
-//     if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount, -1) <= 0)
-//       {
-//         _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&this->_M_refcount);
-//         _M_destroy(__a);
-//       }
-//   }
-// The annotations in this example tell the race detector that all memory
-// accesses occurred when the refcount was positive do not race with
-// memory accesses which occurred after the refcount became zero.
-#ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE
-# define  _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A)
-#endif
-#ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER
-# define  _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A)
-#endif
-
-// Macros for C linkage: define extern "C" linkage only when using C++.
-# define _GLIBCXX_BEGIN_EXTERN_C extern "C" {
-# define _GLIBCXX_END_EXTERN_C }
-
-#else // !__cplusplus
-# define _GLIBCXX_BEGIN_EXTERN_C
-# define _GLIBCXX_END_EXTERN_C
-#endif
-
-
-// First includes.
-
-// Pick up any OS-specific definitions.
-#include <bits/os_defines.h>
-
-// Pick up any CPU-specific definitions.
-#include <bits/cpu_defines.h>
-
-// If platform uses neither visibility nor psuedo-visibility,
-// specify empty default for namespace annotation macros.
-#ifndef _GLIBCXX_PSEUDO_VISIBILITY
-# define _GLIBCXX_PSEUDO_VISIBILITY(V)
-#endif
-
-// Certain function definitions that are meant to be overridable from
-// user code are decorated with this macro.  For some targets, this
-// macro causes these definitions to be weak.
-#ifndef _GLIBCXX_WEAK_DEFINITION
-# define _GLIBCXX_WEAK_DEFINITION
-#endif
-
-
-// The remainder of the prewritten config is automatic; all the
-// user hooks are listed above.
-
-// Create a boolean flag to be used to determine if --fast-math is set.
-#ifdef __FAST_MATH__
-# define _GLIBCXX_FAST_MATH 1
-#else
-# define _GLIBCXX_FAST_MATH 0
-#endif
-
-// This marks string literals in header files to be extracted for eventual
-// translation.  It is primarily used for messages in thrown exceptions; see
-// src/functexcept.cc.  We use __N because the more traditional _N is used
-// for something else under certain OSes (see BADNAMES).
-#define __N(msgid)     (msgid)
-
-// For example, <windows.h> is known to #define min and max as macros...
-#undef min
-#undef max
-
-// End of prewritten config; the settings discovered at configure time follow.
-/* config.h.  Generated from config.h.in by configure.  */
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to 1 if you have the `acosf' function. */
-#define _GLIBCXX_HAVE_ACOSF 1
-
-/* Define to 1 if you have the `acosl' function. */
-/* #undef _GLIBCXX_HAVE_ACOSL */
-
-/* Define to 1 if you have the `asinf' function. */
-#define _GLIBCXX_HAVE_ASINF 1
-
-/* Define to 1 if you have the `asinl' function. */
-/* #undef _GLIBCXX_HAVE_ASINL */
-
-/* Define to 1 if the target assembler supports .symver directive. */
-#define _GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE 1
-
-/* Define to 1 if you have the `atan2f' function. */
-#define _GLIBCXX_HAVE_ATAN2F 1
-
-/* Define to 1 if you have the `atan2l' function. */
-/* #undef _GLIBCXX_HAVE_ATAN2L */
-
-/* Define to 1 if you have the `atanf' function. */
-#define _GLIBCXX_HAVE_ATANF 1
-
-/* Define to 1 if you have the `atanl' function. */
-/* #undef _GLIBCXX_HAVE_ATANL */
-
-/* Define to 1 if the target assembler supports thread-local storage. */
-/* #undef _GLIBCXX_HAVE_CC_TLS */
-
-/* Define to 1 if you have the `ceilf' function. */
-#define _GLIBCXX_HAVE_CEILF 1
-
-/* Define to 1 if you have the `ceill' function. */
-#define _GLIBCXX_HAVE_CEILL 1
-
-/* Define to 1 if you have the <complex.h> header file. */
-/* #undef _GLIBCXX_HAVE_COMPLEX_H */
-
-/* Define to 1 if you have the `cosf' function. */
-#define _GLIBCXX_HAVE_COSF 1
-
-/* Define to 1 if you have the `coshf' function. */
-#define _GLIBCXX_HAVE_COSHF 1
-
-/* Define to 1 if you have the `coshl' function. */
-/* #undef _GLIBCXX_HAVE_COSHL */
-
-/* Define to 1 if you have the `cosl' function. */
-/* #undef _GLIBCXX_HAVE_COSL */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define _GLIBCXX_HAVE_DLFCN_H 1
-
-/* Define if EBADMSG exists. */
-#define _GLIBCXX_HAVE_EBADMSG 1
-
-/* Define if ECANCELED exists. */
-#define _GLIBCXX_HAVE_ECANCELED 1
-
-/* Define if EIDRM exists. */
-#define _GLIBCXX_HAVE_EIDRM 1
-
-/* Define to 1 if you have the <endian.h> header file. */
-#define _GLIBCXX_HAVE_ENDIAN_H 1
-
-/* Define if ENODATA exists. */
-#define _GLIBCXX_HAVE_ENODATA 1
-
-/* Define if ENOLINK exists. */
-#define _GLIBCXX_HAVE_ENOLINK 1
-
-/* Define if ENOSR exists. */
-#define _GLIBCXX_HAVE_ENOSR 1
-
-/* Define if ENOSTR exists. */
-#define _GLIBCXX_HAVE_ENOSTR 1
-
-/* Define if ENOTRECOVERABLE exists. */
-#define _GLIBCXX_HAVE_ENOTRECOVERABLE 1
-
-/* Define if ENOTSUP exists. */
-#define _GLIBCXX_HAVE_ENOTSUP 1
-
-/* Define if EOVERFLOW exists. */
-#define _GLIBCXX_HAVE_EOVERFLOW 1
-
-/* Define if EOWNERDEAD exists. */
-#define _GLIBCXX_HAVE_EOWNERDEAD 1
-
-/* Define if EPROTO exists. */
-#define _GLIBCXX_HAVE_EPROTO 1
-
-/* Define if ETIME exists. */
-#define _GLIBCXX_HAVE_ETIME 1
-
-/* Define if ETXTBSY exists. */
-#define _GLIBCXX_HAVE_ETXTBSY 1
-
-/* Define to 1 if you have the <execinfo.h> header file. */
-/* #undef _GLIBCXX_HAVE_EXECINFO_H */
-
-/* Define to 1 if you have the `expf' function. */
-#define _GLIBCXX_HAVE_EXPF 1
-
-/* Define to 1 if you have the `expl' function. */
-/* #undef _GLIBCXX_HAVE_EXPL */
-
-/* Define to 1 if you have the `fabsf' function. */
-#define _GLIBCXX_HAVE_FABSF 1
-
-/* Define to 1 if you have the `fabsl' function. */
-#define _GLIBCXX_HAVE_FABSL 1
-
-/* Define to 1 if you have the <fenv.h> header file. */
-/* #undef _GLIBCXX_HAVE_FENV_H */
-
-/* Define to 1 if you have the `finite' function. */
-#define _GLIBCXX_HAVE_FINITE 1
-
-/* Define to 1 if you have the `finitef' function. */
-#define _GLIBCXX_HAVE_FINITEF 1
-
-/* Define to 1 if you have the `finitel' function. */
-/* #undef _GLIBCXX_HAVE_FINITEL */
-
-/* Define to 1 if you have the <float.h> header file. */
-#define _GLIBCXX_HAVE_FLOAT_H 1
-
-/* Define to 1 if you have the `floorf' function. */
-#define _GLIBCXX_HAVE_FLOORF 1
-
-/* Define to 1 if you have the `floorl' function. */
-#define _GLIBCXX_HAVE_FLOORL 1
-
-/* Define to 1 if you have the `fmodf' function. */
-#define _GLIBCXX_HAVE_FMODF 1
-
-/* Define to 1 if you have the `fmodl' function. */
-/* #undef _GLIBCXX_HAVE_FMODL */
-
-/* Define to 1 if you have the `fpclass' function. */
-/* #undef _GLIBCXX_HAVE_FPCLASS */
-
-/* Define to 1 if you have the <fp.h> header file. */
-/* #undef _GLIBCXX_HAVE_FP_H */
-
-/* Define to 1 if you have the `frexpf' function. */
-#define _GLIBCXX_HAVE_FREXPF 1
-
-/* Define to 1 if you have the `frexpl' function. */
-/* #undef _GLIBCXX_HAVE_FREXPL */
-
-/* Define if _Unwind_GetIPInfo is available. */
-#define _GLIBCXX_HAVE_GETIPINFO 1
-
-/* Define if gthr-default.h exists (meaning that threading support is
-   enabled). */
-#define _GLIBCXX_HAVE_GTHR_DEFAULT 1
-
-/* Define to 1 if you have the `hypot' function. */
-#define _GLIBCXX_HAVE_HYPOT 1
-
-/* Define to 1 if you have the `hypotf' function. */
-#define _GLIBCXX_HAVE_HYPOTF 1
-
-/* Define to 1 if you have the `hypotl' function. */
-/* #undef _GLIBCXX_HAVE_HYPOTL */
-
-/* Define if you have the iconv() function. */
-/* #undef _GLIBCXX_HAVE_ICONV */
-
-/* Define to 1 if you have the <ieeefp.h> header file. */
-/* #undef _GLIBCXX_HAVE_IEEEFP_H */
-
-/* Define if int64_t is available in <stdint.h>. */
-#define _GLIBCXX_HAVE_INT64_T 1
-
-/* Define if int64_t is a long. */
-/* #undef _GLIBCXX_HAVE_INT64_T_LONG */
-
-/* Define if int64_t is a long long. */
-#define _GLIBCXX_HAVE_INT64_T_LONG_LONG 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define _GLIBCXX_HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `isinf' function. */
-/* #undef _GLIBCXX_HAVE_ISINF */
-
-/* Define to 1 if you have the `isinff' function. */
-/* #undef _GLIBCXX_HAVE_ISINFF */
-
-/* Define to 1 if you have the `isinfl' function. */
-/* #undef _GLIBCXX_HAVE_ISINFL */
-
-/* Define to 1 if you have the `isnan' function. */
-#define _GLIBCXX_HAVE_ISNAN 1
-
-/* Define to 1 if you have the `isnanf' function. */
-#define _GLIBCXX_HAVE_ISNANF 1
-
-/* Define to 1 if you have the `isnanl' function. */
-/* #undef _GLIBCXX_HAVE_ISNANL */
-
-/* Defined if iswblank exists. */
-/* #undef _GLIBCXX_HAVE_ISWBLANK */
-
-/* Define if LC_MESSAGES is available in <locale.h>. */
-#define _GLIBCXX_HAVE_LC_MESSAGES 1
-
-/* Define to 1 if you have the `ldexpf' function. */
-#define _GLIBCXX_HAVE_LDEXPF 1
-
-/* Define to 1 if you have the `ldexpl' function. */
-#define _GLIBCXX_HAVE_LDEXPL 1
-
-/* Define to 1 if you have the <libintl.h> header file. */
-/* #undef _GLIBCXX_HAVE_LIBINTL_H */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_AS */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_DATA */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_FSIZE */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_RSS */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_VMEM */
-
-/* Define if futex syscall is available. */
-/* #undef _GLIBCXX_HAVE_LINUX_FUTEX */
-
-/* Define to 1 if you have the <locale.h> header file. */
-#define _GLIBCXX_HAVE_LOCALE_H 1
-
-/* Define to 1 if you have the `log10f' function. */
-#define _GLIBCXX_HAVE_LOG10F 1
-
-/* Define to 1 if you have the `log10l' function. */
-/* #undef _GLIBCXX_HAVE_LOG10L */
-
-/* Define to 1 if you have the `logf' function. */
-#define _GLIBCXX_HAVE_LOGF 1
-
-/* Define to 1 if you have the `logl' function. */
-/* #undef _GLIBCXX_HAVE_LOGL */
-
-/* Define to 1 if you have the <machine/endian.h> header file. */
-/* #undef _GLIBCXX_HAVE_MACHINE_ENDIAN_H */
-
-/* Define to 1 if you have the <machine/param.h> header file. */
-/* #undef _GLIBCXX_HAVE_MACHINE_PARAM_H */
-
-/* Define if mbstate_t exists in wchar.h. */
-#define _GLIBCXX_HAVE_MBSTATE_T 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define _GLIBCXX_HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `modf' function. */
-#define _GLIBCXX_HAVE_MODF 1
-
-/* Define to 1 if you have the `modff' function. */
-#define _GLIBCXX_HAVE_MODFF 1
-
-/* Define to 1 if you have the `modfl' function. */
-/* #undef _GLIBCXX_HAVE_MODFL */
-
-/* Define to 1 if you have the <nan.h> header file. */
-/* #undef _GLIBCXX_HAVE_NAN_H */
-
-/* Define if poll is available in <poll.h>. */
-#define _GLIBCXX_HAVE_POLL 1
-
-/* Define to 1 if you have the `powf' function. */
-#define _GLIBCXX_HAVE_POWF 1
-
-/* Define to 1 if you have the `powl' function. */
-/* #undef _GLIBCXX_HAVE_POWL */
-
-/* Define to 1 if you have the `qfpclass' function. */
-/* #undef _GLIBCXX_HAVE_QFPCLASS */
-
-/* Define to 1 if you have the `setenv' function. */
-/* #undef _GLIBCXX_HAVE_SETENV */
-
-/* Define to 1 if you have the `sincos' function. */
-#define _GLIBCXX_HAVE_SINCOS 1
-
-/* Define to 1 if you have the `sincosf' function. */
-#define _GLIBCXX_HAVE_SINCOSF 1
-
-/* Define to 1 if you have the `sincosl' function. */
-#define _GLIBCXX_HAVE_SINCOSL 1
-
-/* Define to 1 if you have the `sinf' function. */
-#define _GLIBCXX_HAVE_SINF 1
-
-/* Define to 1 if you have the `sinhf' function. */
-#define _GLIBCXX_HAVE_SINHF 1
-
-/* Define to 1 if you have the `sinhl' function. */
-/* #undef _GLIBCXX_HAVE_SINHL */
-
-/* Define to 1 if you have the `sinl' function. */
-/* #undef _GLIBCXX_HAVE_SINL */
-
-/* Define to 1 if you have the `sqrtf' function. */
-#define _GLIBCXX_HAVE_SQRTF 1
-
-/* Define to 1 if you have the `sqrtl' function. */
-/* #undef _GLIBCXX_HAVE_SQRTL */
-
-/* Define to 1 if you have the <stdbool.h> header file. */
-/* #undef _GLIBCXX_HAVE_STDBOOL_H */
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define _GLIBCXX_HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define _GLIBCXX_HAVE_STDLIB_H 1
-
-/* Define if strerror_l is available in <string.h>. */
-/* #undef _GLIBCXX_HAVE_STRERROR_L */
-
-/* Define if strerror_r is available in <string.h>. */
-#define _GLIBCXX_HAVE_STRERROR_R 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define _GLIBCXX_HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define _GLIBCXX_HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strtof' function. */
-/* #undef _GLIBCXX_HAVE_STRTOF */
-
-/* Define to 1 if you have the `strtold' function. */
-/* #undef _GLIBCXX_HAVE_STRTOLD */
-
-/* Define if strxfrm_l is available in <string.h>. */
-/* #undef _GLIBCXX_HAVE_STRXFRM_L */
-
-/* Define to 1 if the target runtime linker supports binding the same symbol
-   to different versions. */
-/* #undef _GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT */
-
-/* Define to 1 if you have the <sys/filio.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_FILIO_H */
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#define _GLIBCXX_HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the <sys/ipc.h> header file. */
-#define _GLIBCXX_HAVE_SYS_IPC_H 1
-
-/* Define to 1 if you have the <sys/isa_defs.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_ISA_DEFS_H */
-
-/* Define to 1 if you have the <sys/machine.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_MACHINE_H */
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#define _GLIBCXX_HAVE_SYS_PARAM_H 1
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#define _GLIBCXX_HAVE_SYS_RESOURCE_H 1
-
-/* Define to 1 if you have the <sys/sem.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_SEM_H */
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define _GLIBCXX_HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define _GLIBCXX_HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define _GLIBCXX_HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/uio.h> header file. */
-#define _GLIBCXX_HAVE_SYS_UIO_H 1
-
-/* Define if S_IFREG is available in <sys/stat.h>. */
-/* #undef _GLIBCXX_HAVE_S_IFREG */
-
-/* Define if S_IFREG is available in <sys/stat.h>. */
-#define _GLIBCXX_HAVE_S_ISREG 1
-
-/* Define to 1 if you have the `tanf' function. */
-#define _GLIBCXX_HAVE_TANF 1
-
-/* Define to 1 if you have the `tanhf' function. */
-#define _GLIBCXX_HAVE_TANHF 1
-
-/* Define to 1 if you have the `tanhl' function. */
-/* #undef _GLIBCXX_HAVE_TANHL */
-
-/* Define to 1 if you have the `tanl' function. */
-/* #undef _GLIBCXX_HAVE_TANL */
-
-/* Define to 1 if you have the <tgmath.h> header file. */
-/* #undef _GLIBCXX_HAVE_TGMATH_H */
-
-/* Define to 1 if the target supports thread-local storage. */
-/* #undef _GLIBCXX_HAVE_TLS */
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define _GLIBCXX_HAVE_UNISTD_H 1
-
-/* Defined if vfwscanf exists. */
-/* #undef _GLIBCXX_HAVE_VFWSCANF */
-
-/* Defined if vswscanf exists. */
-/* #undef _GLIBCXX_HAVE_VSWSCANF */
-
-/* Defined if vwscanf exists. */
-/* #undef _GLIBCXX_HAVE_VWSCANF */
-
-/* Define to 1 if you have the <wchar.h> header file. */
-#define _GLIBCXX_HAVE_WCHAR_H 1
-
-/* Defined if wcstof exists. */
-/* #undef _GLIBCXX_HAVE_WCSTOF */
-
-/* Define to 1 if you have the <wctype.h> header file. */
-#define _GLIBCXX_HAVE_WCTYPE_H 1
-
-/* Define if writev is available in <sys/uio.h>. */
-#define _GLIBCXX_HAVE_WRITEV 1
-
-/* Define to 1 if you have the `_acosf' function. */
-/* #undef _GLIBCXX_HAVE__ACOSF */
-
-/* Define to 1 if you have the `_acosl' function. */
-/* #undef _GLIBCXX_HAVE__ACOSL */
-
-/* Define to 1 if you have the `_asinf' function. */
-/* #undef _GLIBCXX_HAVE__ASINF */
-
-/* Define to 1 if you have the `_asinl' function. */
-/* #undef _GLIBCXX_HAVE__ASINL */
-
-/* Define to 1 if you have the `_atan2f' function. */
-/* #undef _GLIBCXX_HAVE__ATAN2F */
-
-/* Define to 1 if you have the `_atan2l' function. */
-/* #undef _GLIBCXX_HAVE__ATAN2L */
-
-/* Define to 1 if you have the `_atanf' function. */
-/* #undef _GLIBCXX_HAVE__ATANF */
-
-/* Define to 1 if you have the `_atanl' function. */
-/* #undef _GLIBCXX_HAVE__ATANL */
-
-/* Define to 1 if you have the `_ceilf' function. */
-/* #undef _GLIBCXX_HAVE__CEILF */
-
-/* Define to 1 if you have the `_ceill' function. */
-/* #undef _GLIBCXX_HAVE__CEILL */
-
-/* Define to 1 if you have the `_cosf' function. */
-/* #undef _GLIBCXX_HAVE__COSF */
-
-/* Define to 1 if you have the `_coshf' function. */
-/* #undef _GLIBCXX_HAVE__COSHF */
-
-/* Define to 1 if you have the `_coshl' function. */
-/* #undef _GLIBCXX_HAVE__COSHL */
-
-/* Define to 1 if you have the `_cosl' function. */
-/* #undef _GLIBCXX_HAVE__COSL */
-
-/* Define to 1 if you have the `_expf' function. */
-/* #undef _GLIBCXX_HAVE__EXPF */
-
-/* Define to 1 if you have the `_expl' function. */
-/* #undef _GLIBCXX_HAVE__EXPL */
-
-/* Define to 1 if you have the `_fabsf' function. */
-/* #undef _GLIBCXX_HAVE__FABSF */
-
-/* Define to 1 if you have the `_fabsl' function. */
-/* #undef _GLIBCXX_HAVE__FABSL */
-
-/* Define to 1 if you have the `_finite' function. */
-/* #undef _GLIBCXX_HAVE__FINITE */
-
-/* Define to 1 if you have the `_finitef' function. */
-/* #undef _GLIBCXX_HAVE__FINITEF */
-
-/* Define to 1 if you have the `_finitel' function. */
-/* #undef _GLIBCXX_HAVE__FINITEL */
-
-/* Define to 1 if you have the `_floorf' function. */
-/* #undef _GLIBCXX_HAVE__FLOORF */
-
-/* Define to 1 if you have the `_floorl' function. */
-/* #undef _GLIBCXX_HAVE__FLOORL */
-
-/* Define to 1 if you have the `_fmodf' function. */
-/* #undef _GLIBCXX_HAVE__FMODF */
-
-/* Define to 1 if you have the `_fmodl' function. */
-/* #undef _GLIBCXX_HAVE__FMODL */
-
-/* Define to 1 if you have the `_fpclass' function. */
-/* #undef _GLIBCXX_HAVE__FPCLASS */
-
-/* Define to 1 if you have the `_frexpf' function. */
-/* #undef _GLIBCXX_HAVE__FREXPF */
-
-/* Define to 1 if you have the `_frexpl' function. */
-/* #undef _GLIBCXX_HAVE__FREXPL */
-
-/* Define to 1 if you have the `_hypot' function. */
-/* #undef _GLIBCXX_HAVE__HYPOT */
-
-/* Define to 1 if you have the `_hypotf' function. */
-/* #undef _GLIBCXX_HAVE__HYPOTF */
-
-/* Define to 1 if you have the `_hypotl' function. */
-/* #undef _GLIBCXX_HAVE__HYPOTL */
-
-/* Define to 1 if you have the `_isinf' function. */
-/* #undef _GLIBCXX_HAVE__ISINF */
-
-/* Define to 1 if you have the `_isinff' function. */
-/* #undef _GLIBCXX_HAVE__ISINFF */
-
-/* Define to 1 if you have the `_isinfl' function. */
-/* #undef _GLIBCXX_HAVE__ISINFL */
-
-/* Define to 1 if you have the `_isnan' function. */
-/* #undef _GLIBCXX_HAVE__ISNAN */
-
-/* Define to 1 if you have the `_isnanf' function. */
-/* #undef _GLIBCXX_HAVE__ISNANF */
-
-/* Define to 1 if you have the `_isnanl' function. */
-/* #undef _GLIBCXX_HAVE__ISNANL */
-
-/* Define to 1 if you have the `_ldexpf' function. */
-/* #undef _GLIBCXX_HAVE__LDEXPF */
-
-/* Define to 1 if you have the `_ldexpl' function. */
-/* #undef _GLIBCXX_HAVE__LDEXPL */
-
-/* Define to 1 if you have the `_log10f' function. */
-/* #undef _GLIBCXX_HAVE__LOG10F */
-
-/* Define to 1 if you have the `_log10l' function. */
-/* #undef _GLIBCXX_HAVE__LOG10L */
-
-/* Define to 1 if you have the `_logf' function. */
-/* #undef _GLIBCXX_HAVE__LOGF */
-
-/* Define to 1 if you have the `_logl' function. */
-/* #undef _GLIBCXX_HAVE__LOGL */
-
-/* Define to 1 if you have the `_modf' function. */
-/* #undef _GLIBCXX_HAVE__MODF */
-
-/* Define to 1 if you have the `_modff' function. */
-/* #undef _GLIBCXX_HAVE__MODFF */
-
-/* Define to 1 if you have the `_modfl' function. */
-/* #undef _GLIBCXX_HAVE__MODFL */
-
-/* Define to 1 if you have the `_powf' function. */
-/* #undef _GLIBCXX_HAVE__POWF */
-
-/* Define to 1 if you have the `_powl' function. */
-/* #undef _GLIBCXX_HAVE__POWL */
-
-/* Define to 1 if you have the `_qfpclass' function. */
-/* #undef _GLIBCXX_HAVE__QFPCLASS */
-
-/* Define to 1 if you have the `_sincos' function. */
-/* #undef _GLIBCXX_HAVE__SINCOS */
-
-/* Define to 1 if you have the `_sincosf' function. */
-/* #undef _GLIBCXX_HAVE__SINCOSF */
-
-/* Define to 1 if you have the `_sincosl' function. */
-/* #undef _GLIBCXX_HAVE__SINCOSL */
-
-/* Define to 1 if you have the `_sinf' function. */
-/* #undef _GLIBCXX_HAVE__SINF */
-
-/* Define to 1 if you have the `_sinhf' function. */
-/* #undef _GLIBCXX_HAVE__SINHF */
-
-/* Define to 1 if you have the `_sinhl' function. */
-/* #undef _GLIBCXX_HAVE__SINHL */
-
-/* Define to 1 if you have the `_sinl' function. */
-/* #undef _GLIBCXX_HAVE__SINL */
-
-/* Define to 1 if you have the `_sqrtf' function. */
-/* #undef _GLIBCXX_HAVE__SQRTF */
-
-/* Define to 1 if you have the `_sqrtl' function. */
-/* #undef _GLIBCXX_HAVE__SQRTL */
-
-/* Define to 1 if you have the `_tanf' function. */
-/* #undef _GLIBCXX_HAVE__TANF */
-
-/* Define to 1 if you have the `_tanhf' function. */
-/* #undef _GLIBCXX_HAVE__TANHF */
-
-/* Define to 1 if you have the `_tanhl' function. */
-/* #undef _GLIBCXX_HAVE__TANHL */
-
-/* Define to 1 if you have the `_tanl' function. */
-/* #undef _GLIBCXX_HAVE__TANL */
-
-/* Define as const if the declaration of iconv() needs const. */
-/* #undef _GLIBCXX_ICONV_CONST */
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
-#define LT_OBJDIR ".libs/"
-
-/* Name of package */
-/* #undef _GLIBCXX_PACKAGE */
-
-/* Define to the address where bug reports for this package should be sent. */
-#define _GLIBCXX_PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define _GLIBCXX_PACKAGE_NAME "package-unused"
-
-/* Define to the full name and version of this package. */
-#define _GLIBCXX_PACKAGE_STRING "package-unused version-unused"
-
-/* Define to the one symbol short name of this package. */
-#define _GLIBCXX_PACKAGE_TARNAME "libstdc++"
-
-/* Define to the home page for this package. */
-#define _GLIBCXX_PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define _GLIBCXX_PACKAGE__GLIBCXX_VERSION "version-unused"
-
-/* The size of `char', as computed by sizeof. */
-/* #undef SIZEOF_CHAR */
-
-/* The size of `int', as computed by sizeof. */
-/* #undef SIZEOF_INT */
-
-/* The size of `long', as computed by sizeof. */
-/* #undef SIZEOF_LONG */
-
-/* The size of `short', as computed by sizeof. */
-/* #undef SIZEOF_SHORT */
-
-/* The size of `void *', as computed by sizeof. */
-/* #undef SIZEOF_VOID_P */
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Version number of package */
-/* #undef _GLIBCXX_VERSION */
-
-/* Define if builtin atomic operations for bool are supported on this host. */
-#define _GLIBCXX_ATOMIC_BUILTINS_1 1
-
-/* Define if builtin atomic operations for short are supported on this host.
-   */
-#define _GLIBCXX_ATOMIC_BUILTINS_2 1
-
-/* Define if builtin atomic operations for int are supported on this host. */
-#define _GLIBCXX_ATOMIC_BUILTINS_4 1
-
-/* Define if builtin atomic operations for long long are supported on this
-   host. */
-/* #undef _GLIBCXX_ATOMIC_BUILTINS_8 */
-
-/* Define to use concept checking code from the boost libraries. */
-/* #undef _GLIBCXX_CONCEPT_CHECKS */
-
-/* Define if a fully dynamic basic_string is wanted. */
-/* #undef _GLIBCXX_FULLY_DYNAMIC_STRING */
-
-/* Define if gthreads library is available. */
-/* #undef _GLIBCXX_HAS_GTHREADS */
-
-/* Define to 1 if a full hosted library is built, or 0 if freestanding. */
-#define _GLIBCXX_HOSTED 0
-
-/* Define if compatibility should be provided for -mlong-double-64. */
-
-/* Define if ptrdiff_t is int. */
-#define _GLIBCXX_PTRDIFF_T_IS_INT 1
-
-/* Define if using setrlimit to set resource limits during "make check" */
-/* #undef _GLIBCXX_RES_LIMITS */
-
-/* Define if size_t is unsigned int. */
-#define _GLIBCXX_SIZE_T_IS_UINT 1
-
-/* Define if the compiler is configured for setjmp/longjmp exceptions. */
-/* #undef _GLIBCXX_SJLJ_EXCEPTIONS */
-
-/* Define to the value of the EOF integer constant. */
-#define _GLIBCXX_STDIO_EOF -1
-
-/* Define to the value of the SEEK_CUR integer constant. */
-#define _GLIBCXX_STDIO_SEEK_CUR 1
-
-/* Define to the value of the SEEK_END integer constant. */
-#define _GLIBCXX_STDIO_SEEK_END 2
-
-/* Define to use symbol versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER */
-
-/* Define to use darwin versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_DARWIN */
-
-/* Define to use GNU versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_GNU */
-
-/* Define to use GNU namespace versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_GNU_NAMESPACE */
-
-/* Define to use Sun versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_SUN */
-
-/* Define if C99 functions or macros from <wchar.h>, <math.h>, <complex.h>,
-   <stdio.h>, and <stdlib.h> can be used or exposed. */
-/* #undef _GLIBCXX_USE_C99 */
-
-/* Define if C99 functions in <complex.h> should be used in <complex>. Using
-   compiler builtins for these functions requires corresponding C99 library
-   functions to be present. */
-/* #undef _GLIBCXX_USE_C99_COMPLEX */
-
-/* Define if C99 functions in <complex.h> should be used in <tr1/complex>.
-   Using compiler builtins for these functions requires corresponding C99
-   library functions to be present. */
-/* #undef _GLIBCXX_USE_C99_COMPLEX_TR1 */
-
-/* Define if C99 functions in <ctype.h> should be imported in <tr1/cctype> in
-   namespace std::tr1. */
-#define _GLIBCXX_USE_C99_CTYPE_TR1 1
-
-/* Define if C99 functions in <fenv.h> should be imported in <tr1/cfenv> in
-   namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_FENV_TR1 */
-
-/* Define if C99 functions in <inttypes.h> should be imported in
-   <tr1/cinttypes> in namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_INTTYPES_TR1 */
-
-/* Define if wchar_t C99 functions in <inttypes.h> should be imported in
-   <tr1/cinttypes> in namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1 */
-
-/* Define if C99 functions or macros in <math.h> should be imported in <cmath>
-   in namespace std. */
-/* #undef _GLIBCXX_USE_C99_MATH */
-
-/* Define if C99 functions or macros in <math.h> should be imported in
-   <tr1/cmath> in namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_MATH_TR1 */
-
-/* Define if C99 types in <stdint.h> should be imported in <tr1/cstdint> in
-   namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_STDINT_TR1 */
-
-/* Defined if clock_gettime has monotonic clock support. */
-/* #undef _GLIBCXX_USE_CLOCK_MONOTONIC */
-
-/* Defined if clock_gettime has realtime clock support. */
-/* #undef _GLIBCXX_USE_CLOCK_REALTIME */
-
-/* Define if ISO/IEC TR 24733 decimal floating point types are supported on
-   this host. */
-/* #undef _GLIBCXX_USE_DECIMAL_FLOAT */
-
-/* Defined if gettimeofday is available. */
-#define _GLIBCXX_USE_GETTIMEOFDAY 1
-
-/* Define if LFS support is available. */
-/* #undef _GLIBCXX_USE_LFS */
-
-/* Define if code specialized for long long should be used. */
-#define _GLIBCXX_USE_LONG_LONG 1
-
-/* Defined if nanosleep is available. */
-/* #undef _GLIBCXX_USE_NANOSLEEP */
-
-/* Define if NLS translations are to be used. */
-/* #undef _GLIBCXX_USE_NLS */
-
-/* Define if /dev/random and /dev/urandom are available for the random_device
-   of TR1 (Chapter 5.1). */
-#define _GLIBCXX_USE_RANDOM_TR1 1
-
-/* Defined if sched_yield is available. */
-/* #undef _GLIBCXX_USE_SCHED_YIELD */
-
-/* Define if code specialized for wchar_t should be used. */
-/* #undef _GLIBCXX_USE_WCHAR_T */
-
-#if defined (_GLIBCXX_HAVE__ACOSF) && ! defined (_GLIBCXX_HAVE_ACOSF)
-# define _GLIBCXX_HAVE_ACOSF 1
-# define acosf _acosf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ACOSL) && ! defined (_GLIBCXX_HAVE_ACOSL)
-# define _GLIBCXX_HAVE_ACOSL 1
-# define acosl _acosl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ASINF) && ! defined (_GLIBCXX_HAVE_ASINF)
-# define _GLIBCXX_HAVE_ASINF 1
-# define asinf _asinf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ASINL) && ! defined (_GLIBCXX_HAVE_ASINL)
-# define _GLIBCXX_HAVE_ASINL 1
-# define asinl _asinl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATAN2F) && ! defined (_GLIBCXX_HAVE_ATAN2F)
-# define _GLIBCXX_HAVE_ATAN2F 1
-# define atan2f _atan2f
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATAN2L) && ! defined (_GLIBCXX_HAVE_ATAN2L)
-# define _GLIBCXX_HAVE_ATAN2L 1
-# define atan2l _atan2l
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATANF) && ! defined (_GLIBCXX_HAVE_ATANF)
-# define _GLIBCXX_HAVE_ATANF 1
-# define atanf _atanf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATANL) && ! defined (_GLIBCXX_HAVE_ATANL)
-# define _GLIBCXX_HAVE_ATANL 1
-# define atanl _atanl
-#endif
-
-#if defined (_GLIBCXX_HAVE__CEILF) && ! defined (_GLIBCXX_HAVE_CEILF)
-# define _GLIBCXX_HAVE_CEILF 1
-# define ceilf _ceilf
-#endif
-
-#if defined (_GLIBCXX_HAVE__CEILL) && ! defined (_GLIBCXX_HAVE_CEILL)
-# define _GLIBCXX_HAVE_CEILL 1
-# define ceill _ceill
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSF) && ! defined (_GLIBCXX_HAVE_COSF)
-# define _GLIBCXX_HAVE_COSF 1
-# define cosf _cosf
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSHF) && ! defined (_GLIBCXX_HAVE_COSHF)
-# define _GLIBCXX_HAVE_COSHF 1
-# define coshf _coshf
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSHL) && ! defined (_GLIBCXX_HAVE_COSHL)
-# define _GLIBCXX_HAVE_COSHL 1
-# define coshl _coshl
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSL) && ! defined (_GLIBCXX_HAVE_COSL)
-# define _GLIBCXX_HAVE_COSL 1
-# define cosl _cosl
-#endif
-
-#if defined (_GLIBCXX_HAVE__EXPF) && ! defined (_GLIBCXX_HAVE_EXPF)
-# define _GLIBCXX_HAVE_EXPF 1
-# define expf _expf
-#endif
-
-#if defined (_GLIBCXX_HAVE__EXPL) && ! defined (_GLIBCXX_HAVE_EXPL)
-# define _GLIBCXX_HAVE_EXPL 1
-# define expl _expl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FABSF) && ! defined (_GLIBCXX_HAVE_FABSF)
-# define _GLIBCXX_HAVE_FABSF 1
-# define fabsf _fabsf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FABSL) && ! defined (_GLIBCXX_HAVE_FABSL)
-# define _GLIBCXX_HAVE_FABSL 1
-# define fabsl _fabsl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FINITE) && ! defined (_GLIBCXX_HAVE_FINITE)
-# define _GLIBCXX_HAVE_FINITE 1
-# define finite _finite
-#endif
-
-#if defined (_GLIBCXX_HAVE__FINITEF) && ! defined (_GLIBCXX_HAVE_FINITEF)
-# define _GLIBCXX_HAVE_FINITEF 1
-# define finitef _finitef
-#endif
-
-#if defined (_GLIBCXX_HAVE__FINITEL) && ! defined (_GLIBCXX_HAVE_FINITEL)
-# define _GLIBCXX_HAVE_FINITEL 1
-# define finitel _finitel
-#endif
-
-#if defined (_GLIBCXX_HAVE__FLOORF) && ! defined (_GLIBCXX_HAVE_FLOORF)
-# define _GLIBCXX_HAVE_FLOORF 1
-# define floorf _floorf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FLOORL) && ! defined (_GLIBCXX_HAVE_FLOORL)
-# define _GLIBCXX_HAVE_FLOORL 1
-# define floorl _floorl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FMODF) && ! defined (_GLIBCXX_HAVE_FMODF)
-# define _GLIBCXX_HAVE_FMODF 1
-# define fmodf _fmodf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FMODL) && ! defined (_GLIBCXX_HAVE_FMODL)
-# define _GLIBCXX_HAVE_FMODL 1
-# define fmodl _fmodl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FPCLASS) && ! defined (_GLIBCXX_HAVE_FPCLASS)
-# define _GLIBCXX_HAVE_FPCLASS 1
-# define fpclass _fpclass
-#endif
-
-#if defined (_GLIBCXX_HAVE__FREXPF) && ! defined (_GLIBCXX_HAVE_FREXPF)
-# define _GLIBCXX_HAVE_FREXPF 1
-# define frexpf _frexpf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FREXPL) && ! defined (_GLIBCXX_HAVE_FREXPL)
-# define _GLIBCXX_HAVE_FREXPL 1
-# define frexpl _frexpl
-#endif
-
-#if defined (_GLIBCXX_HAVE__HYPOT) && ! defined (_GLIBCXX_HAVE_HYPOT)
-# define _GLIBCXX_HAVE_HYPOT 1
-# define hypot _hypot
-#endif
-
-#if defined (_GLIBCXX_HAVE__HYPOTF) && ! defined (_GLIBCXX_HAVE_HYPOTF)
-# define _GLIBCXX_HAVE_HYPOTF 1
-# define hypotf _hypotf
-#endif
-
-#if defined (_GLIBCXX_HAVE__HYPOTL) && ! defined (_GLIBCXX_HAVE_HYPOTL)
-# define _GLIBCXX_HAVE_HYPOTL 1
-# define hypotl _hypotl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISINF) && ! defined (_GLIBCXX_HAVE_ISINF)
-# define _GLIBCXX_HAVE_ISINF 1
-# define isinf _isinf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISINFF) && ! defined (_GLIBCXX_HAVE_ISINFF)
-# define _GLIBCXX_HAVE_ISINFF 1
-# define isinff _isinff
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISINFL) && ! defined (_GLIBCXX_HAVE_ISINFL)
-# define _GLIBCXX_HAVE_ISINFL 1
-# define isinfl _isinfl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISNAN) && ! defined (_GLIBCXX_HAVE_ISNAN)
-# define _GLIBCXX_HAVE_ISNAN 1
-# define isnan _isnan
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISNANF) && ! defined (_GLIBCXX_HAVE_ISNANF)
-# define _GLIBCXX_HAVE_ISNANF 1
-# define isnanf _isnanf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISNANL) && ! defined (_GLIBCXX_HAVE_ISNANL)
-# define _GLIBCXX_HAVE_ISNANL 1
-# define isnanl _isnanl
-#endif
-
-#if defined (_GLIBCXX_HAVE__LDEXPF) && ! defined (_GLIBCXX_HAVE_LDEXPF)
-# define _GLIBCXX_HAVE_LDEXPF 1
-# define ldexpf _ldexpf
-#endif
-
-#if defined (_GLIBCXX_HAVE__LDEXPL) && ! defined (_GLIBCXX_HAVE_LDEXPL)
-# define _GLIBCXX_HAVE_LDEXPL 1
-# define ldexpl _ldexpl
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOG10F) && ! defined (_GLIBCXX_HAVE_LOG10F)
-# define _GLIBCXX_HAVE_LOG10F 1
-# define log10f _log10f
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOG10L) && ! defined (_GLIBCXX_HAVE_LOG10L)
-# define _GLIBCXX_HAVE_LOG10L 1
-# define log10l _log10l
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOGF) && ! defined (_GLIBCXX_HAVE_LOGF)
-# define _GLIBCXX_HAVE_LOGF 1
-# define logf _logf
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOGL) && ! defined (_GLIBCXX_HAVE_LOGL)
-# define _GLIBCXX_HAVE_LOGL 1
-# define logl _logl
-#endif
-
-#if defined (_GLIBCXX_HAVE__MODF) && ! defined (_GLIBCXX_HAVE_MODF)
-# define _GLIBCXX_HAVE_MODF 1
-# define modf _modf
-#endif
-
-#if defined (_GLIBCXX_HAVE__MODFF) && ! defined (_GLIBCXX_HAVE_MODFF)
-# define _GLIBCXX_HAVE_MODFF 1
-# define modff _modff
-#endif
-
-#if defined (_GLIBCXX_HAVE__MODFL) && ! defined (_GLIBCXX_HAVE_MODFL)
-# define _GLIBCXX_HAVE_MODFL 1
-# define modfl _modfl
-#endif
-
-#if defined (_GLIBCXX_HAVE__POWF) && ! defined (_GLIBCXX_HAVE_POWF)
-# define _GLIBCXX_HAVE_POWF 1
-# define powf _powf
-#endif
-
-#if defined (_GLIBCXX_HAVE__POWL) && ! defined (_GLIBCXX_HAVE_POWL)
-# define _GLIBCXX_HAVE_POWL 1
-# define powl _powl
-#endif
-
-#if defined (_GLIBCXX_HAVE__QFPCLASS) && ! defined (_GLIBCXX_HAVE_QFPCLASS)
-# define _GLIBCXX_HAVE_QFPCLASS 1
-# define qfpclass _qfpclass
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINCOS) && ! defined (_GLIBCXX_HAVE_SINCOS)
-# define _GLIBCXX_HAVE_SINCOS 1
-# define sincos _sincos
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINCOSF) && ! defined (_GLIBCXX_HAVE_SINCOSF)
-# define _GLIBCXX_HAVE_SINCOSF 1
-# define sincosf _sincosf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINCOSL) && ! defined (_GLIBCXX_HAVE_SINCOSL)
-# define _GLIBCXX_HAVE_SINCOSL 1
-# define sincosl _sincosl
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINF) && ! defined (_GLIBCXX_HAVE_SINF)
-# define _GLIBCXX_HAVE_SINF 1
-# define sinf _sinf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINHF) && ! defined (_GLIBCXX_HAVE_SINHF)
-# define _GLIBCXX_HAVE_SINHF 1
-# define sinhf _sinhf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINHL) && ! defined (_GLIBCXX_HAVE_SINHL)
-# define _GLIBCXX_HAVE_SINHL 1
-# define sinhl _sinhl
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINL) && ! defined (_GLIBCXX_HAVE_SINL)
-# define _GLIBCXX_HAVE_SINL 1
-# define sinl _sinl
-#endif
-
-#if defined (_GLIBCXX_HAVE__SQRTF) && ! defined (_GLIBCXX_HAVE_SQRTF)
-# define _GLIBCXX_HAVE_SQRTF 1
-# define sqrtf _sqrtf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SQRTL) && ! defined (_GLIBCXX_HAVE_SQRTL)
-# define _GLIBCXX_HAVE_SQRTL 1
-# define sqrtl _sqrtl
-#endif
-
-#if defined (_GLIBCXX_HAVE__STRTOF) && ! defined (_GLIBCXX_HAVE_STRTOF)
-# define _GLIBCXX_HAVE_STRTOF 1
-# define strtof _strtof
-#endif
-
-#if defined (_GLIBCXX_HAVE__STRTOLD) && ! defined (_GLIBCXX_HAVE_STRTOLD)
-# define _GLIBCXX_HAVE_STRTOLD 1
-# define strtold _strtold
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANF) && ! defined (_GLIBCXX_HAVE_TANF)
-# define _GLIBCXX_HAVE_TANF 1
-# define tanf _tanf
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANHF) && ! defined (_GLIBCXX_HAVE_TANHF)
-# define _GLIBCXX_HAVE_TANHF 1
-# define tanhf _tanhf
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANHL) && ! defined (_GLIBCXX_HAVE_TANHL)
-# define _GLIBCXX_HAVE_TANHL 1
-# define tanhl _tanhl
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANL) && ! defined (_GLIBCXX_HAVE_TANL)
-# define _GLIBCXX_HAVE_TANL 1
-# define tanl _tanl
-#endif
-
-#endif // _GLIBCXX_CXX_CONFIG_H
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/bits/cpu_defines.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/bits/cpu_defines.h
deleted file mode 100644
index c1b9863..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/bits/cpu_defines.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Specific definitions for generic platforms  -*- C++ -*-
-
-// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/cpu_defines.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{iosfwd}
- */
-
-#ifndef _GLIBCXX_CPU_DEFINES
-#define _GLIBCXX_CPU_DEFINES 1
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/bits/cxxabi_tweaks.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/bits/cxxabi_tweaks.h
deleted file mode 100644
index 2ac349d..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/bits/cxxabi_tweaks.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Control various target specific ABI tweaks.  ARM version.
-
-// Copyright (C) 2004, 2006, 2008, 2009, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/cxxabi_tweaks.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{cxxabi.h}
- */
-
-#ifndef _CXXABI_TWEAKS_H
-#define _CXXABI_TWEAKS_H 1
-
-#ifdef __cplusplus
-namespace __cxxabiv1
-{
-  extern "C" 
-  {
-#endif
-
-#ifdef __ARM_EABI__
-  // The ARM EABI uses the least significant bit of a 32-bit
-  // guard variable.  */
-#define _GLIBCXX_GUARD_TEST(x) ((*(x) & 1) != 0)
-#define _GLIBCXX_GUARD_SET(x) *(x) = 1
-#define _GLIBCXX_GUARD_BIT 1
-#define _GLIBCXX_GUARD_PENDING_BIT __guard_test_bit (1, 1)
-#define _GLIBCXX_GUARD_WAITING_BIT __guard_test_bit (2, 1)
-  typedef int __guard;
-
-  // We also want the element size in array cookies.
-#define _GLIBCXX_ELTSIZE_IN_COOKIE 1
-  
-  // __cxa_vec_ctor should return a pointer to the array.
-  typedef void * __cxa_vec_ctor_return_type;
-#define _GLIBCXX_CXA_VEC_CTOR_RETURN(x) return x
-  // Constructors and destructors return the "this" pointer.
-  typedef void * __cxa_cdtor_return_type;
-
-#else // __ARM_EABI__
-
-  // The generic ABI uses the first byte of a 64-bit guard variable.
-#define _GLIBCXX_GUARD_TEST(x) (*(char *) (x) != 0)
-#define _GLIBCXX_GUARD_SET(x) *(char *) (x) = 1
-#define _GLIBCXX_GUARD_BIT __guard_test_bit (0, 1)
-#define _GLIBCXX_GUARD_PENDING_BIT __guard_test_bit (1, 1)
-#define _GLIBCXX_GUARD_WAITING_BIT __guard_test_bit (2, 1)
-  __extension__ typedef int __guard __attribute__((mode (__DI__)));
-
-  // __cxa_vec_ctor has void return type.
-  typedef void __cxa_vec_ctor_return_type;
-#define _GLIBCXX_CXA_VEC_CTOR_RETURN(x) return
-  // Constructors and destructors do not return a value.
-  typedef void __cxa_cdtor_return_type;
-
-#endif //!__ARM_EABI__
-
-#ifdef __cplusplus
-  }
-} // namespace __cxxabiv1
-#endif
-
-#endif 
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/bits/os_defines.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/bits/os_defines.h
deleted file mode 100644
index 0c8f77d..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/bits/os_defines.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Specific definitions for Bionic  -*- C++ -*-
-
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/os_defines.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{iosfwd}
- */
-
-#ifndef _GLIBCXX_OS_DEFINES
-#define _GLIBCXX_OS_DEFINES 1
-
-// System-specific #define, typedefs, corrections, etc, go here.  This
-// file will come before all others.
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/thumb/bits/c++config.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/thumb/bits/c++config.h
deleted file mode 100644
index 309d185..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/thumb/bits/c++config.h
+++ /dev/null
@@ -1,1568 +0,0 @@
-// Predefined symbols and macros -*- C++ -*-
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/c++config.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{iosfwd}
- */
-
-#ifndef _GLIBCXX_CXX_CONFIG_H
-#define _GLIBCXX_CXX_CONFIG_H 1
-
-// The current version of the C++ library in compressed ISO date format.
-#define __GLIBCXX__ 20110718
-
-// Macros for various attributes.
-//   _GLIBCXX_PURE
-//   _GLIBCXX_CONST
-//   _GLIBCXX_NORETURN
-//   _GLIBCXX_NOTHROW
-//   _GLIBCXX_VISIBILITY
-#ifndef _GLIBCXX_PURE
-# define _GLIBCXX_PURE __attribute__ ((__pure__))
-#endif
-
-#ifndef _GLIBCXX_CONST
-# define _GLIBCXX_CONST __attribute__ ((__const__))
-#endif
-
-#ifndef _GLIBCXX_NORETURN
-# define _GLIBCXX_NORETURN __attribute__ ((__noreturn__))
-#endif
-
-#ifndef _GLIBCXX_NOTHROW
-# ifdef __cplusplus
-#  define _GLIBCXX_NOTHROW throw()
-# else
-#  define _GLIBCXX_NOTHROW __attribute__((__nothrow__))
-# endif
-#endif
-
-// Macros for visibility attributes.
-//   _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
-//   _GLIBCXX_VISIBILITY
-# define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY 1
-
-#if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
-# define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))
-#else
-// If this is not supplied by the OS-specific or CPU-specific
-// headers included below, it will be defined to an empty default.
-# define _GLIBCXX_VISIBILITY(V) _GLIBCXX_PSEUDO_VISIBILITY(V)
-#endif
-
-// Macros for deprecated attributes.
-//   _GLIBCXX_USE_DEPRECATED
-//   _GLIBCXX_DEPRECATED
-#ifndef _GLIBCXX_USE_DEPRECATED
-# define _GLIBCXX_USE_DEPRECATED 1
-#endif
-
-#if defined(__DEPRECATED) && defined(__GXX_EXPERIMENTAL_CXX0X__)
-# define _GLIBCXX_DEPRECATED __attribute__ ((__deprecated__))
-#else
-# define _GLIBCXX_DEPRECATED
-#endif
-
-#if __cplusplus
-
-// Macro for constexpr, to support in mixed 03/0x mode.
-#ifndef _GLIBCXX_CONSTEXPR
-# ifdef __GXX_EXPERIMENTAL_CXX0X__
-#  define _GLIBCXX_CONSTEXPR constexpr
-#  define _GLIBCXX_USE_CONSTEXPR constexpr
-# else
-#  define _GLIBCXX_CONSTEXPR
-#  define _GLIBCXX_USE_CONSTEXPR const
-# endif
-#endif
-
-// Macro for extern template, ie controling template linkage via use
-// of extern keyword on template declaration. As documented in the g++
-// manual, it inhibits all implicit instantiations and is used
-// throughout the library to avoid multiple weak definitions for
-// required types that are already explicitly instantiated in the
-// library binary. This substantially reduces the binary size of
-// resulting executables.
-// Special case: _GLIBCXX_EXTERN_TEMPLATE == -1 disallows extern
-// templates only in basic_string, thus activating its debug-mode
-// checks even at -O0.
-# define _GLIBCXX_EXTERN_TEMPLATE 1
-
-/*
-  Outline of libstdc++ namespaces.
-
-  namespace std
-  {
-    namespace __debug { }
-    namespace __parallel { }
-    namespace __profile { }
-    namespace __cxx1998 { }
-
-    namespace __detail { }
-
-    namespace rel_ops { }
-
-    namespace tr1
-    {
-      namespace placeholders { }
-      namespace regex_constants { }
-      namespace __detail { }
-    }
-
-    namespace decimal { }
-
-    namespace chrono { }
-    namespace placeholders { }
-    namespace regex_constants { }
-    namespace this_thread { }
-  }
-
-  namespace abi { }
-
-  namespace __gnu_cxx
-  {
-    namespace __detail { }
-  }
-
-  For full details see:
-  http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html
-*/
-namespace std
-{
-  typedef __SIZE_TYPE__ 	size_t;
-  typedef __PTRDIFF_TYPE__	ptrdiff_t;
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-  typedef decltype(nullptr)	nullptr_t;
-#endif
-}
-
-
-// Defined if inline namespaces are used for versioning.
-# define _GLIBCXX_INLINE_VERSION 0
-
-// Inline namespace for symbol versioning.
-#if _GLIBCXX_INLINE_VERSION
-namespace std
-{
-  inline namespace _6 { }
-
-  namespace rel_ops { inline namespace _6 { } }
-
-  namespace tr1
-  {
-    inline namespace _6 { }
-    namespace placeholders { inline namespace _6 { } }
-    namespace regex_constants { inline namespace _6 { } }
-    namespace __detail { inline namespace _6 { } }
-  }
-
-  namespace decimal { inline namespace _6 { } }
-
-  namespace chrono { inline namespace _6 { } }
-  namespace placeholders { inline namespace _6 { } }
-  namespace regex_constants { inline namespace _6 { } }
-  namespace this_thread { inline namespace _6 { } }
-
-  namespace __detail { inline namespace _6 { } }
-  namespace __regex { inline namespace _6 { } }
-}
-
-namespace __gnu_cxx
-{
-  inline namespace _6 { }
-  namespace __detail { inline namespace _6 { } }
-}
-# define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace _6 {
-# define _GLIBCXX_END_NAMESPACE_VERSION }
-#else
-# define _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_VERSION
-#endif
-
-
-// Inline namespaces for special modes: debug, parallel, profile.
-#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PARALLEL) \
-    || defined(_GLIBCXX_PROFILE)
-namespace std
-{
-  // Non-inline namespace for components replaced by alternates in active mode.
-  namespace __cxx1998
-  {
-#if _GLIBCXX_INLINE_VERSION
- inline namespace _6 { }
-#endif
-  }
-
-  // Inline namespace for debug mode.
-# ifdef _GLIBCXX_DEBUG
-  inline namespace __debug { }
-# endif
-
-  // Inline namespaces for parallel mode.
-# ifdef _GLIBCXX_PARALLEL
-  inline namespace __parallel { }
-# endif
-
-  // Inline namespaces for profile mode
-# ifdef _GLIBCXX_PROFILE
-  inline namespace __profile { }
-# endif
-}
-
-// Check for invalid usage and unsupported mixed-mode use.
-# if defined(_GLIBCXX_DEBUG) && defined(_GLIBCXX_PARALLEL)
-#  error illegal use of multiple inlined namespaces
-# endif
-# if defined(_GLIBCXX_PROFILE) && defined(_GLIBCXX_DEBUG)
-#  error illegal use of multiple inlined namespaces
-# endif
-# if defined(_GLIBCXX_PROFILE) && defined(_GLIBCXX_PARALLEL)
-#  error illegal use of multiple inlined namespaces
-# endif
-
-// Check for invalid use due to lack for weak symbols.
-# if __NO_INLINE__ && !__GXX_WEAK__
-#  warning currently using inlined namespace mode which may fail \
-   without inlining due to lack of weak symbols
-# endif
-#endif
-
-// Macros for namespace scope. Either namespace std:: or the name
-// of some nested namespace within it corresponding to the active mode.
-// _GLIBCXX_STD_A
-// _GLIBCXX_STD_C
-//
-// Macros for opening/closing conditional namespaces.
-// _GLIBCXX_BEGIN_NAMESPACE_ALGO
-// _GLIBCXX_END_NAMESPACE_ALGO
-// _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
-// _GLIBCXX_END_NAMESPACE_CONTAINER
-#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PROFILE)
-# define _GLIBCXX_STD_C __cxx1998
-# define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER \
-	 namespace _GLIBCXX_STD_C { _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_CONTAINER \
-	 } _GLIBCXX_END_NAMESPACE_VERSION
-# undef _GLIBCXX_EXTERN_TEMPLATE
-#  define _GLIBCXX_EXTERN_TEMPLATE 1 -1
-#endif
-
-#ifdef _GLIBCXX_PARALLEL
-# define _GLIBCXX_STD_A __cxx1998
-# define _GLIBCXX_BEGIN_NAMESPACE_ALGO \
-	 namespace _GLIBCXX_STD_A { _GLIBCXX_BEGIN_NAMESPACE_VERSION
-# define _GLIBCXX_END_NAMESPACE_ALGO \
-	 } _GLIBCXX_END_NAMESPACE_VERSION
-#endif
-
-#ifndef _GLIBCXX_STD_A
-# define _GLIBCXX_STD_A std
-#endif
-
-#ifndef _GLIBCXX_STD_C
-# define _GLIBCXX_STD_C std
-#endif
-
-#ifndef _GLIBCXX_BEGIN_NAMESPACE_ALGO
-# define _GLIBCXX_BEGIN_NAMESPACE_ALGO
-#endif
-
-#ifndef _GLIBCXX_END_NAMESPACE_ALGO
-# define _GLIBCXX_END_NAMESPACE_ALGO
-#endif
-
-#ifndef _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
-# define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
-#endif
-
-#ifndef _GLIBCXX_END_NAMESPACE_CONTAINER
-# define _GLIBCXX_END_NAMESPACE_CONTAINER
-#endif
-
-// GLIBCXX_ABI Deprecated
-// Define if compatibility should be provided for -mlong-double-64.
-#undef _GLIBCXX_LONG_DOUBLE_COMPAT
-
-// Inline namespace for long double 128 mode.
-#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
-namespace std
-{
-  inline namespace __gnu_cxx_ldbl128 { }
-}
-# define _GLIBCXX_NAMESPACE_LDBL __gnu_cxx_ldbl128::
-# define _GLIBCXX_BEGIN_NAMESPACE_LDBL namespace __gnu_cxx_ldbl128 {
-# define _GLIBCXX_END_NAMESPACE_LDBL }
-#else
-# define _GLIBCXX_NAMESPACE_LDBL
-# define _GLIBCXX_BEGIN_NAMESPACE_LDBL
-# define _GLIBCXX_END_NAMESPACE_LDBL
-#endif
-
-// Assert.
-#if !defined(_GLIBCXX_DEBUG) && !defined(_GLIBCXX_PARALLEL)
-# define __glibcxx_assert(_Condition)
-#else
-namespace std
-{
-  // Avoid the use of assert, because we're trying to keep the <cassert>
-  // include out of the mix.
-  inline void
-  __replacement_assert(const char* __file, int __line,
-		       const char* __function, const char* __condition)
-  {
-    __builtin_printf("%s:%d: %s: Assertion '%s' failed.\n", __file, __line,
-		     __function, __condition);
-    __builtin_abort();
-  }
-}
-#define __glibcxx_assert(_Condition)				   	 \
-  do 									 \
-  {							      		 \
-    if (! (_Condition))                                                  \
-      std::__replacement_assert(__FILE__, __LINE__, __PRETTY_FUNCTION__, \
-				#_Condition);				 \
-  } while (false)
-#endif
-
-// Macros for race detectors.
-// _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) and
-// _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) should be used to explain
-// atomic (lock-free) synchronization to race detectors:
-// the race detector will infer a happens-before arc from the former to the
-// latter when they share the same argument pointer.
-//
-// The most frequent use case for these macros (and the only case in the
-// current implementation of the library) is atomic reference counting:
-//   void _M_remove_reference()
-//   {
-//     _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&this->_M_refcount);
-//     if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount, -1) <= 0)
-//       {
-//         _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&this->_M_refcount);
-//         _M_destroy(__a);
-//       }
-//   }
-// The annotations in this example tell the race detector that all memory
-// accesses occurred when the refcount was positive do not race with
-// memory accesses which occurred after the refcount became zero.
-#ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE
-# define  _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A)
-#endif
-#ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER
-# define  _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A)
-#endif
-
-// Macros for C linkage: define extern "C" linkage only when using C++.
-# define _GLIBCXX_BEGIN_EXTERN_C extern "C" {
-# define _GLIBCXX_END_EXTERN_C }
-
-#else // !__cplusplus
-# define _GLIBCXX_BEGIN_EXTERN_C
-# define _GLIBCXX_END_EXTERN_C
-#endif
-
-
-// First includes.
-
-// Pick up any OS-specific definitions.
-#include <bits/os_defines.h>
-
-// Pick up any CPU-specific definitions.
-#include <bits/cpu_defines.h>
-
-// If platform uses neither visibility nor psuedo-visibility,
-// specify empty default for namespace annotation macros.
-#ifndef _GLIBCXX_PSEUDO_VISIBILITY
-# define _GLIBCXX_PSEUDO_VISIBILITY(V)
-#endif
-
-// Certain function definitions that are meant to be overridable from
-// user code are decorated with this macro.  For some targets, this
-// macro causes these definitions to be weak.
-#ifndef _GLIBCXX_WEAK_DEFINITION
-# define _GLIBCXX_WEAK_DEFINITION
-#endif
-
-
-// The remainder of the prewritten config is automatic; all the
-// user hooks are listed above.
-
-// Create a boolean flag to be used to determine if --fast-math is set.
-#ifdef __FAST_MATH__
-# define _GLIBCXX_FAST_MATH 1
-#else
-# define _GLIBCXX_FAST_MATH 0
-#endif
-
-// This marks string literals in header files to be extracted for eventual
-// translation.  It is primarily used for messages in thrown exceptions; see
-// src/functexcept.cc.  We use __N because the more traditional _N is used
-// for something else under certain OSes (see BADNAMES).
-#define __N(msgid)     (msgid)
-
-// For example, <windows.h> is known to #define min and max as macros...
-#undef min
-#undef max
-
-// End of prewritten config; the settings discovered at configure time follow.
-/* config.h.  Generated from config.h.in by configure.  */
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to 1 if you have the `acosf' function. */
-#define _GLIBCXX_HAVE_ACOSF 1
-
-/* Define to 1 if you have the `acosl' function. */
-/* #undef _GLIBCXX_HAVE_ACOSL */
-
-/* Define to 1 if you have the `asinf' function. */
-#define _GLIBCXX_HAVE_ASINF 1
-
-/* Define to 1 if you have the `asinl' function. */
-/* #undef _GLIBCXX_HAVE_ASINL */
-
-/* Define to 1 if the target assembler supports .symver directive. */
-#define _GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE 1
-
-/* Define to 1 if you have the `atan2f' function. */
-#define _GLIBCXX_HAVE_ATAN2F 1
-
-/* Define to 1 if you have the `atan2l' function. */
-/* #undef _GLIBCXX_HAVE_ATAN2L */
-
-/* Define to 1 if you have the `atanf' function. */
-#define _GLIBCXX_HAVE_ATANF 1
-
-/* Define to 1 if you have the `atanl' function. */
-/* #undef _GLIBCXX_HAVE_ATANL */
-
-/* Define to 1 if the target assembler supports thread-local storage. */
-/* #undef _GLIBCXX_HAVE_CC_TLS */
-
-/* Define to 1 if you have the `ceilf' function. */
-#define _GLIBCXX_HAVE_CEILF 1
-
-/* Define to 1 if you have the `ceill' function. */
-#define _GLIBCXX_HAVE_CEILL 1
-
-/* Define to 1 if you have the <complex.h> header file. */
-/* #undef _GLIBCXX_HAVE_COMPLEX_H */
-
-/* Define to 1 if you have the `cosf' function. */
-#define _GLIBCXX_HAVE_COSF 1
-
-/* Define to 1 if you have the `coshf' function. */
-#define _GLIBCXX_HAVE_COSHF 1
-
-/* Define to 1 if you have the `coshl' function. */
-/* #undef _GLIBCXX_HAVE_COSHL */
-
-/* Define to 1 if you have the `cosl' function. */
-/* #undef _GLIBCXX_HAVE_COSL */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define _GLIBCXX_HAVE_DLFCN_H 1
-
-/* Define if EBADMSG exists. */
-#define _GLIBCXX_HAVE_EBADMSG 1
-
-/* Define if ECANCELED exists. */
-#define _GLIBCXX_HAVE_ECANCELED 1
-
-/* Define if EIDRM exists. */
-#define _GLIBCXX_HAVE_EIDRM 1
-
-/* Define to 1 if you have the <endian.h> header file. */
-#define _GLIBCXX_HAVE_ENDIAN_H 1
-
-/* Define if ENODATA exists. */
-#define _GLIBCXX_HAVE_ENODATA 1
-
-/* Define if ENOLINK exists. */
-#define _GLIBCXX_HAVE_ENOLINK 1
-
-/* Define if ENOSR exists. */
-#define _GLIBCXX_HAVE_ENOSR 1
-
-/* Define if ENOSTR exists. */
-#define _GLIBCXX_HAVE_ENOSTR 1
-
-/* Define if ENOTRECOVERABLE exists. */
-#define _GLIBCXX_HAVE_ENOTRECOVERABLE 1
-
-/* Define if ENOTSUP exists. */
-#define _GLIBCXX_HAVE_ENOTSUP 1
-
-/* Define if EOVERFLOW exists. */
-#define _GLIBCXX_HAVE_EOVERFLOW 1
-
-/* Define if EOWNERDEAD exists. */
-#define _GLIBCXX_HAVE_EOWNERDEAD 1
-
-/* Define if EPROTO exists. */
-#define _GLIBCXX_HAVE_EPROTO 1
-
-/* Define if ETIME exists. */
-#define _GLIBCXX_HAVE_ETIME 1
-
-/* Define if ETXTBSY exists. */
-#define _GLIBCXX_HAVE_ETXTBSY 1
-
-/* Define to 1 if you have the <execinfo.h> header file. */
-/* #undef _GLIBCXX_HAVE_EXECINFO_H */
-
-/* Define to 1 if you have the `expf' function. */
-#define _GLIBCXX_HAVE_EXPF 1
-
-/* Define to 1 if you have the `expl' function. */
-/* #undef _GLIBCXX_HAVE_EXPL */
-
-/* Define to 1 if you have the `fabsf' function. */
-#define _GLIBCXX_HAVE_FABSF 1
-
-/* Define to 1 if you have the `fabsl' function. */
-#define _GLIBCXX_HAVE_FABSL 1
-
-/* Define to 1 if you have the <fenv.h> header file. */
-/* #undef _GLIBCXX_HAVE_FENV_H */
-
-/* Define to 1 if you have the `finite' function. */
-#define _GLIBCXX_HAVE_FINITE 1
-
-/* Define to 1 if you have the `finitef' function. */
-#define _GLIBCXX_HAVE_FINITEF 1
-
-/* Define to 1 if you have the `finitel' function. */
-/* #undef _GLIBCXX_HAVE_FINITEL */
-
-/* Define to 1 if you have the <float.h> header file. */
-#define _GLIBCXX_HAVE_FLOAT_H 1
-
-/* Define to 1 if you have the `floorf' function. */
-#define _GLIBCXX_HAVE_FLOORF 1
-
-/* Define to 1 if you have the `floorl' function. */
-#define _GLIBCXX_HAVE_FLOORL 1
-
-/* Define to 1 if you have the `fmodf' function. */
-#define _GLIBCXX_HAVE_FMODF 1
-
-/* Define to 1 if you have the `fmodl' function. */
-/* #undef _GLIBCXX_HAVE_FMODL */
-
-/* Define to 1 if you have the `fpclass' function. */
-/* #undef _GLIBCXX_HAVE_FPCLASS */
-
-/* Define to 1 if you have the <fp.h> header file. */
-/* #undef _GLIBCXX_HAVE_FP_H */
-
-/* Define to 1 if you have the `frexpf' function. */
-#define _GLIBCXX_HAVE_FREXPF 1
-
-/* Define to 1 if you have the `frexpl' function. */
-/* #undef _GLIBCXX_HAVE_FREXPL */
-
-/* Define if _Unwind_GetIPInfo is available. */
-#define _GLIBCXX_HAVE_GETIPINFO 1
-
-/* Define if gthr-default.h exists (meaning that threading support is
-   enabled). */
-#define _GLIBCXX_HAVE_GTHR_DEFAULT 1
-
-/* Define to 1 if you have the `hypot' function. */
-#define _GLIBCXX_HAVE_HYPOT 1
-
-/* Define to 1 if you have the `hypotf' function. */
-#define _GLIBCXX_HAVE_HYPOTF 1
-
-/* Define to 1 if you have the `hypotl' function. */
-/* #undef _GLIBCXX_HAVE_HYPOTL */
-
-/* Define if you have the iconv() function. */
-/* #undef _GLIBCXX_HAVE_ICONV */
-
-/* Define to 1 if you have the <ieeefp.h> header file. */
-/* #undef _GLIBCXX_HAVE_IEEEFP_H */
-
-/* Define if int64_t is available in <stdint.h>. */
-#define _GLIBCXX_HAVE_INT64_T 1
-
-/* Define if int64_t is a long. */
-/* #undef _GLIBCXX_HAVE_INT64_T_LONG */
-
-/* Define if int64_t is a long long. */
-#define _GLIBCXX_HAVE_INT64_T_LONG_LONG 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define _GLIBCXX_HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `isinf' function. */
-/* #undef _GLIBCXX_HAVE_ISINF */
-
-/* Define to 1 if you have the `isinff' function. */
-/* #undef _GLIBCXX_HAVE_ISINFF */
-
-/* Define to 1 if you have the `isinfl' function. */
-/* #undef _GLIBCXX_HAVE_ISINFL */
-
-/* Define to 1 if you have the `isnan' function. */
-#define _GLIBCXX_HAVE_ISNAN 1
-
-/* Define to 1 if you have the `isnanf' function. */
-#define _GLIBCXX_HAVE_ISNANF 1
-
-/* Define to 1 if you have the `isnanl' function. */
-/* #undef _GLIBCXX_HAVE_ISNANL */
-
-/* Defined if iswblank exists. */
-/* #undef _GLIBCXX_HAVE_ISWBLANK */
-
-/* Define if LC_MESSAGES is available in <locale.h>. */
-#define _GLIBCXX_HAVE_LC_MESSAGES 1
-
-/* Define to 1 if you have the `ldexpf' function. */
-#define _GLIBCXX_HAVE_LDEXPF 1
-
-/* Define to 1 if you have the `ldexpl' function. */
-#define _GLIBCXX_HAVE_LDEXPL 1
-
-/* Define to 1 if you have the <libintl.h> header file. */
-/* #undef _GLIBCXX_HAVE_LIBINTL_H */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_AS */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_DATA */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_FSIZE */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_RSS */
-
-/* Only used in build directory testsuite_hooks.h. */
-/* #undef _GLIBCXX_HAVE_LIMIT_VMEM */
-
-/* Define if futex syscall is available. */
-/* #undef _GLIBCXX_HAVE_LINUX_FUTEX */
-
-/* Define to 1 if you have the <locale.h> header file. */
-#define _GLIBCXX_HAVE_LOCALE_H 1
-
-/* Define to 1 if you have the `log10f' function. */
-#define _GLIBCXX_HAVE_LOG10F 1
-
-/* Define to 1 if you have the `log10l' function. */
-/* #undef _GLIBCXX_HAVE_LOG10L */
-
-/* Define to 1 if you have the `logf' function. */
-#define _GLIBCXX_HAVE_LOGF 1
-
-/* Define to 1 if you have the `logl' function. */
-/* #undef _GLIBCXX_HAVE_LOGL */
-
-/* Define to 1 if you have the <machine/endian.h> header file. */
-/* #undef _GLIBCXX_HAVE_MACHINE_ENDIAN_H */
-
-/* Define to 1 if you have the <machine/param.h> header file. */
-/* #undef _GLIBCXX_HAVE_MACHINE_PARAM_H */
-
-/* Define if mbstate_t exists in wchar.h. */
-#define _GLIBCXX_HAVE_MBSTATE_T 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define _GLIBCXX_HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `modf' function. */
-#define _GLIBCXX_HAVE_MODF 1
-
-/* Define to 1 if you have the `modff' function. */
-#define _GLIBCXX_HAVE_MODFF 1
-
-/* Define to 1 if you have the `modfl' function. */
-/* #undef _GLIBCXX_HAVE_MODFL */
-
-/* Define to 1 if you have the <nan.h> header file. */
-/* #undef _GLIBCXX_HAVE_NAN_H */
-
-/* Define if poll is available in <poll.h>. */
-#define _GLIBCXX_HAVE_POLL 1
-
-/* Define to 1 if you have the `powf' function. */
-#define _GLIBCXX_HAVE_POWF 1
-
-/* Define to 1 if you have the `powl' function. */
-/* #undef _GLIBCXX_HAVE_POWL */
-
-/* Define to 1 if you have the `qfpclass' function. */
-/* #undef _GLIBCXX_HAVE_QFPCLASS */
-
-/* Define to 1 if you have the `setenv' function. */
-/* #undef _GLIBCXX_HAVE_SETENV */
-
-/* Define to 1 if you have the `sincos' function. */
-#define _GLIBCXX_HAVE_SINCOS 1
-
-/* Define to 1 if you have the `sincosf' function. */
-#define _GLIBCXX_HAVE_SINCOSF 1
-
-/* Define to 1 if you have the `sincosl' function. */
-#define _GLIBCXX_HAVE_SINCOSL 1
-
-/* Define to 1 if you have the `sinf' function. */
-#define _GLIBCXX_HAVE_SINF 1
-
-/* Define to 1 if you have the `sinhf' function. */
-#define _GLIBCXX_HAVE_SINHF 1
-
-/* Define to 1 if you have the `sinhl' function. */
-/* #undef _GLIBCXX_HAVE_SINHL */
-
-/* Define to 1 if you have the `sinl' function. */
-/* #undef _GLIBCXX_HAVE_SINL */
-
-/* Define to 1 if you have the `sqrtf' function. */
-#define _GLIBCXX_HAVE_SQRTF 1
-
-/* Define to 1 if you have the `sqrtl' function. */
-/* #undef _GLIBCXX_HAVE_SQRTL */
-
-/* Define to 1 if you have the <stdbool.h> header file. */
-/* #undef _GLIBCXX_HAVE_STDBOOL_H */
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define _GLIBCXX_HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define _GLIBCXX_HAVE_STDLIB_H 1
-
-/* Define if strerror_l is available in <string.h>. */
-/* #undef _GLIBCXX_HAVE_STRERROR_L */
-
-/* Define if strerror_r is available in <string.h>. */
-#define _GLIBCXX_HAVE_STRERROR_R 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define _GLIBCXX_HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define _GLIBCXX_HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strtof' function. */
-/* #undef _GLIBCXX_HAVE_STRTOF */
-
-/* Define to 1 if you have the `strtold' function. */
-/* #undef _GLIBCXX_HAVE_STRTOLD */
-
-/* Define if strxfrm_l is available in <string.h>. */
-/* #undef _GLIBCXX_HAVE_STRXFRM_L */
-
-/* Define to 1 if the target runtime linker supports binding the same symbol
-   to different versions. */
-/* #undef _GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT */
-
-/* Define to 1 if you have the <sys/filio.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_FILIO_H */
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#define _GLIBCXX_HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the <sys/ipc.h> header file. */
-#define _GLIBCXX_HAVE_SYS_IPC_H 1
-
-/* Define to 1 if you have the <sys/isa_defs.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_ISA_DEFS_H */
-
-/* Define to 1 if you have the <sys/machine.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_MACHINE_H */
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#define _GLIBCXX_HAVE_SYS_PARAM_H 1
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#define _GLIBCXX_HAVE_SYS_RESOURCE_H 1
-
-/* Define to 1 if you have the <sys/sem.h> header file. */
-/* #undef _GLIBCXX_HAVE_SYS_SEM_H */
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define _GLIBCXX_HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define _GLIBCXX_HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define _GLIBCXX_HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/uio.h> header file. */
-#define _GLIBCXX_HAVE_SYS_UIO_H 1
-
-/* Define if S_IFREG is available in <sys/stat.h>. */
-/* #undef _GLIBCXX_HAVE_S_IFREG */
-
-/* Define if S_IFREG is available in <sys/stat.h>. */
-#define _GLIBCXX_HAVE_S_ISREG 1
-
-/* Define to 1 if you have the `tanf' function. */
-#define _GLIBCXX_HAVE_TANF 1
-
-/* Define to 1 if you have the `tanhf' function. */
-#define _GLIBCXX_HAVE_TANHF 1
-
-/* Define to 1 if you have the `tanhl' function. */
-/* #undef _GLIBCXX_HAVE_TANHL */
-
-/* Define to 1 if you have the `tanl' function. */
-/* #undef _GLIBCXX_HAVE_TANL */
-
-/* Define to 1 if you have the <tgmath.h> header file. */
-/* #undef _GLIBCXX_HAVE_TGMATH_H */
-
-/* Define to 1 if the target supports thread-local storage. */
-/* #undef _GLIBCXX_HAVE_TLS */
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define _GLIBCXX_HAVE_UNISTD_H 1
-
-/* Defined if vfwscanf exists. */
-/* #undef _GLIBCXX_HAVE_VFWSCANF */
-
-/* Defined if vswscanf exists. */
-/* #undef _GLIBCXX_HAVE_VSWSCANF */
-
-/* Defined if vwscanf exists. */
-/* #undef _GLIBCXX_HAVE_VWSCANF */
-
-/* Define to 1 if you have the <wchar.h> header file. */
-#define _GLIBCXX_HAVE_WCHAR_H 1
-
-/* Defined if wcstof exists. */
-/* #undef _GLIBCXX_HAVE_WCSTOF */
-
-/* Define to 1 if you have the <wctype.h> header file. */
-#define _GLIBCXX_HAVE_WCTYPE_H 1
-
-/* Define if writev is available in <sys/uio.h>. */
-#define _GLIBCXX_HAVE_WRITEV 1
-
-/* Define to 1 if you have the `_acosf' function. */
-/* #undef _GLIBCXX_HAVE__ACOSF */
-
-/* Define to 1 if you have the `_acosl' function. */
-/* #undef _GLIBCXX_HAVE__ACOSL */
-
-/* Define to 1 if you have the `_asinf' function. */
-/* #undef _GLIBCXX_HAVE__ASINF */
-
-/* Define to 1 if you have the `_asinl' function. */
-/* #undef _GLIBCXX_HAVE__ASINL */
-
-/* Define to 1 if you have the `_atan2f' function. */
-/* #undef _GLIBCXX_HAVE__ATAN2F */
-
-/* Define to 1 if you have the `_atan2l' function. */
-/* #undef _GLIBCXX_HAVE__ATAN2L */
-
-/* Define to 1 if you have the `_atanf' function. */
-/* #undef _GLIBCXX_HAVE__ATANF */
-
-/* Define to 1 if you have the `_atanl' function. */
-/* #undef _GLIBCXX_HAVE__ATANL */
-
-/* Define to 1 if you have the `_ceilf' function. */
-/* #undef _GLIBCXX_HAVE__CEILF */
-
-/* Define to 1 if you have the `_ceill' function. */
-/* #undef _GLIBCXX_HAVE__CEILL */
-
-/* Define to 1 if you have the `_cosf' function. */
-/* #undef _GLIBCXX_HAVE__COSF */
-
-/* Define to 1 if you have the `_coshf' function. */
-/* #undef _GLIBCXX_HAVE__COSHF */
-
-/* Define to 1 if you have the `_coshl' function. */
-/* #undef _GLIBCXX_HAVE__COSHL */
-
-/* Define to 1 if you have the `_cosl' function. */
-/* #undef _GLIBCXX_HAVE__COSL */
-
-/* Define to 1 if you have the `_expf' function. */
-/* #undef _GLIBCXX_HAVE__EXPF */
-
-/* Define to 1 if you have the `_expl' function. */
-/* #undef _GLIBCXX_HAVE__EXPL */
-
-/* Define to 1 if you have the `_fabsf' function. */
-/* #undef _GLIBCXX_HAVE__FABSF */
-
-/* Define to 1 if you have the `_fabsl' function. */
-/* #undef _GLIBCXX_HAVE__FABSL */
-
-/* Define to 1 if you have the `_finite' function. */
-/* #undef _GLIBCXX_HAVE__FINITE */
-
-/* Define to 1 if you have the `_finitef' function. */
-/* #undef _GLIBCXX_HAVE__FINITEF */
-
-/* Define to 1 if you have the `_finitel' function. */
-/* #undef _GLIBCXX_HAVE__FINITEL */
-
-/* Define to 1 if you have the `_floorf' function. */
-/* #undef _GLIBCXX_HAVE__FLOORF */
-
-/* Define to 1 if you have the `_floorl' function. */
-/* #undef _GLIBCXX_HAVE__FLOORL */
-
-/* Define to 1 if you have the `_fmodf' function. */
-/* #undef _GLIBCXX_HAVE__FMODF */
-
-/* Define to 1 if you have the `_fmodl' function. */
-/* #undef _GLIBCXX_HAVE__FMODL */
-
-/* Define to 1 if you have the `_fpclass' function. */
-/* #undef _GLIBCXX_HAVE__FPCLASS */
-
-/* Define to 1 if you have the `_frexpf' function. */
-/* #undef _GLIBCXX_HAVE__FREXPF */
-
-/* Define to 1 if you have the `_frexpl' function. */
-/* #undef _GLIBCXX_HAVE__FREXPL */
-
-/* Define to 1 if you have the `_hypot' function. */
-/* #undef _GLIBCXX_HAVE__HYPOT */
-
-/* Define to 1 if you have the `_hypotf' function. */
-/* #undef _GLIBCXX_HAVE__HYPOTF */
-
-/* Define to 1 if you have the `_hypotl' function. */
-/* #undef _GLIBCXX_HAVE__HYPOTL */
-
-/* Define to 1 if you have the `_isinf' function. */
-/* #undef _GLIBCXX_HAVE__ISINF */
-
-/* Define to 1 if you have the `_isinff' function. */
-/* #undef _GLIBCXX_HAVE__ISINFF */
-
-/* Define to 1 if you have the `_isinfl' function. */
-/* #undef _GLIBCXX_HAVE__ISINFL */
-
-/* Define to 1 if you have the `_isnan' function. */
-/* #undef _GLIBCXX_HAVE__ISNAN */
-
-/* Define to 1 if you have the `_isnanf' function. */
-/* #undef _GLIBCXX_HAVE__ISNANF */
-
-/* Define to 1 if you have the `_isnanl' function. */
-/* #undef _GLIBCXX_HAVE__ISNANL */
-
-/* Define to 1 if you have the `_ldexpf' function. */
-/* #undef _GLIBCXX_HAVE__LDEXPF */
-
-/* Define to 1 if you have the `_ldexpl' function. */
-/* #undef _GLIBCXX_HAVE__LDEXPL */
-
-/* Define to 1 if you have the `_log10f' function. */
-/* #undef _GLIBCXX_HAVE__LOG10F */
-
-/* Define to 1 if you have the `_log10l' function. */
-/* #undef _GLIBCXX_HAVE__LOG10L */
-
-/* Define to 1 if you have the `_logf' function. */
-/* #undef _GLIBCXX_HAVE__LOGF */
-
-/* Define to 1 if you have the `_logl' function. */
-/* #undef _GLIBCXX_HAVE__LOGL */
-
-/* Define to 1 if you have the `_modf' function. */
-/* #undef _GLIBCXX_HAVE__MODF */
-
-/* Define to 1 if you have the `_modff' function. */
-/* #undef _GLIBCXX_HAVE__MODFF */
-
-/* Define to 1 if you have the `_modfl' function. */
-/* #undef _GLIBCXX_HAVE__MODFL */
-
-/* Define to 1 if you have the `_powf' function. */
-/* #undef _GLIBCXX_HAVE__POWF */
-
-/* Define to 1 if you have the `_powl' function. */
-/* #undef _GLIBCXX_HAVE__POWL */
-
-/* Define to 1 if you have the `_qfpclass' function. */
-/* #undef _GLIBCXX_HAVE__QFPCLASS */
-
-/* Define to 1 if you have the `_sincos' function. */
-/* #undef _GLIBCXX_HAVE__SINCOS */
-
-/* Define to 1 if you have the `_sincosf' function. */
-/* #undef _GLIBCXX_HAVE__SINCOSF */
-
-/* Define to 1 if you have the `_sincosl' function. */
-/* #undef _GLIBCXX_HAVE__SINCOSL */
-
-/* Define to 1 if you have the `_sinf' function. */
-/* #undef _GLIBCXX_HAVE__SINF */
-
-/* Define to 1 if you have the `_sinhf' function. */
-/* #undef _GLIBCXX_HAVE__SINHF */
-
-/* Define to 1 if you have the `_sinhl' function. */
-/* #undef _GLIBCXX_HAVE__SINHL */
-
-/* Define to 1 if you have the `_sinl' function. */
-/* #undef _GLIBCXX_HAVE__SINL */
-
-/* Define to 1 if you have the `_sqrtf' function. */
-/* #undef _GLIBCXX_HAVE__SQRTF */
-
-/* Define to 1 if you have the `_sqrtl' function. */
-/* #undef _GLIBCXX_HAVE__SQRTL */
-
-/* Define to 1 if you have the `_tanf' function. */
-/* #undef _GLIBCXX_HAVE__TANF */
-
-/* Define to 1 if you have the `_tanhf' function. */
-/* #undef _GLIBCXX_HAVE__TANHF */
-
-/* Define to 1 if you have the `_tanhl' function. */
-/* #undef _GLIBCXX_HAVE__TANHL */
-
-/* Define to 1 if you have the `_tanl' function. */
-/* #undef _GLIBCXX_HAVE__TANL */
-
-/* Define as const if the declaration of iconv() needs const. */
-/* #undef _GLIBCXX_ICONV_CONST */
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
-#define LT_OBJDIR ".libs/"
-
-/* Name of package */
-/* #undef _GLIBCXX_PACKAGE */
-
-/* Define to the address where bug reports for this package should be sent. */
-#define _GLIBCXX_PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define _GLIBCXX_PACKAGE_NAME "package-unused"
-
-/* Define to the full name and version of this package. */
-#define _GLIBCXX_PACKAGE_STRING "package-unused version-unused"
-
-/* Define to the one symbol short name of this package. */
-#define _GLIBCXX_PACKAGE_TARNAME "libstdc++"
-
-/* Define to the home page for this package. */
-#define _GLIBCXX_PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define _GLIBCXX_PACKAGE__GLIBCXX_VERSION "version-unused"
-
-/* The size of `char', as computed by sizeof. */
-/* #undef SIZEOF_CHAR */
-
-/* The size of `int', as computed by sizeof. */
-/* #undef SIZEOF_INT */
-
-/* The size of `long', as computed by sizeof. */
-/* #undef SIZEOF_LONG */
-
-/* The size of `short', as computed by sizeof. */
-/* #undef SIZEOF_SHORT */
-
-/* The size of `void *', as computed by sizeof. */
-/* #undef SIZEOF_VOID_P */
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Version number of package */
-/* #undef _GLIBCXX_VERSION */
-
-/* Define if builtin atomic operations for bool are supported on this host. */
-#define _GLIBCXX_ATOMIC_BUILTINS_1 1
-
-/* Define if builtin atomic operations for short are supported on this host.
-   */
-#define _GLIBCXX_ATOMIC_BUILTINS_2 1
-
-/* Define if builtin atomic operations for int are supported on this host. */
-#define _GLIBCXX_ATOMIC_BUILTINS_4 1
-
-/* Define if builtin atomic operations for long long are supported on this
-   host. */
-/* #undef _GLIBCXX_ATOMIC_BUILTINS_8 */
-
-/* Define to use concept checking code from the boost libraries. */
-/* #undef _GLIBCXX_CONCEPT_CHECKS */
-
-/* Define if a fully dynamic basic_string is wanted. */
-/* #undef _GLIBCXX_FULLY_DYNAMIC_STRING */
-
-/* Define if gthreads library is available. */
-/* #undef _GLIBCXX_HAS_GTHREADS */
-
-/* Define to 1 if a full hosted library is built, or 0 if freestanding. */
-#define _GLIBCXX_HOSTED 0
-
-/* Define if compatibility should be provided for -mlong-double-64. */
-
-/* Define if ptrdiff_t is int. */
-#define _GLIBCXX_PTRDIFF_T_IS_INT 1
-
-/* Define if using setrlimit to set resource limits during "make check" */
-/* #undef _GLIBCXX_RES_LIMITS */
-
-/* Define if size_t is unsigned int. */
-#define _GLIBCXX_SIZE_T_IS_UINT 1
-
-/* Define if the compiler is configured for setjmp/longjmp exceptions. */
-/* #undef _GLIBCXX_SJLJ_EXCEPTIONS */
-
-/* Define to the value of the EOF integer constant. */
-#define _GLIBCXX_STDIO_EOF -1
-
-/* Define to the value of the SEEK_CUR integer constant. */
-#define _GLIBCXX_STDIO_SEEK_CUR 1
-
-/* Define to the value of the SEEK_END integer constant. */
-#define _GLIBCXX_STDIO_SEEK_END 2
-
-/* Define to use symbol versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER */
-
-/* Define to use darwin versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_DARWIN */
-
-/* Define to use GNU versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_GNU */
-
-/* Define to use GNU namespace versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_GNU_NAMESPACE */
-
-/* Define to use Sun versioning in the shared library. */
-/* #undef _GLIBCXX_SYMVER_SUN */
-
-/* Define if C99 functions or macros from <wchar.h>, <math.h>, <complex.h>,
-   <stdio.h>, and <stdlib.h> can be used or exposed. */
-/* #undef _GLIBCXX_USE_C99 */
-
-/* Define if C99 functions in <complex.h> should be used in <complex>. Using
-   compiler builtins for these functions requires corresponding C99 library
-   functions to be present. */
-/* #undef _GLIBCXX_USE_C99_COMPLEX */
-
-/* Define if C99 functions in <complex.h> should be used in <tr1/complex>.
-   Using compiler builtins for these functions requires corresponding C99
-   library functions to be present. */
-/* #undef _GLIBCXX_USE_C99_COMPLEX_TR1 */
-
-/* Define if C99 functions in <ctype.h> should be imported in <tr1/cctype> in
-   namespace std::tr1. */
-#define _GLIBCXX_USE_C99_CTYPE_TR1 1
-
-/* Define if C99 functions in <fenv.h> should be imported in <tr1/cfenv> in
-   namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_FENV_TR1 */
-
-/* Define if C99 functions in <inttypes.h> should be imported in
-   <tr1/cinttypes> in namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_INTTYPES_TR1 */
-
-/* Define if wchar_t C99 functions in <inttypes.h> should be imported in
-   <tr1/cinttypes> in namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1 */
-
-/* Define if C99 functions or macros in <math.h> should be imported in <cmath>
-   in namespace std. */
-/* #undef _GLIBCXX_USE_C99_MATH */
-
-/* Define if C99 functions or macros in <math.h> should be imported in
-   <tr1/cmath> in namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_MATH_TR1 */
-
-/* Define if C99 types in <stdint.h> should be imported in <tr1/cstdint> in
-   namespace std::tr1. */
-/* #undef _GLIBCXX_USE_C99_STDINT_TR1 */
-
-/* Defined if clock_gettime has monotonic clock support. */
-/* #undef _GLIBCXX_USE_CLOCK_MONOTONIC */
-
-/* Defined if clock_gettime has realtime clock support. */
-/* #undef _GLIBCXX_USE_CLOCK_REALTIME */
-
-/* Define if ISO/IEC TR 24733 decimal floating point types are supported on
-   this host. */
-/* #undef _GLIBCXX_USE_DECIMAL_FLOAT */
-
-/* Defined if gettimeofday is available. */
-#define _GLIBCXX_USE_GETTIMEOFDAY 1
-
-/* Define if LFS support is available. */
-/* #undef _GLIBCXX_USE_LFS */
-
-/* Define if code specialized for long long should be used. */
-#define _GLIBCXX_USE_LONG_LONG 1
-
-/* Defined if nanosleep is available. */
-/* #undef _GLIBCXX_USE_NANOSLEEP */
-
-/* Define if NLS translations are to be used. */
-/* #undef _GLIBCXX_USE_NLS */
-
-/* Define if /dev/random and /dev/urandom are available for the random_device
-   of TR1 (Chapter 5.1). */
-#define _GLIBCXX_USE_RANDOM_TR1 1
-
-/* Defined if sched_yield is available. */
-/* #undef _GLIBCXX_USE_SCHED_YIELD */
-
-/* Define if code specialized for wchar_t should be used. */
-/* #undef _GLIBCXX_USE_WCHAR_T */
-
-#if defined (_GLIBCXX_HAVE__ACOSF) && ! defined (_GLIBCXX_HAVE_ACOSF)
-# define _GLIBCXX_HAVE_ACOSF 1
-# define acosf _acosf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ACOSL) && ! defined (_GLIBCXX_HAVE_ACOSL)
-# define _GLIBCXX_HAVE_ACOSL 1
-# define acosl _acosl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ASINF) && ! defined (_GLIBCXX_HAVE_ASINF)
-# define _GLIBCXX_HAVE_ASINF 1
-# define asinf _asinf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ASINL) && ! defined (_GLIBCXX_HAVE_ASINL)
-# define _GLIBCXX_HAVE_ASINL 1
-# define asinl _asinl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATAN2F) && ! defined (_GLIBCXX_HAVE_ATAN2F)
-# define _GLIBCXX_HAVE_ATAN2F 1
-# define atan2f _atan2f
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATAN2L) && ! defined (_GLIBCXX_HAVE_ATAN2L)
-# define _GLIBCXX_HAVE_ATAN2L 1
-# define atan2l _atan2l
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATANF) && ! defined (_GLIBCXX_HAVE_ATANF)
-# define _GLIBCXX_HAVE_ATANF 1
-# define atanf _atanf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ATANL) && ! defined (_GLIBCXX_HAVE_ATANL)
-# define _GLIBCXX_HAVE_ATANL 1
-# define atanl _atanl
-#endif
-
-#if defined (_GLIBCXX_HAVE__CEILF) && ! defined (_GLIBCXX_HAVE_CEILF)
-# define _GLIBCXX_HAVE_CEILF 1
-# define ceilf _ceilf
-#endif
-
-#if defined (_GLIBCXX_HAVE__CEILL) && ! defined (_GLIBCXX_HAVE_CEILL)
-# define _GLIBCXX_HAVE_CEILL 1
-# define ceill _ceill
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSF) && ! defined (_GLIBCXX_HAVE_COSF)
-# define _GLIBCXX_HAVE_COSF 1
-# define cosf _cosf
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSHF) && ! defined (_GLIBCXX_HAVE_COSHF)
-# define _GLIBCXX_HAVE_COSHF 1
-# define coshf _coshf
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSHL) && ! defined (_GLIBCXX_HAVE_COSHL)
-# define _GLIBCXX_HAVE_COSHL 1
-# define coshl _coshl
-#endif
-
-#if defined (_GLIBCXX_HAVE__COSL) && ! defined (_GLIBCXX_HAVE_COSL)
-# define _GLIBCXX_HAVE_COSL 1
-# define cosl _cosl
-#endif
-
-#if defined (_GLIBCXX_HAVE__EXPF) && ! defined (_GLIBCXX_HAVE_EXPF)
-# define _GLIBCXX_HAVE_EXPF 1
-# define expf _expf
-#endif
-
-#if defined (_GLIBCXX_HAVE__EXPL) && ! defined (_GLIBCXX_HAVE_EXPL)
-# define _GLIBCXX_HAVE_EXPL 1
-# define expl _expl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FABSF) && ! defined (_GLIBCXX_HAVE_FABSF)
-# define _GLIBCXX_HAVE_FABSF 1
-# define fabsf _fabsf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FABSL) && ! defined (_GLIBCXX_HAVE_FABSL)
-# define _GLIBCXX_HAVE_FABSL 1
-# define fabsl _fabsl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FINITE) && ! defined (_GLIBCXX_HAVE_FINITE)
-# define _GLIBCXX_HAVE_FINITE 1
-# define finite _finite
-#endif
-
-#if defined (_GLIBCXX_HAVE__FINITEF) && ! defined (_GLIBCXX_HAVE_FINITEF)
-# define _GLIBCXX_HAVE_FINITEF 1
-# define finitef _finitef
-#endif
-
-#if defined (_GLIBCXX_HAVE__FINITEL) && ! defined (_GLIBCXX_HAVE_FINITEL)
-# define _GLIBCXX_HAVE_FINITEL 1
-# define finitel _finitel
-#endif
-
-#if defined (_GLIBCXX_HAVE__FLOORF) && ! defined (_GLIBCXX_HAVE_FLOORF)
-# define _GLIBCXX_HAVE_FLOORF 1
-# define floorf _floorf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FLOORL) && ! defined (_GLIBCXX_HAVE_FLOORL)
-# define _GLIBCXX_HAVE_FLOORL 1
-# define floorl _floorl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FMODF) && ! defined (_GLIBCXX_HAVE_FMODF)
-# define _GLIBCXX_HAVE_FMODF 1
-# define fmodf _fmodf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FMODL) && ! defined (_GLIBCXX_HAVE_FMODL)
-# define _GLIBCXX_HAVE_FMODL 1
-# define fmodl _fmodl
-#endif
-
-#if defined (_GLIBCXX_HAVE__FPCLASS) && ! defined (_GLIBCXX_HAVE_FPCLASS)
-# define _GLIBCXX_HAVE_FPCLASS 1
-# define fpclass _fpclass
-#endif
-
-#if defined (_GLIBCXX_HAVE__FREXPF) && ! defined (_GLIBCXX_HAVE_FREXPF)
-# define _GLIBCXX_HAVE_FREXPF 1
-# define frexpf _frexpf
-#endif
-
-#if defined (_GLIBCXX_HAVE__FREXPL) && ! defined (_GLIBCXX_HAVE_FREXPL)
-# define _GLIBCXX_HAVE_FREXPL 1
-# define frexpl _frexpl
-#endif
-
-#if defined (_GLIBCXX_HAVE__HYPOT) && ! defined (_GLIBCXX_HAVE_HYPOT)
-# define _GLIBCXX_HAVE_HYPOT 1
-# define hypot _hypot
-#endif
-
-#if defined (_GLIBCXX_HAVE__HYPOTF) && ! defined (_GLIBCXX_HAVE_HYPOTF)
-# define _GLIBCXX_HAVE_HYPOTF 1
-# define hypotf _hypotf
-#endif
-
-#if defined (_GLIBCXX_HAVE__HYPOTL) && ! defined (_GLIBCXX_HAVE_HYPOTL)
-# define _GLIBCXX_HAVE_HYPOTL 1
-# define hypotl _hypotl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISINF) && ! defined (_GLIBCXX_HAVE_ISINF)
-# define _GLIBCXX_HAVE_ISINF 1
-# define isinf _isinf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISINFF) && ! defined (_GLIBCXX_HAVE_ISINFF)
-# define _GLIBCXX_HAVE_ISINFF 1
-# define isinff _isinff
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISINFL) && ! defined (_GLIBCXX_HAVE_ISINFL)
-# define _GLIBCXX_HAVE_ISINFL 1
-# define isinfl _isinfl
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISNAN) && ! defined (_GLIBCXX_HAVE_ISNAN)
-# define _GLIBCXX_HAVE_ISNAN 1
-# define isnan _isnan
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISNANF) && ! defined (_GLIBCXX_HAVE_ISNANF)
-# define _GLIBCXX_HAVE_ISNANF 1
-# define isnanf _isnanf
-#endif
-
-#if defined (_GLIBCXX_HAVE__ISNANL) && ! defined (_GLIBCXX_HAVE_ISNANL)
-# define _GLIBCXX_HAVE_ISNANL 1
-# define isnanl _isnanl
-#endif
-
-#if defined (_GLIBCXX_HAVE__LDEXPF) && ! defined (_GLIBCXX_HAVE_LDEXPF)
-# define _GLIBCXX_HAVE_LDEXPF 1
-# define ldexpf _ldexpf
-#endif
-
-#if defined (_GLIBCXX_HAVE__LDEXPL) && ! defined (_GLIBCXX_HAVE_LDEXPL)
-# define _GLIBCXX_HAVE_LDEXPL 1
-# define ldexpl _ldexpl
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOG10F) && ! defined (_GLIBCXX_HAVE_LOG10F)
-# define _GLIBCXX_HAVE_LOG10F 1
-# define log10f _log10f
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOG10L) && ! defined (_GLIBCXX_HAVE_LOG10L)
-# define _GLIBCXX_HAVE_LOG10L 1
-# define log10l _log10l
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOGF) && ! defined (_GLIBCXX_HAVE_LOGF)
-# define _GLIBCXX_HAVE_LOGF 1
-# define logf _logf
-#endif
-
-#if defined (_GLIBCXX_HAVE__LOGL) && ! defined (_GLIBCXX_HAVE_LOGL)
-# define _GLIBCXX_HAVE_LOGL 1
-# define logl _logl
-#endif
-
-#if defined (_GLIBCXX_HAVE__MODF) && ! defined (_GLIBCXX_HAVE_MODF)
-# define _GLIBCXX_HAVE_MODF 1
-# define modf _modf
-#endif
-
-#if defined (_GLIBCXX_HAVE__MODFF) && ! defined (_GLIBCXX_HAVE_MODFF)
-# define _GLIBCXX_HAVE_MODFF 1
-# define modff _modff
-#endif
-
-#if defined (_GLIBCXX_HAVE__MODFL) && ! defined (_GLIBCXX_HAVE_MODFL)
-# define _GLIBCXX_HAVE_MODFL 1
-# define modfl _modfl
-#endif
-
-#if defined (_GLIBCXX_HAVE__POWF) && ! defined (_GLIBCXX_HAVE_POWF)
-# define _GLIBCXX_HAVE_POWF 1
-# define powf _powf
-#endif
-
-#if defined (_GLIBCXX_HAVE__POWL) && ! defined (_GLIBCXX_HAVE_POWL)
-# define _GLIBCXX_HAVE_POWL 1
-# define powl _powl
-#endif
-
-#if defined (_GLIBCXX_HAVE__QFPCLASS) && ! defined (_GLIBCXX_HAVE_QFPCLASS)
-# define _GLIBCXX_HAVE_QFPCLASS 1
-# define qfpclass _qfpclass
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINCOS) && ! defined (_GLIBCXX_HAVE_SINCOS)
-# define _GLIBCXX_HAVE_SINCOS 1
-# define sincos _sincos
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINCOSF) && ! defined (_GLIBCXX_HAVE_SINCOSF)
-# define _GLIBCXX_HAVE_SINCOSF 1
-# define sincosf _sincosf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINCOSL) && ! defined (_GLIBCXX_HAVE_SINCOSL)
-# define _GLIBCXX_HAVE_SINCOSL 1
-# define sincosl _sincosl
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINF) && ! defined (_GLIBCXX_HAVE_SINF)
-# define _GLIBCXX_HAVE_SINF 1
-# define sinf _sinf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINHF) && ! defined (_GLIBCXX_HAVE_SINHF)
-# define _GLIBCXX_HAVE_SINHF 1
-# define sinhf _sinhf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINHL) && ! defined (_GLIBCXX_HAVE_SINHL)
-# define _GLIBCXX_HAVE_SINHL 1
-# define sinhl _sinhl
-#endif
-
-#if defined (_GLIBCXX_HAVE__SINL) && ! defined (_GLIBCXX_HAVE_SINL)
-# define _GLIBCXX_HAVE_SINL 1
-# define sinl _sinl
-#endif
-
-#if defined (_GLIBCXX_HAVE__SQRTF) && ! defined (_GLIBCXX_HAVE_SQRTF)
-# define _GLIBCXX_HAVE_SQRTF 1
-# define sqrtf _sqrtf
-#endif
-
-#if defined (_GLIBCXX_HAVE__SQRTL) && ! defined (_GLIBCXX_HAVE_SQRTL)
-# define _GLIBCXX_HAVE_SQRTL 1
-# define sqrtl _sqrtl
-#endif
-
-#if defined (_GLIBCXX_HAVE__STRTOF) && ! defined (_GLIBCXX_HAVE_STRTOF)
-# define _GLIBCXX_HAVE_STRTOF 1
-# define strtof _strtof
-#endif
-
-#if defined (_GLIBCXX_HAVE__STRTOLD) && ! defined (_GLIBCXX_HAVE_STRTOLD)
-# define _GLIBCXX_HAVE_STRTOLD 1
-# define strtold _strtold
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANF) && ! defined (_GLIBCXX_HAVE_TANF)
-# define _GLIBCXX_HAVE_TANF 1
-# define tanf _tanf
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANHF) && ! defined (_GLIBCXX_HAVE_TANHF)
-# define _GLIBCXX_HAVE_TANHF 1
-# define tanhf _tanhf
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANHL) && ! defined (_GLIBCXX_HAVE_TANHL)
-# define _GLIBCXX_HAVE_TANHL 1
-# define tanhl _tanhl
-#endif
-
-#if defined (_GLIBCXX_HAVE__TANL) && ! defined (_GLIBCXX_HAVE_TANL)
-# define _GLIBCXX_HAVE_TANL 1
-# define tanl _tanl
-#endif
-
-#endif // _GLIBCXX_CXX_CONFIG_H
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/thumb/bits/cpu_defines.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/thumb/bits/cpu_defines.h
deleted file mode 100644
index c1b9863..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/thumb/bits/cpu_defines.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Specific definitions for generic platforms  -*- C++ -*-
-
-// Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/cpu_defines.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{iosfwd}
- */
-
-#ifndef _GLIBCXX_CPU_DEFINES
-#define _GLIBCXX_CPU_DEFINES 1
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/thumb/bits/cxxabi_tweaks.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/thumb/bits/cxxabi_tweaks.h
deleted file mode 100644
index 2ac349d..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/thumb/bits/cxxabi_tweaks.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Control various target specific ABI tweaks.  ARM version.
-
-// Copyright (C) 2004, 2006, 2008, 2009, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/cxxabi_tweaks.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{cxxabi.h}
- */
-
-#ifndef _CXXABI_TWEAKS_H
-#define _CXXABI_TWEAKS_H 1
-
-#ifdef __cplusplus
-namespace __cxxabiv1
-{
-  extern "C" 
-  {
-#endif
-
-#ifdef __ARM_EABI__
-  // The ARM EABI uses the least significant bit of a 32-bit
-  // guard variable.  */
-#define _GLIBCXX_GUARD_TEST(x) ((*(x) & 1) != 0)
-#define _GLIBCXX_GUARD_SET(x) *(x) = 1
-#define _GLIBCXX_GUARD_BIT 1
-#define _GLIBCXX_GUARD_PENDING_BIT __guard_test_bit (1, 1)
-#define _GLIBCXX_GUARD_WAITING_BIT __guard_test_bit (2, 1)
-  typedef int __guard;
-
-  // We also want the element size in array cookies.
-#define _GLIBCXX_ELTSIZE_IN_COOKIE 1
-  
-  // __cxa_vec_ctor should return a pointer to the array.
-  typedef void * __cxa_vec_ctor_return_type;
-#define _GLIBCXX_CXA_VEC_CTOR_RETURN(x) return x
-  // Constructors and destructors return the "this" pointer.
-  typedef void * __cxa_cdtor_return_type;
-
-#else // __ARM_EABI__
-
-  // The generic ABI uses the first byte of a 64-bit guard variable.
-#define _GLIBCXX_GUARD_TEST(x) (*(char *) (x) != 0)
-#define _GLIBCXX_GUARD_SET(x) *(char *) (x) = 1
-#define _GLIBCXX_GUARD_BIT __guard_test_bit (0, 1)
-#define _GLIBCXX_GUARD_PENDING_BIT __guard_test_bit (1, 1)
-#define _GLIBCXX_GUARD_WAITING_BIT __guard_test_bit (2, 1)
-  __extension__ typedef int __guard __attribute__((mode (__DI__)));
-
-  // __cxa_vec_ctor has void return type.
-  typedef void __cxa_vec_ctor_return_type;
-#define _GLIBCXX_CXA_VEC_CTOR_RETURN(x) return
-  // Constructors and destructors do not return a value.
-  typedef void __cxa_cdtor_return_type;
-
-#endif //!__ARM_EABI__
-
-#ifdef __cplusplus
-  }
-} // namespace __cxxabiv1
-#endif
-
-#endif 
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/thumb/bits/os_defines.h b/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/thumb/bits/os_defines.h
deleted file mode 100644
index 0c8f77d..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/arm-linux-androideabi/thumb/bits/os_defines.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Specific definitions for Bionic  -*- C++ -*-
-
-// Copyright (C) 2010 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/os_defines.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{iosfwd}
- */
-
-#ifndef _GLIBCXX_OS_DEFINES
-#define _GLIBCXX_OS_DEFINES 1
-
-// System-specific #define, typedefs, corrections, etc, go here.  This
-// file will come before all others.
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/bits/cxxabi_forced.h b/arm-linux-androideabi/include/c++/4.6.x-google/bits/cxxabi_forced.h
deleted file mode 100644
index c45ce79..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/bits/cxxabi_forced.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// cxxabi.h subset for cancellation -*- C++ -*-
-  
-// Copyright (C) 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
-//
-// 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/>.
-
-/** @file bits/cxxabi_forced.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{cxxabi.h}
- */
-
-#ifndef _CXXABI_FORCED_H
-#define _CXXABI_FORCED_H 1
-
-#pragma GCC system_header
-
-#pragma GCC visibility push(default)
-
-#ifdef __cplusplus
-namespace __cxxabiv1
-{  
-  /** 
-   *  @brief Thrown as part of forced unwinding.
-   *  @ingroup exceptions
-   *
-   *  A magic placeholder class that can be caught by reference to
-   *  recognize forced unwinding.
-   */
-  class __forced_unwind
-  {
-    virtual ~__forced_unwind() throw();
-
-    // Prevent catch by value.
-    virtual void __pure_dummy() = 0; 
-  };
-}
-#endif // __cplusplus
-
-#pragma GCC visibility pop
-
-#endif // __CXXABI_FORCED_H 
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/bits/exception_defines.h b/arm-linux-androideabi/include/c++/4.6.x-google/bits/exception_defines.h
deleted file mode 100644
index 269937c..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/bits/exception_defines.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// -fno-exceptions Support -*- C++ -*-
-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2006, 2007, 2008, 2009,
-// 2011
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/exception_defines.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{exception}
- */
-
-#ifndef _EXCEPTION_DEFINES_H
-#define _EXCEPTION_DEFINES_H 1
-
-#ifndef __EXCEPTIONS
-// Iff -fno-exceptions, transform error handling code to work without it.
-# define __try      if (true)
-# define __catch(X) if (false)
-# define __throw_exception_again
-#else
-// Else proceed normally.
-# define __try      try
-# define __catch(X) catch(X)
-# define __throw_exception_again throw
-#endif
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/bits/exception_ptr.h b/arm-linux-androideabi/include/c++/4.6.x-google/bits/exception_ptr.h
deleted file mode 100644
index 26117cd..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/bits/exception_ptr.h
+++ /dev/null
@@ -1,191 +0,0 @@
-// Exception Handling support header (exception_ptr class) for -*- C++ -*-
-
-// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation
-//
-// 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/>.
-
-/** @file bits/exception_ptr.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{exception}
- */
-
-#ifndef _EXCEPTION_PTR_H
-#define _EXCEPTION_PTR_H
-
-#pragma GCC visibility push(default)
-
-#include <bits/c++config.h>
-#include <bits/exception_defines.h>
-
-#if !defined(_GLIBCXX_ATOMIC_BUILTINS_4)
-#  error This platform does not support exception propagation.
-#endif
-
-extern "C++" {
-
-namespace std 
-{
-  /**
-   * @addtogroup exceptions
-   * @{
-   */
-  namespace __exception_ptr
-  {
-    class exception_ptr;
-  }
-
-  using __exception_ptr::exception_ptr;
-
-  /** Obtain an exception_ptr to the currently handled exception. If there
-   *  is none, or the currently handled exception is foreign, return the null
-   *  value.
-   */
-  exception_ptr current_exception() throw();
-
-  /// Throw the object pointed to by the exception_ptr.
-  void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__));
-
-  namespace __exception_ptr
-  {
-    /**
-     *  @brief An opaque pointer to an arbitrary exception.
-     *  @ingroup exceptions
-     */
-    class exception_ptr
-    {
-      void* _M_exception_object;
-
-      explicit exception_ptr(void* __e) throw();
-
-      void _M_addref() throw();
-      void _M_release() throw();
-
-      void *_M_get() const throw() __attribute__ ((__pure__));
-
-      friend exception_ptr std::current_exception() throw();
-      friend void std::rethrow_exception(exception_ptr);
-
-    public:
-      exception_ptr() throw();
-
-      exception_ptr(const exception_ptr&) throw();
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      exception_ptr(nullptr_t) throw()
-      : _M_exception_object(0)
-      { }
-
-      exception_ptr(exception_ptr&& __o) throw()
-      : _M_exception_object(__o._M_exception_object)
-      { __o._M_exception_object = 0; }
-#else
-      typedef void (exception_ptr::*__safe_bool)();
-
-      // For construction from nullptr or 0.
-      exception_ptr(__safe_bool) throw();
-#endif
-
-      exception_ptr& 
-      operator=(const exception_ptr&) throw();
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      exception_ptr& 
-      operator=(exception_ptr&& __o) throw()
-      {
-        exception_ptr(static_cast<exception_ptr&&>(__o)).swap(*this);
-        return *this;
-      }
-#endif
-
-      ~exception_ptr() throw();
-
-      void 
-      swap(exception_ptr&) throw();
-
-#ifdef _GLIBCXX_EH_PTR_COMPAT
-      // Retained for compatibility with CXXABI_1.3.
-      void _M_safe_bool_dummy() throw() __attribute__ ((__const__));
-      bool operator!() const throw() __attribute__ ((__pure__));
-      operator __safe_bool() const throw();
-#endif
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      explicit operator bool() const
-      { return _M_exception_object; }
-#endif
-
-      friend bool 
-      operator==(const exception_ptr&, const exception_ptr&) throw() 
-      __attribute__ ((__pure__));
-
-      const class type_info*
-      __cxa_exception_type() const throw() __attribute__ ((__pure__));
-    };
-
-    bool 
-    operator==(const exception_ptr&, const exception_ptr&) throw() 
-    __attribute__ ((__pure__));
-
-    bool 
-    operator!=(const exception_ptr&, const exception_ptr&) throw() 
-    __attribute__ ((__pure__));
-
-    inline void
-    swap(exception_ptr& __lhs, exception_ptr& __rhs)
-    { __lhs.swap(__rhs); }
-
-  } // namespace __exception_ptr
-
-
-  /// Obtain an exception_ptr pointing to a copy of the supplied object.
-  template<typename _Ex>
-    exception_ptr 
-    copy_exception(_Ex __ex) throw()
-    {
-      __try
-	{
-#ifdef __EXCEPTIONS
-	  throw __ex;
-#endif
-	}
-      __catch(...)
-	{
-	  return current_exception();
-	}
-    }
-
-  // _GLIBCXX_RESOLVE_LIB_DEFECTS
-  // 1130. copy_exception name misleading
-  /// Obtain an exception_ptr pointing to a copy of the supplied object.
-  template<typename _Ex>
-    exception_ptr 
-    make_exception_ptr(_Ex __ex) throw()
-    { return std::copy_exception<_Ex>(__ex); }
-
-  // @} group exceptions
-} // namespace std
-
-} // extern "C++"
-
-#pragma GCC visibility pop
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/bits/hash_bytes.h b/arm-linux-androideabi/include/c++/4.6.x-google/bits/hash_bytes.h
deleted file mode 100644
index 2f0c0ea..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/bits/hash_bytes.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// Declarations for hash functions. -*- C++ -*-
-
-// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/hash_bytes.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{functional}
- */
-
-#ifndef _HASH_BYTES_H
-#define _HASH_BYTES_H 1
-
-#pragma GCC system_header
-
-#include <bits/c++config.h>
-
-namespace std
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
-  // Hash function implementation for the nontrivial specialization.
-  // All of them are based on a primitive that hashes a pointer to a
-  // byte array. The actual hash algorithm is not guaranteed to stay
-  // the same from release to release -- it may be updated or tuned to
-  // improve hash quality or speed.
-  size_t
-  _Hash_bytes(const void* __ptr, size_t __len, size_t __seed);
-
-  // A similar hash primitive, using the FNV hash algorithm. This
-  // algorithm is guaranteed to stay the same from release to release.
-  // (although it might not produce the same values on different
-  // machines.)
-  size_t
-  _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed);
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/bits/nested_exception.h b/arm-linux-androideabi/include/c++/4.6.x-google/bits/nested_exception.h
deleted file mode 100644
index d4804bb..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/bits/nested_exception.h
+++ /dev/null
@@ -1,166 +0,0 @@
-// Nested Exception support header (nested_exception class) for -*- C++ -*-
-
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file bits/nested_exception.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{exception}
- */
-
-#ifndef _GLIBCXX_NESTED_EXCEPTION_H
-#define _GLIBCXX_NESTED_EXCEPTION_H 1
-
-#pragma GCC visibility push(default)
-
-#ifndef __GXX_EXPERIMENTAL_CXX0X__
-# include <bits/c++0x_warning.h>
-#else
-
-#include <bits/c++config.h>
-
-#if !defined(_GLIBCXX_ATOMIC_BUILTINS_4)
-#  error This platform does not support exception propagation.
-#endif
-
-extern "C++" {
-
-namespace std
-{
-  /**
-   * @addtogroup exceptions
-   * @{
-   */
-
-  /// Exception class with exception_ptr data member.
-  class nested_exception
-  {
-    exception_ptr _M_ptr;
-
-  public:
-    nested_exception() throw() : _M_ptr(current_exception()) { }
-
-    nested_exception(const nested_exception&) = default;
-
-    nested_exception& operator=(const nested_exception&) = default;
-
-    virtual ~nested_exception();
-
-    void
-    rethrow_nested() const __attribute__ ((__noreturn__))
-    { rethrow_exception(_M_ptr); }
-
-    exception_ptr
-    nested_ptr() const
-    { return _M_ptr; }
-  };
-
-  template<typename _Except>
-    struct _Nested_exception : public _Except, public nested_exception
-    {
-      explicit _Nested_exception(_Except&& __ex)
-      : _Except(static_cast<_Except&&>(__ex))
-      { }
-    };
-
-  template<typename _Ex>
-    struct __get_nested_helper
-    {
-      static const nested_exception*
-      _S_get(const _Ex& __ex)
-      { return dynamic_cast<const nested_exception*>(&__ex); }
-    };
-
-  template<typename _Ex>
-    struct __get_nested_helper<_Ex*>
-    {
-      static const nested_exception*
-      _S_get(const _Ex* __ex)
-      { return dynamic_cast<const nested_exception*>(__ex); }
-    };
-
-  template<typename _Ex>
-    inline const nested_exception*
-    __get_nested_exception(const _Ex& __ex)
-    { return __get_nested_helper<_Ex>::_S_get(__ex); }
-
-  template<typename _Ex>
-    void
-    __throw_with_nested(_Ex&&, const nested_exception* = 0)
-    __attribute__ ((__noreturn__));
-
-  template<typename _Ex>
-    void
-    __throw_with_nested(_Ex&&, ...) __attribute__ ((__noreturn__));
-
-  // This function should never be called, but is needed to avoid a warning
-  // about ambiguous base classes when instantiating throw_with_nested<_Ex>()
-  // with a type that has an accessible nested_exception base.
-  template<typename _Ex>
-    inline void
-    __throw_with_nested(_Ex&& __ex, const nested_exception*)
-    { throw __ex; }
-
-  template<typename _Ex>
-    inline void
-    __throw_with_nested(_Ex&& __ex, ...)
-    { throw _Nested_exception<_Ex>(static_cast<_Ex&&>(__ex)); }
-  
-  template<typename _Ex>
-    void
-    throw_with_nested(_Ex __ex) __attribute__ ((__noreturn__));
-
-  /// If @p __ex is derived from nested_exception, @p __ex. 
-  /// Else, an implementation-defined object derived from both.
-  template<typename _Ex>
-    inline void
-    throw_with_nested(_Ex __ex)
-    {
-      if (__get_nested_exception(__ex))
-        throw __ex;
-      __throw_with_nested(static_cast<_Ex&&>(__ex), &__ex);
-    }
-
-  /// If @p __ex is derived from nested_exception, @p __ex.rethrow_nested().
-  template<typename _Ex>
-    inline void
-    rethrow_if_nested(const _Ex& __ex)
-    {
-      if (const nested_exception* __nested = __get_nested_exception(__ex))
-        __nested->rethrow_nested();
-    }
-
-  /// Overload, See N2619
-  inline void
-  rethrow_if_nested(const nested_exception& __ex)
-  { __ex.rethrow_nested(); }
-
-  // @} group exceptions
-} // namespace std
-
-} // extern "C++"
-
-#endif // __GXX_EXPERIMENTAL_CXX0X__
-
-#pragma GCC visibility pop
-
-#endif // _GLIBCXX_NESTED_EXCEPTION_H
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/cstdarg b/arm-linux-androideabi/include/c++/4.6.x-google/cstdarg
deleted file mode 100644
index fb27389..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/cstdarg
+++ /dev/null
@@ -1,59 +0,0 @@
-// -*- C++ -*- forwarding header.
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file include/cstdarg
- *  This is a Standard C++ Library file.  You should @c \#include this file
- *  in your programs, rather than any of the @a *.h implementation files.
- *
- *  This is the C++ version of the Standard C Library header @c stdarg.h,
- *  and its contents are (mostly) the same as that header, but are all
- *  contained in the namespace @c std (except for names which are defined
- *  as macros in C).
- */
-
-//
-// ISO C++ 14882: 20.4.6  C library
-//
-
-#pragma GCC system_header
-
-#include <bits/c++config.h>
-#include <stdarg.h>
-
-#ifndef _GLIBCXX_CSTDARG
-#define _GLIBCXX_CSTDARG 1
-
-// Adhere to section 17.4.1.2 clause 5 of ISO 14882:1998
-#ifndef va_end
-#define va_end(ap) va_end (ap)
-#endif
-
-namespace std
-{
-  using ::va_list;
-} // namespace std
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/cstddef b/arm-linux-androideabi/include/c++/4.6.x-google/cstddef
deleted file mode 100644
index d9a7383..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/cstddef
+++ /dev/null
@@ -1,44 +0,0 @@
-// -*- C++ -*- forwarding header.
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file cstddef
- *  This is a Standard C++ Library file.  You should @c \#include this file
- *  in your programs, rather than any of the @a *.h implementation files.
- *
- *  This is the C++ version of the Standard C Library header @c stddef.h,
- *  and its contents are (mostly) the same as that header, but are all
- *  contained in the namespace @c std (except for names which are defined
- *  as macros in C).
- */
-
-//
-// ISO C++ 14882: 18.1  Types
-//
-
-#pragma GCC system_header
-
-#include <bits/c++config.h>
-#include <stddef.h>
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/cstdlib b/arm-linux-androideabi/include/c++/4.6.x-google/cstdlib
deleted file mode 100644
index aa7530d..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/cstdlib
+++ /dev/null
@@ -1,255 +0,0 @@
-// -*- C++ -*- forwarding header.
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file include/cstdlib
- *  This is a Standard C++ Library file.  You should @c \#include this file
- *  in your programs, rather than any of the @a *.h implementation files.
- *
- *  This is the C++ version of the Standard C Library header @c stdlib.h,
- *  and its contents are (mostly) the same as that header, but are all
- *  contained in the namespace @c std (except for names which are defined
- *  as macros in C).
- */
-
-//
-// ISO C++ 14882: 20.4.6  C library
-//
-
-#pragma GCC system_header
-
-#include <bits/c++config.h>
-
-#ifndef _GLIBCXX_CSTDLIB
-#define _GLIBCXX_CSTDLIB 1
-
-#if !_GLIBCXX_HOSTED
-// The C standard does not require a freestanding implementation to
-// provide <stdlib.h>.  However, the C++ standard does still require
-// <cstdlib> -- but only the functionality mentioned in
-// [lib.support.start.term].
-
-#define EXIT_SUCCESS 0
-#define EXIT_FAILURE 1
-
-namespace std
-{
-  extern "C" void abort(void) throw () _GLIBCXX_NORETURN;
-  extern "C" int atexit(void (*)()) throw ();
-  extern "C" void exit(int) throw () _GLIBCXX_NORETURN;
-} // namespace std
-
-#else
-
-#include <stdlib.h>
-
-// Get rid of those macros defined in <stdlib.h> in lieu of real functions.
-#undef abort
-#undef abs
-#undef atexit
-#undef atof
-#undef atoi
-#undef atol
-#undef bsearch
-#undef calloc
-#undef div
-#undef exit
-#undef free
-#undef getenv
-#undef labs
-#undef ldiv
-#undef malloc
-#undef mblen
-#undef mbstowcs
-#undef mbtowc
-#undef qsort
-#undef rand
-#undef realloc
-#undef srand
-#undef strtod
-#undef strtol
-#undef strtoul
-#undef system
-#undef wcstombs
-#undef wctomb
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
-  using ::div_t;
-  using ::ldiv_t;
-
-  using ::abort;
-  using ::abs;
-  using ::atexit;
-  using ::atof;
-  using ::atoi;
-  using ::atol;
-  using ::bsearch;
-  using ::calloc;
-  using ::div;
-  using ::exit;
-  using ::free;
-  using ::getenv;
-  using ::labs;
-  using ::ldiv;
-  using ::malloc;
-#ifdef _GLIBCXX_HAVE_MBSTATE_T
-  using ::mblen;
-  using ::mbstowcs;
-  using ::mbtowc;
-#endif // _GLIBCXX_HAVE_MBSTATE_T
-  using ::qsort;
-  using ::rand;
-  using ::realloc;
-  using ::srand;
-  using ::strtod;
-  using ::strtol;
-  using ::strtoul;
-  using ::system;
-#ifdef _GLIBCXX_USE_WCHAR_T
-  using ::wcstombs;
-  using ::wctomb;
-#endif // _GLIBCXX_USE_WCHAR_T
-
-  inline long
-  abs(long __i) { return labs(__i); }
-
-  inline ldiv_t
-  div(long __i, long __j) { return ldiv(__i, __j); }
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
-#if _GLIBCXX_USE_C99
-
-#undef _Exit
-#undef llabs
-#undef lldiv
-#undef atoll
-#undef strtoll
-#undef strtoull
-#undef strtof
-#undef strtold
-
-namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
-#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
-  using ::lldiv_t;
-#endif
-#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
-  extern "C" void (_Exit)(int) throw () _GLIBCXX_NORETURN;
-#endif
-#if !_GLIBCXX_USE_C99_DYNAMIC
-  using ::_Exit;
-#endif
-
-  inline long long
-  abs(long long __x) { return __x >= 0 ? __x : -__x; }
-
-#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
-  using ::llabs;
-
-  inline lldiv_t
-  div(long long __n, long long __d)
-  { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
-
-  using ::lldiv;
-#endif
-
-#if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
-  extern "C" long long int (atoll)(const char *) throw ();
-  extern "C" long long int
-    (strtoll)(const char * __restrict, char ** __restrict, int) throw ();
-  extern "C" unsigned long long int
-    (strtoull)(const char * __restrict, char ** __restrict, int) throw ();
-#endif
-#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
-  using ::atoll;
-  using ::strtoll;
-  using ::strtoull;
-#endif
-  using ::strtof;
-  using ::strtold;
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace __gnu_cxx
-
-namespace std
-{
-#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
-  using ::__gnu_cxx::lldiv_t;
-#endif
-  using ::__gnu_cxx::_Exit;
-  using ::__gnu_cxx::abs;
-#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
-  using ::__gnu_cxx::llabs;
-  using ::__gnu_cxx::div;
-  using ::__gnu_cxx::lldiv;
-#endif
-  using ::__gnu_cxx::atoll;
-  using ::__gnu_cxx::strtof;
-  using ::__gnu_cxx::strtoll;
-  using ::__gnu_cxx::strtoull;
-  using ::__gnu_cxx::strtold;
-} // namespace std
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-
-namespace std
-{
-#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
-  // types
-  using std::lldiv_t;
-
-  // functions
-  using std::llabs;
-  using std::lldiv;
-#endif
-
-  using std::atoll;
-  using std::strtoll;
-  using std::strtoull;
-
-  using std::strtof;
-  using std::strtold;
-
-  // overloads
-  using std::abs;
-#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
-  using std::div;
-#endif
-} // namespace std
-
-#endif // __GXX_EXPERIMENTAL_CXX0X__
-
-#endif // _GLIBCXX_USE_C99
-
-#endif // !_GLIBCXX_HOSTED
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/cxxabi.h b/arm-linux-androideabi/include/c++/4.6.x-google/cxxabi.h
deleted file mode 100644
index c93085a..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/cxxabi.h
+++ /dev/null
@@ -1,626 +0,0 @@
-// ABI Support -*- C++ -*-
-
-// Copyright (C) 2000, 2002, 2003, 2004, 2006, 2007, 2009, 2010, 2011
-// Free Software Foundation, Inc.
-//
-// 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/>.
-
-// Written by Nathan Sidwell, Codesourcery LLC, <nathan@codesourcery.com>
-
-/* This file declares the new abi entry points into the runtime. It is not
-   normally necessary for user programs to include this header, or use the
-   entry points directly. However, this header is available should that be
-   needed.
-
-   Some of the entry points are intended for both C and C++, thus this header
-   is includable from both C and C++. Though the C++ specific parts are not
-   available in C, naturally enough.  */
-
-/** @file cxxabi.h
- *  The header provides an interface to the C++ ABI.
- */
-
-#ifndef _CXXABI_H
-#define _CXXABI_H 1
-
-#pragma GCC system_header
-
-#pragma GCC visibility push(default)
-
-#include <stddef.h>
-#include <bits/c++config.h>
-#include <bits/cxxabi_tweaks.h>
-#include <bits/cxxabi_forced.h>
-
-#ifdef __cplusplus
-namespace __cxxabiv1
-{
-  extern "C"
-  {
-#endif
-
-  typedef __cxa_cdtor_return_type (*__cxa_cdtor_type)(void *);
-
-  // Allocate array.
-  void*
-  __cxa_vec_new(size_t __element_count, size_t __element_size,
-		size_t __padding_size, __cxa_cdtor_type __constructor,
-		__cxa_cdtor_type __destructor);
-
-  void*
-  __cxa_vec_new2(size_t __element_count, size_t __element_size,
-		 size_t __padding_size, __cxa_cdtor_type __constructor,
-		 __cxa_cdtor_type __destructor, void *(*__alloc) (size_t),
-		 void (*__dealloc) (void*));
-
-  void*
-  __cxa_vec_new3(size_t __element_count, size_t __element_size,
-		 size_t __padding_size, __cxa_cdtor_type __constructor,
-		 __cxa_cdtor_type __destructor, void *(*__alloc) (size_t),
-		 void (*__dealloc) (void*, size_t));
-
-  // Construct array.
-  __cxa_vec_ctor_return_type
-  __cxa_vec_ctor(void* __array_address, size_t __element_count,
-		 size_t __element_size, __cxa_cdtor_type __constructor,
-		 __cxa_cdtor_type __destructor);
-
-  __cxa_vec_ctor_return_type
-  __cxa_vec_cctor(void* __dest_array, void* __src_array,
-		  size_t __element_count, size_t __element_size,
-		  __cxa_cdtor_return_type (*__constructor) (void*, void*),
-		  __cxa_cdtor_type __destructor);
-
-  // Destruct array.
-  void
-  __cxa_vec_dtor(void* __array_address, size_t __element_count,
-		 size_t __element_size, __cxa_cdtor_type __destructor);
-
-  void
-  __cxa_vec_cleanup(void* __array_address, size_t __element_count, size_t __s,
-		    __cxa_cdtor_type __destructor) _GLIBCXX_NOTHROW;
-
-  // Destruct and release array.
-  void
-  __cxa_vec_delete(void* __array_address, size_t __element_size,
-		   size_t __padding_size, __cxa_cdtor_type __destructor);
-
-  void
-  __cxa_vec_delete2(void* __array_address, size_t __element_size,
-		    size_t __padding_size, __cxa_cdtor_type __destructor,
-		    void (*__dealloc) (void*));
-
-  void
-  __cxa_vec_delete3(void* __array_address, size_t __element_size,
-		    size_t __padding_size, __cxa_cdtor_type __destructor,
-		    void (*__dealloc) (void*, size_t));
-
-  int
-  __cxa_guard_acquire(__guard*);
-
-  void
-  __cxa_guard_release(__guard*) _GLIBCXX_NOTHROW;
-
-  void
-  __cxa_guard_abort(__guard*) _GLIBCXX_NOTHROW;
-
-  // Pure virtual functions.
-  void
-  __cxa_pure_virtual(void) __attribute__ ((__noreturn__));
-
-  // Exception handling.
-  void
-  __cxa_bad_cast();
-
-  void
-  __cxa_bad_typeid();
-
-  // DSO destruction.
-  int
-  __cxa_atexit(void (*)(void*), void*, void*) _GLIBCXX_NOTHROW;
-
-  int
-  __cxa_finalize(void*);
-
-
-  /**
-   *  @brief Demangling routine.
-   *  ABI-mandated entry point in the C++ runtime library for demangling.
-   *
-   *  @param __mangled_name A NUL-terminated character string
-   *  containing the name to be demangled.
-   *
-   *  @param __output_buffer A region of memory, allocated with
-   *  malloc, of @a *__length bytes, into which the demangled name is
-   *  stored.  If @a __output_buffer is not long enough, it is
-   *  expanded using realloc.  @a __output_buffer may instead be NULL;
-   *  in that case, the demangled name is placed in a region of memory
-   *  allocated with malloc.
-   *
-   *  @param __length If @a __length is non-NULL, the length of the
-   *  buffer containing the demangled name is placed in @a *__length.
-   *
-   *  @param __status @a *__status is set to one of the following values:
-   *   0: The demangling operation succeeded.
-   *  -1: A memory allocation failure occurred.
-   *  -2: @a mangled_name is not a valid name under the C++ ABI mangling rules.
-   *  -3: One of the arguments is invalid.
-   *
-   *  @return A pointer to the start of the NUL-terminated demangled
-   *  name, or NULL if the demangling fails.  The caller is
-   *  responsible for deallocating this memory using @c free.
-   *
-   *  The demangling is performed using the C++ ABI mangling rules,
-   *  with GNU extensions. For example, this function is used in
-   *  __gnu_cxx::__verbose_terminate_handler.
-   *
-   *  See http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt12ch39.html
-   *  for other examples of use.
-   *
-   *  @note The same demangling functionality is available via
-   *  libiberty (@c <libiberty/demangle.h> and @c libiberty.a) in GCC
-   *  3.1 and later, but that requires explicit installation (@c
-   *  --enable-install-libiberty) and uses a different API, although
-   *  the ABI is unchanged.
-   */
-  char*
-  __cxa_demangle(const char* __mangled_name, char* __output_buffer,
-		 size_t* __length, int* __status);
-#ifdef __cplusplus
-  }
-} // namespace __cxxabiv1
-#endif
-
-#ifdef __cplusplus
-
-#include <typeinfo>
-
-namespace __cxxabiv1
-{
-  // Type information for int, float etc.
-  class __fundamental_type_info : public std::type_info
-  {
-  public:
-    explicit
-    __fundamental_type_info(const char* __n) : std::type_info(__n) { }
-
-    virtual
-    ~__fundamental_type_info();
-  };
-
-  // Type information for array objects.
-  class __array_type_info : public std::type_info
-  {
-  public:
-    explicit
-    __array_type_info(const char* __n) : std::type_info(__n) { }
-
-    virtual
-    ~__array_type_info();
-  };
-
-  // Type information for functions (both member and non-member).
-  class __function_type_info : public std::type_info
-  {
-  public:
-    explicit
-    __function_type_info(const char* __n) : std::type_info(__n) { }
-
-    virtual
-    ~__function_type_info();
-
-  protected:
-    // Implementation defined member function.
-    virtual bool
-    __is_function_p() const;
-  };
-
-  // Type information for enumerations.
-  class __enum_type_info : public std::type_info
-  {
-  public:
-    explicit
-    __enum_type_info(const char* __n) : std::type_info(__n) { }
-
-    virtual
-    ~__enum_type_info();
-  };
-
-  // Common type information for simple pointers and pointers to member.
-  class __pbase_type_info : public std::type_info
-  {
-  public:
-    unsigned int 		__flags; // Qualification of the target object.
-    const std::type_info* 	__pointee; // Type of pointed to object.
-
-    explicit
-    __pbase_type_info(const char* __n, int __quals,
-		      const std::type_info* __type)
-    : std::type_info(__n), __flags(__quals), __pointee(__type)
-    { }
-
-    virtual
-    ~__pbase_type_info();
-
-    // Implementation defined type.
-    enum __masks
-      {
-	__const_mask = 0x1,
-	__volatile_mask = 0x2,
-	__restrict_mask = 0x4,
-	__incomplete_mask = 0x8,
-	__incomplete_class_mask = 0x10
-      };
-
-  protected:
-    __pbase_type_info(const __pbase_type_info&);
-
-    __pbase_type_info&
-    operator=(const __pbase_type_info&);
-
-    // Implementation defined member functions.
-    virtual bool
-    __do_catch(const std::type_info* __thr_type, void** __thr_obj,
-	       unsigned int __outer) const;
-
-    inline virtual bool
-    __pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj,
-		    unsigned __outer) const;
-  };
-
-  // Type information for simple pointers.
-  class __pointer_type_info : public __pbase_type_info
-  {
-  public:
-    explicit
-    __pointer_type_info(const char* __n, int __quals,
-			const std::type_info* __type)
-    : __pbase_type_info (__n, __quals, __type) { }
-
-
-    virtual
-    ~__pointer_type_info();
-
-  protected:
-    // Implementation defined member functions.
-    virtual bool
-    __is_pointer_p() const;
-
-    virtual bool
-    __pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj,
-		    unsigned __outer) const;
-  };
-
-  class __class_type_info;
-
-  // Type information for a pointer to member variable.
-  class __pointer_to_member_type_info : public __pbase_type_info
-  {
-  public:
-    __class_type_info* __context;   // Class of the member.
-
-    explicit
-    __pointer_to_member_type_info(const char* __n, int __quals,
-				  const std::type_info* __type,
-				  __class_type_info* __klass)
-    : __pbase_type_info(__n, __quals, __type), __context(__klass) { }
-
-    virtual
-    ~__pointer_to_member_type_info();
-
-  protected:
-    __pointer_to_member_type_info(const __pointer_to_member_type_info&);
-
-    __pointer_to_member_type_info&
-    operator=(const __pointer_to_member_type_info&);
-
-    // Implementation defined member function.
-    virtual bool
-    __pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj,
-		    unsigned __outer) const;
-  };
-
-  // Helper class for __vmi_class_type.
-  class __base_class_type_info
-  {
-  public:
-    const __class_type_info* 	__base_type;  // Base class type.
-    long 			__offset_flags;  // Offset and info.
-
-    enum __offset_flags_masks
-      {
-	__virtual_mask = 0x1,
-	__public_mask = 0x2,
-	__hwm_bit = 2,
-	__offset_shift = 8          // Bits to shift offset.
-      };
-
-    // Implementation defined member functions.
-    bool
-    __is_virtual_p() const
-    { return __offset_flags & __virtual_mask; }
-
-    bool
-    __is_public_p() const
-    { return __offset_flags & __public_mask; }
-
-    ptrdiff_t
-    __offset() const
-    {
-      // This shift, being of a signed type, is implementation
-      // defined. GCC implements such shifts as arithmetic, which is
-      // what we want.
-      return static_cast<ptrdiff_t>(__offset_flags) >> __offset_shift;
-    }
-  };
-
-  // Type information for a class.
-  class __class_type_info : public std::type_info
-  {
-  public:
-    explicit
-    __class_type_info (const char *__n) : type_info(__n) { }
-
-    virtual
-    ~__class_type_info ();
-
-    // Implementation defined types.
-    // The type sub_kind tells us about how a base object is contained
-    // within a derived object. We often do this lazily, hence the
-    // UNKNOWN value. At other times we may use NOT_CONTAINED to mean
-    // not publicly contained.
-    enum __sub_kind
-      {
-	// We have no idea.
-	__unknown = 0,
-
-	// Not contained within us (in some circumstances this might
-	// mean not contained publicly)
-	__not_contained,
-
-	// Contained ambiguously.
-	__contained_ambig,
-
-	// Via a virtual path.
-	__contained_virtual_mask = __base_class_type_info::__virtual_mask,
-
-	// Via a public path.
-	__contained_public_mask = __base_class_type_info::__public_mask,
-
-	// Contained within us.
-	__contained_mask = 1 << __base_class_type_info::__hwm_bit,
-
-	__contained_private = __contained_mask,
-	__contained_public = __contained_mask | __contained_public_mask
-      };
-
-    struct __upcast_result;
-    struct __dyncast_result;
-
-  protected:
-    // Implementation defined member functions.
-    virtual bool
-    __do_upcast(const __class_type_info* __dst_type, void**__obj_ptr) const;
-
-    virtual bool
-    __do_catch(const type_info* __thr_type, void** __thr_obj,
-	       unsigned __outer) const;
-
-  public:
-    // Helper for upcast. See if DST is us, or one of our bases.
-    // Return false if not found, true if found.
-    virtual bool
-    __do_upcast(const __class_type_info* __dst, const void* __obj,
-		__upcast_result& __restrict __result) const;
-
-    // Indicate whether SRC_PTR of type SRC_TYPE is contained publicly
-    // within OBJ_PTR. OBJ_PTR points to a base object of our type,
-    // which is the destination type. SRC2DST indicates how SRC
-    // objects might be contained within this type.  If SRC_PTR is one
-    // of our SRC_TYPE bases, indicate the virtuality. Returns
-    // not_contained for non containment or private containment.
-    inline __sub_kind
-    __find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
-		      const __class_type_info* __src_type,
-		      const void* __src_ptr) const;
-
-    // Helper for dynamic cast. ACCESS_PATH gives the access from the
-    // most derived object to this base. DST_TYPE indicates the
-    // desired type we want. OBJ_PTR points to a base of our type
-    // within the complete object. SRC_TYPE indicates the static type
-    // started from and SRC_PTR points to that base within the most
-    // derived object. Fill in RESULT with what we find. Return true
-    // if we have located an ambiguous match.
-    virtual bool
-    __do_dyncast(ptrdiff_t __src2dst, __sub_kind __access_path,
-		 const __class_type_info* __dst_type, const void* __obj_ptr,
-		 const __class_type_info* __src_type, const void* __src_ptr,
-		 __dyncast_result& __result) const;
-
-    // Helper for find_public_subobj. SRC2DST indicates how SRC_TYPE
-    // bases are inherited by the type started from -- which is not
-    // necessarily the current type. The current type will be a base
-    // of the destination type.  OBJ_PTR points to the current base.
-    virtual __sub_kind
-    __do_find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
-			 const __class_type_info* __src_type,
-			 const void* __src_ptr) const;
-  };
-
-  // Type information for a class with a single non-virtual base.
-  class __si_class_type_info : public __class_type_info
-  {
-  public:
-    const __class_type_info* __base_type;
-
-    explicit
-    __si_class_type_info(const char *__n, const __class_type_info *__base)
-    : __class_type_info(__n), __base_type(__base) { }
-
-    virtual
-    ~__si_class_type_info();
-
-  protected:
-    __si_class_type_info(const __si_class_type_info&);
-
-    __si_class_type_info&
-    operator=(const __si_class_type_info&);
-
-    // Implementation defined member functions.
-    virtual bool
-    __do_dyncast(ptrdiff_t __src2dst, __sub_kind __access_path,
-		 const __class_type_info* __dst_type, const void* __obj_ptr,
-		 const __class_type_info* __src_type, const void* __src_ptr,
-		 __dyncast_result& __result) const;
-
-    virtual __sub_kind
-    __do_find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
-			 const __class_type_info* __src_type,
-			 const void* __sub_ptr) const;
-
-    virtual bool
-    __do_upcast(const __class_type_info*__dst, const void*__obj,
-		__upcast_result& __restrict __result) const;
-  };
-
-  // Type information for a class with multiple and/or virtual bases.
-  class __vmi_class_type_info : public __class_type_info
-  {
-  public:
-    unsigned int 		__flags;  // Details about the class hierarchy.
-    unsigned int 		__base_count;  // Number of direct bases.
-
-    // The array of bases uses the trailing array struct hack so this
-    // class is not constructable with a normal constructor. It is
-    // internally generated by the compiler.
-    __base_class_type_info 	__base_info[1];  // Array of bases.
-
-    explicit
-    __vmi_class_type_info(const char* __n, int ___flags)
-    : __class_type_info(__n), __flags(___flags), __base_count(0) { }
-
-    virtual
-    ~__vmi_class_type_info();
-
-    // Implementation defined types.
-    enum __flags_masks
-      {
-	__non_diamond_repeat_mask = 0x1, // Distinct instance of repeated base.
-	__diamond_shaped_mask = 0x2, // Diamond shaped multiple inheritance.
-	__flags_unknown_mask = 0x10
-      };
-
-  protected:
-    // Implementation defined member functions.
-    virtual bool
-    __do_dyncast(ptrdiff_t __src2dst, __sub_kind __access_path,
-		 const __class_type_info* __dst_type, const void* __obj_ptr,
-		 const __class_type_info* __src_type, const void* __src_ptr,
-		 __dyncast_result& __result) const;
-
-    virtual __sub_kind
-    __do_find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
-			 const __class_type_info* __src_type,
-			 const void* __src_ptr) const;
-
-    virtual bool
-    __do_upcast(const __class_type_info* __dst, const void* __obj,
-		__upcast_result& __restrict __result) const;
-  };
-
-  // Dynamic cast runtime.
-  // src2dst has the following possible values
-  //  >-1: src_type is a unique public non-virtual base of dst_type
-  //       dst_ptr + src2dst == src_ptr
-  //   -1: unspecified relationship
-  //   -2: src_type is not a public base of dst_type
-  //   -3: src_type is a multiple public non-virtual base of dst_type
-  extern "C" void*
-  __dynamic_cast(const void* __src_ptr, // Starting object.
-		 const __class_type_info* __src_type, // Static type of object.
-		 const __class_type_info* __dst_type, // Desired target type.
-		 ptrdiff_t __src2dst); // How src and dst are related.
-
-
-  // Returns the type_info for the currently handled exception [15.3/8], or
-  // null if there is none.
-  extern "C" std::type_info*
-  __cxa_current_exception_type() _GLIBCXX_NOTHROW __attribute__ ((__pure__));
-
-  // A magic placeholder class that can be caught by reference
-  // to recognize foreign exceptions.
-  class __foreign_exception
-  {
-    virtual ~__foreign_exception() _GLIBCXX_NOTHROW;
-    virtual void __pure_dummy() = 0; // prevent catch by value
-  };
-
-} // namespace __cxxabiv1
-
-/** @namespace abi
- *  @brief The cross-vendor C++ Application Binary Interface. A
- *  namespace alias to __cxxabiv1, but user programs should use the
- *  alias 'abi'.
- *
- *  A brief overview of an ABI is given in the libstdc++ FAQ, question
- *  5.8 (you may have a copy of the FAQ locally, or you can view the online
- *  version at http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html#5_8).
- *
- *  GCC subscribes to a cross-vendor ABI for C++, sometimes
- *  called the IA64 ABI because it happens to be the native ABI for that
- *  platform.  It is summarized at http://www.codesourcery.com/cxx-abi/
- *  along with the current specification.
- *
- *  For users of GCC greater than or equal to 3.x, entry points are
- *  available in <cxxabi.h>, which notes, <em>'It is not normally
- *  necessary for user programs to include this header, or use the
- *  entry points directly.  However, this header is available should
- *  that be needed.'</em>
-*/
-namespace abi = __cxxabiv1;
-
-namespace __gnu_cxx
-{
-  /**
-   *  @brief Exception thrown by __cxa_guard_acquire.
-   *  @ingroup exceptions
-   *
-   *  6.7[stmt.dcl]/4: If control re-enters the declaration (recursively)
-   *  while the object is being initialized, the behavior is undefined.
-   *
-   *  Since we already have a library function to handle locking, we might
-   *  as well check for this situation and throw an exception.
-   *  We use the second byte of the guard variable to remember that we're
-   *  in the middle of an initialization.
-   */
-  class recursive_init_error: public std::exception
-  {
-  public:
-    recursive_init_error() throw() { }
-    virtual ~recursive_init_error() throw ();
-  };
-}
-#endif // __cplusplus
-
-#pragma GCC visibility pop
-
-#endif // __CXXABI_H
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/exception b/arm-linux-androideabi/include/c++/4.6.x-google/exception
deleted file mode 100644
index db75ad1..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/exception
+++ /dev/null
@@ -1,158 +0,0 @@
-// Exception Handling support header for -*- C++ -*-
-
-// Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-// 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-// Free Software Foundation
-//
-// 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/>.
-
-/** @file exception
- *  This is a Standard C++ Library header.
- */
-
-#ifndef __EXCEPTION__
-#define __EXCEPTION__
-
-#pragma GCC system_header
-
-#pragma GCC visibility push(default)
-
-#include <bits/c++config.h>
-
-extern "C++" {
-
-namespace std
-{
-  /**
-   * @defgroup exceptions Exceptions
-   * @ingroup diagnostics
-   *
-   * Classes and functions for reporting errors via exception classes.
-   * @{
-   */
-
-  /**
-   *  @brief Base class for all library exceptions.
-   *
-   *  This is the base class for all exceptions thrown by the standard
-   *  library, and by certain language expressions.  You are free to derive
-   *  your own %exception classes, or use a different hierarchy, or to
-   *  throw non-class data (e.g., fundamental types).
-   */
-  class exception
-  {
-  public:
-    exception() throw() { }
-    virtual ~exception() throw();
-
-    /** Returns a C-style character string describing the general cause
-     *  of the current error.  */
-    virtual const char* what() const throw();
-  };
-
-  /** If an %exception is thrown which is not listed in a function's
-   *  %exception specification, one of these may be thrown.  */
-  class bad_exception : public exception
-  {
-  public:
-    bad_exception() throw() { }
-
-    // This declaration is not useless:
-    // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
-    virtual ~bad_exception() throw();
-
-    // See comment in eh_exception.cc.
-    virtual const char* what() const throw();
-  };
-
-  /// If you write a replacement %terminate handler, it must be of this type.
-  typedef void (*terminate_handler) ();
-
-  /// If you write a replacement %unexpected handler, it must be of this type.
-  typedef void (*unexpected_handler) ();
-
-  /// Takes a new handler function as an argument, returns the old function.
-  terminate_handler set_terminate(terminate_handler) throw();
-
-  /** The runtime will call this function if %exception handling must be
-   *  abandoned for any reason.  It can also be called by the user.  */
-  void terminate() throw() __attribute__ ((__noreturn__));
-
-  /// Takes a new handler function as an argument, returns the old function.
-  unexpected_handler set_unexpected(unexpected_handler) throw();
-
-  /** The runtime will call this function if an %exception is thrown which
-   *  violates the function's %exception specification.  */
-  void unexpected() __attribute__ ((__noreturn__));
-
-  /** [18.6.4]/1:  'Returns true after completing evaluation of a
-   *  throw-expression until either completing initialization of the
-   *  exception-declaration in the matching handler or entering @c unexpected()
-   *  due to the throw; or after entering @c terminate() for any reason
-   *  other than an explicit call to @c terminate().  [Note: This includes
-   *  stack unwinding [15.2].  end note]'
-   *
-   *  2: 'When @c uncaught_exception() is true, throwing an
-   *  %exception can result in a call of @c terminate()
-   *  (15.5.1).'
-   */
-  bool uncaught_exception() throw() __attribute__ ((__pure__));
-
-  // @} group exceptions
-} // namespace std
-
-namespace __gnu_cxx
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
-  /**
-   *  @brief A replacement for the standard terminate_handler which
-   *  prints more information about the terminating exception (if any)
-   *  on stderr.
-   *
-   *  @ingroup exceptions
-   *
-   *  Call
-   *   @code
-   *     std::set_terminate(__gnu_cxx::__verbose_terminate_handler)
-   *   @endcode
-   *  to use.  For more info, see
-   *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt02ch06s02.html
-   *
-   *  In 3.4 and later, this is on by default.
-   */
-  void __verbose_terminate_handler();
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
-} // extern "C++"
-
-#pragma GCC visibility pop
-
-#if (defined(__GXX_EXPERIMENTAL_CXX0X__) \
-     && defined(_GLIBCXX_ATOMIC_BUILTINS_4))
-#include <bits/exception_ptr.h>
-#include <bits/nested_exception.h>
-#endif
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/initializer_list b/arm-linux-androideabi/include/c++/4.6.x-google/initializer_list
deleted file mode 100644
index 1048d44..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/initializer_list
+++ /dev/null
@@ -1,102 +0,0 @@
-// std::initializer_list support -*- C++ -*-
-
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
-//
-// 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/>.
-
-/** @file initializer_list
- *  This is a Standard C++ Library header.
- */
-
-#ifndef _INITIALIZER_LIST
-#define _INITIALIZER_LIST
-
-#pragma GCC system_header
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-
-#pragma GCC visibility push(default)
-
-#include <bits/c++config.h>
-
-namespace std
-{
-  /// initializer_list
-  template<class _E>
-    class initializer_list
-    {
-    public:
-      typedef _E 		value_type;
-      typedef const _E& 	reference;
-      typedef const _E& 	const_reference;
-      typedef size_t 		size_type;
-      typedef const _E* 	iterator;
-      typedef const _E* 	const_iterator;
-
-    private:
-      iterator			_M_array;
-      size_type			_M_len;
-
-      // The compiler can call a private constructor.
-      constexpr initializer_list(const_iterator __a, size_type __l)
-      : _M_array(__a), _M_len(__l) { }
-
-    public:
-      constexpr initializer_list() : _M_array(0), _M_len(0) { }
-
-      // Number of elements.
-      constexpr size_type
-      size() { return _M_len; }
-
-      // First element.
-      constexpr const_iterator
-      begin() { return _M_array; }
-
-      // One past the last element.
-      constexpr const_iterator
-      end() { return begin() + size(); }
-  };
-
-  /**
-   *  @brief  Return an iterator pointing to the first element of
-   *          the initilizer_list.
-   *  @param  il  Initializer list.
-   */
-  template<class _Tp>
-    constexpr const _Tp*
-    begin(initializer_list<_Tp> __ils)
-    { return __ils.begin(); }
-
-  /**
-   *  @brief  Return an iterator pointing to one past the last element
-   *          of the initilizer_list.
-   *  @param  il  Initializer list.
-   */
-  template<class _Tp>
-    constexpr const _Tp*
-    end(initializer_list<_Tp> __ils)
-    { return __ils.end(); }
-}
-
-#pragma GCC visibility pop
-#endif // C++0x
-#endif // _INITIALIZER_LIST
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/limits b/arm-linux-androideabi/include/c++/4.6.x-google/limits
deleted file mode 100644
index 9a31197..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/limits
+++ /dev/null
@@ -1,1632 +0,0 @@
-// The template and inlines for the numeric_limits classes. -*- C++ -*-
-
-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-// 2008, 2009, 2010  Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ 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.
-
-// 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 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/>.
-
-/** @file include/limits
- *  This is a Standard C++ Library header.
- */
-
-// Note: this is not a conforming implementation.
-// Written by Gabriel Dos Reis <gdr@codesourcery.com>
-
-//
-// ISO 14882:1998
-// 18.2.1
-//
-
-#ifndef _GLIBCXX_NUMERIC_LIMITS
-#define _GLIBCXX_NUMERIC_LIMITS 1
-
-#pragma GCC system_header
-
-#include <bits/c++config.h>
-
-//
-// The numeric_limits<> traits document implementation-defined aspects
-// of fundamental arithmetic data types (integers and floating points).
-// From Standard C++ point of view, there are 14 such types:
-//   * integers
-//         bool							(1)
-//         char, signed char, unsigned char, wchar_t            (4)
-//         short, unsigned short				(2)
-//         int, unsigned					(2)
-//         long, unsigned long					(2)
-//
-//   * floating points
-//         float						(1)
-//         double						(1)
-//         long double						(1)
-//
-// GNU C++ understands (where supported by the host C-library)
-//   * integer
-//         long long, unsigned long long			(2)
-//
-// which brings us to 16 fundamental arithmetic data types in GNU C++.
-//
-//
-// Since a numeric_limits<> is a bit tricky to get right, we rely on
-// an interface composed of macros which should be defined in config/os
-// or config/cpu when they differ from the generic (read arbitrary)
-// definitions given here.
-//
-
-// These values can be overridden in the target configuration file.
-// The default values are appropriate for many 32-bit targets.
-
-// GCC only intrinsically supports modulo integral types.  The only remaining
-// integral exceptional values is division by zero.  Only targets that do not
-// signal division by zero in some "hard to ignore" way should use false.
-#ifndef __glibcxx_integral_traps
-# define __glibcxx_integral_traps true
-#endif
-
-// float
-//
-
-// Default values.  Should be overridden in configuration files if necessary.
-
-#ifndef __glibcxx_float_has_denorm_loss
-#  define __glibcxx_float_has_denorm_loss false
-#endif
-#ifndef __glibcxx_float_traps
-#  define __glibcxx_float_traps false
-#endif
-#ifndef __glibcxx_float_tinyness_before
-#  define __glibcxx_float_tinyness_before false
-#endif
-
-// double
-
-// Default values.  Should be overridden in configuration files if necessary.
-
-#ifndef __glibcxx_double_has_denorm_loss
-#  define __glibcxx_double_has_denorm_loss false
-#endif
-#ifndef __glibcxx_double_traps
-#  define __glibcxx_double_traps false
-#endif
-#ifndef __glibcxx_double_tinyness_before
-#  define __glibcxx_double_tinyness_before false
-#endif
-
-// long double
-
-// Default values.  Should be overridden in configuration files if necessary.
-
-#ifndef __glibcxx_long_double_has_denorm_loss
-#  define __glibcxx_long_double_has_denorm_loss false
-#endif
-#ifndef __glibcxx_long_double_traps
-#  define __glibcxx_long_double_traps false
-#endif
-#ifndef __glibcxx_long_double_tinyness_before
-#  define __glibcxx_long_double_tinyness_before false
-#endif
-
-// You should not need to define any macros below this point.
-
-#define __glibcxx_signed(T)	((T)(-1) < 0)
-
-#define __glibcxx_min(T) \
-  (__glibcxx_signed (T) ? (T)1 << __glibcxx_digits (T) : (T)0)
-
-#define __glibcxx_max(T) \
-  (__glibcxx_signed (T) ? \
-   (((((T)1 << (__glibcxx_digits (T) - 1)) - 1) << 1) + 1) : ~(T)0)
-
-#define __glibcxx_digits(T) \
-  (sizeof(T) * __CHAR_BIT__ - __glibcxx_signed (T))
-
-// The fraction 643/2136 approximates log10(2) to 7 significant digits.
-#define __glibcxx_digits10(T) \
-  (__glibcxx_digits (T) * 643L / 2136)
-
-#define __glibcxx_max_digits10(T) \
-  (2 + (T) * 643L / 2136)
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
-  /**
-   *  @brief Describes the rounding style for floating-point types.
-   *
-   *  This is used in the std::numeric_limits class.
-  */
-  enum float_round_style
-  {
-    round_indeterminate       = -1,    /// Intermediate.
-    round_toward_zero         = 0,     /// To zero.
-    round_to_nearest          = 1,     /// To the nearest representable value.
-    round_toward_infinity     = 2,     /// To infinity.
-    round_toward_neg_infinity = 3      /// To negative infinity.
-  };
-
-  /**
-   *  @brief Describes the denormalization for floating-point types.
-   *
-   *  These values represent the presence or absence of a variable number
-   *  of exponent bits.  This type is used in the std::numeric_limits class.
-  */
-  enum float_denorm_style
-  {
-    /// Indeterminate at compile time whether denormalized values are allowed.
-    denorm_indeterminate = -1,
-    /// The type does not allow denormalized values.
-    denorm_absent        = 0,
-    /// The type allows denormalized values.
-    denorm_present       = 1
-  };
-
-  /**
-   *  @brief Part of std::numeric_limits.
-   *
-   *  The @c static @c const members are usable as integral constant
-   *  expressions.
-   *
-   *  @note This is a separate class for purposes of efficiency; you
-   *        should only access these members as part of an instantiation
-   *        of the std::numeric_limits class.
-  */
-  struct __numeric_limits_base
-  {
-    /** This will be true for all fundamental types (which have
-	specializations), and false for everything else.  */
-    static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false;
-
-    /** The number of @c radix digits that be represented without change:  for
-	integer types, the number of non-sign bits in the mantissa; for
-	floating types, the number of @c radix digits in the mantissa.  */
-    static _GLIBCXX_USE_CONSTEXPR int digits = 0;
-
-    /** The number of base 10 digits that can be represented without change. */
-    static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-    /** The number of base 10 digits required to ensure that values which
-	differ are always differentiated.  */
-    static constexpr int max_digits10 = 0;
-#endif
-
-    /** True if the type is signed.  */
-    static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
-
-    /** True if the type is integer.
-     *  Is this supposed to be <em>if the type is integral?</em>  */
-    static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
-
-    /** True if the type uses an exact representation. <em>All integer types are
-	exact, but not all exact types are integer.  For example, rational and
-	fixed-exponent representations are exact but not integer.</em>
-	[18.2.1.2]/15  */
-    static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
-
-    /** For integer types, specifies the base of the representation.  For
-	floating types, specifies the base of the exponent representation.  */
-    static _GLIBCXX_USE_CONSTEXPR int radix = 0;
-
-    /** The minimum negative integer such that @c radix raised to the power of
-	(one less than that integer) is a normalized floating point number.  */
-    static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-
-    /** The minimum negative integer such that 10 raised to that power is in
-	the range of normalized floating point numbers.  */
-    static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-
-    /** The maximum positive integer such that @c radix raised to the power of
-	(one less than that integer) is a representable finite floating point
-	number.  */
-    static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-
-    /** The maximum positive integer such that 10 raised to that power is in
-	the range of representable finite floating point numbers.  */
-    static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-    /** True if the type has a representation for positive infinity.  */
-    static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-
-    /** True if the type has a representation for a quiet (non-signaling)
-	<em>Not a Number</em>.  */
-    static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-
-    /** True if the type has a representation for a signaling
-	<em>Not a Number</em>.  */
-    static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-
-    /** See std::float_denorm_style for more information.  */
-    static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
-
-    /** <em>True if loss of accuracy is detected as a denormalization loss,
-	rather than as an inexact result.</em> [18.2.1.2]/42  */
-    static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-    /** True if-and-only-if the type adheres to the IEC 559 standard, also
-	known as IEEE 754.  (Only makes sense for floating point types.)  */
-    static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-
-    /** <em>True if the set of values representable by the type is
-	finite.  All built-in types are bounded, this member would be
-	false for arbitrary precision types.</em> [18.2.1.2]/54  */
-    static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false;
-
-    /** True if the type is @e modulo, that is, if it is possible to add two
-	positive numbers and have a result that wraps around to a third number
-	that is less.  Typically false for floating types, true for unsigned
-	integers, and true for signed integers.  */
-    static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
-
-    /** True if trapping is implemented for this type.  */
-    static _GLIBCXX_USE_CONSTEXPR bool traps = false;
-
-    /** True if tininess is detected before rounding.  (see IEC 559)  */
-    static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-
-    /** See std::float_round_style for more information.  This is only
-	meaningful for floating types; integer types will all be
-	round_toward_zero.  */
-    static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 
-						    round_toward_zero;
-  };
-
-  /**
-   *  @brief Properties of fundamental types.
-   *
-   *  This class allows a program to obtain information about the
-   *  representation of a fundamental type on a given platform.  For
-   *  non-fundamental types, the functions will return 0 and the data
-   *  members will all be @c false.
-   *
-   *  _GLIBCXX_RESOLVE_LIB_DEFECTS:  DRs 201 and 184 (hi Gaby!) are
-   *  noted, but not incorporated in this documented (yet).
-  */
-  template<typename _Tp>
-    struct numeric_limits : public __numeric_limits_base
-    {
-      /** The minimum finite value, or for floating types with
-	  denormalization, the minimum positive normalized value.  */
-      static _GLIBCXX_CONSTEXPR _Tp
-      min() throw() { return static_cast<_Tp>(0); }
-
-      /** The maximum finite value.  */
-      static _GLIBCXX_CONSTEXPR _Tp
-      max() throw() { return static_cast<_Tp>(0); }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      /** A finite value x such that there is no other finite value y
-       *  where y < x.  */
-      static constexpr _Tp
-      lowest() throw() { return static_cast<_Tp>(0); }
-#endif
-
-      /** The @e machine @e epsilon:  the difference between 1 and the least
-	  value greater than 1 that is representable.  */
-      static _GLIBCXX_CONSTEXPR _Tp
-      epsilon() throw() { return static_cast<_Tp>(0); }
-
-      /** The maximum rounding error measurement (see LIA-1).  */
-      static _GLIBCXX_CONSTEXPR _Tp
-      round_error() throw() { return static_cast<_Tp>(0); }
-
-      /** The representation of positive infinity, if @c has_infinity.  */
-      static _GLIBCXX_CONSTEXPR _Tp
-      infinity() throw()  { return static_cast<_Tp>(0); }
-
-      /** The representation of a quiet <em>Not a Number</em>,
-	  if @c has_quiet_NaN. */
-      static _GLIBCXX_CONSTEXPR _Tp
-      quiet_NaN() throw() { return static_cast<_Tp>(0); }
-
-      /** The representation of a signaling <em>Not a Number</em>, if
-	  @c has_signaling_NaN. */
-      static _GLIBCXX_CONSTEXPR _Tp
-      signaling_NaN() throw() { return static_cast<_Tp>(0); }
-
-      /** The minimum positive denormalized value.  For types where
-	  @c has_denorm is false, this is the minimum positive normalized
-	  value.  */
-      static _GLIBCXX_CONSTEXPR _Tp
-      denorm_min() throw() { return static_cast<_Tp>(0); }
-    };
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-  template<typename _Tp>
-    struct numeric_limits<const _Tp>
-    : public numeric_limits<_Tp> { };
-
-  template<typename _Tp>
-    struct numeric_limits<volatile _Tp>
-    : public numeric_limits<_Tp> { };
-
-  template<typename _Tp>
-    struct numeric_limits<const volatile _Tp>
-    : public numeric_limits<_Tp> { };
-#endif
-
-  // Now there follow 16 explicit specializations.  Yes, 16.  Make sure
-  // you get the count right. (18 in c++0x mode)
-
-  /// numeric_limits<bool> specialization.
-  template<>
-    struct numeric_limits<bool>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR bool 
-      min() throw() { return false; }
-
-      static _GLIBCXX_CONSTEXPR bool 
-      max() throw()  { return true; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr bool
-      lowest() throw() { return min(); }
-#endif
-      static _GLIBCXX_USE_CONSTEXPR int digits = 1;
-      static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR bool 
-      epsilon() throw() { return false; }
-
-      static _GLIBCXX_CONSTEXPR bool 
-      round_error() throw() { return false; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR bool 
-      infinity() throw() { return false; }
-
-      static _GLIBCXX_CONSTEXPR bool 
-      quiet_NaN() throw() { return false; }
-
-      static _GLIBCXX_CONSTEXPR bool 
-      signaling_NaN() throw() { return false; }
-
-      static _GLIBCXX_CONSTEXPR bool 
-      denorm_min() throw() { return false; }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
-
-      // It is not clear what it means for a boolean type to trap.
-      // This is a DR on the LWG issue list.  Here, I use integer
-      // promotion semantics.
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-  /// numeric_limits<char> specialization.
-  template<>
-    struct numeric_limits<char>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR char 
-      min() throw() { return __glibcxx_min(char); }
-
-      static _GLIBCXX_CONSTEXPR char 
-      max() throw() { return __glibcxx_max(char); }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr char 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char);
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR char 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR char 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR 
-      char infinity() throw()  { return char(); }
-
-      static _GLIBCXX_CONSTEXPR char 
-      quiet_NaN() throw() { return char(); }
-
-      static _GLIBCXX_CONSTEXPR char 
-      signaling_NaN() throw() { return char(); }
-
-      static _GLIBCXX_CONSTEXPR char 
-      denorm_min() throw() { return static_cast<char>(0); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-  /// numeric_limits<signed char> specialization.
-  template<>
-    struct numeric_limits<signed char>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR signed char 
-      min() throw() { return -__SCHAR_MAX__ - 1; }
-
-      static _GLIBCXX_CONSTEXPR signed char 
-      max() throw() { return __SCHAR_MAX__; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr signed char 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 
-       = __glibcxx_digits10 (signed char);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR signed char 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR signed char 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR signed char 
-      infinity() throw() { return static_cast<signed char>(0); }
-
-      static _GLIBCXX_CONSTEXPR signed char 
-      quiet_NaN() throw() { return static_cast<signed char>(0); }
-
-      static _GLIBCXX_CONSTEXPR signed char 
-      signaling_NaN() throw() { return static_cast<signed char>(0); }
-
-      static _GLIBCXX_CONSTEXPR signed char 
-      denorm_min() throw() { return static_cast<signed char>(0); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-  /// numeric_limits<unsigned char> specialization.
-  template<>
-    struct numeric_limits<unsigned char>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR unsigned char 
-      min() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR unsigned char 
-      max() throw() { return __SCHAR_MAX__ * 2U + 1; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr unsigned char 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits 
-       = __glibcxx_digits (unsigned char);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 
-       = __glibcxx_digits10 (unsigned char);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR unsigned char 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR unsigned char 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR unsigned char 
-      infinity() throw() { return static_cast<unsigned char>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned char 
-      quiet_NaN() throw() { return static_cast<unsigned char>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned char 
-      signaling_NaN() throw() { return static_cast<unsigned char>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned char 
-      denorm_min() throw() { return static_cast<unsigned char>(0); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-  /// numeric_limits<wchar_t> specialization.
-  template<>
-    struct numeric_limits<wchar_t>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR wchar_t 
-      min() throw() { return __glibcxx_min (wchar_t); }
-
-      static _GLIBCXX_CONSTEXPR wchar_t 
-      max() throw()  { return __glibcxx_max (wchar_t); }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr wchar_t 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 
-       = __glibcxx_digits10 (wchar_t);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t);
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR wchar_t 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR wchar_t 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR wchar_t 
-      infinity() throw() { return wchar_t(); }
-
-      static _GLIBCXX_CONSTEXPR wchar_t 
-      quiet_NaN() throw() { return wchar_t(); }
-
-      static _GLIBCXX_CONSTEXPR wchar_t 
-      signaling_NaN() throw() { return wchar_t(); }
-
-      static _GLIBCXX_CONSTEXPR wchar_t 
-      denorm_min() throw() { return wchar_t(); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-  /// numeric_limits<char16_t> specialization.
-  template<>
-    struct numeric_limits<char16_t>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR char16_t 
-      min() throw() { return __glibcxx_min (char16_t); }
-
-      static _GLIBCXX_CONSTEXPR char16_t 
-      max() throw() { return __glibcxx_max (char16_t); }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr char16_t 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits 
-       = __glibcxx_digits (char16_t);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 
-       = __glibcxx_digits10 (char16_t);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed 
-       = __glibcxx_signed (char16_t);
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR char16_t 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR char16_t 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR char16_t 
-      infinity() throw()  { return char16_t(); }
-
-      static _GLIBCXX_CONSTEXPR char16_t 
-      quiet_NaN() throw() { return char16_t(); }
-
-      static _GLIBCXX_CONSTEXPR char16_t 
-      signaling_NaN() throw() { return char16_t(); }
-
-      static _GLIBCXX_CONSTEXPR char16_t 
-      denorm_min() throw() { return char16_t(); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-  /// numeric_limits<char32_t> specialization.
-  template<>
-    struct numeric_limits<char32_t>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR char32_t 
-      min() throw() { return __glibcxx_min (char32_t); }
-
-      static _GLIBCXX_CONSTEXPR char32_t 
-      max() throw() { return __glibcxx_max (char32_t); }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr char32_t 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char32_t);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 
-       = __glibcxx_digits10 (char32_t);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed 
-       = __glibcxx_signed (char32_t);
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR char32_t 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR char32_t 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR char32_t 
-      infinity() throw() { return char32_t(); }
-
-      static _GLIBCXX_CONSTEXPR char32_t 
-      quiet_NaN() throw() { return char32_t(); }
-
-      static _GLIBCXX_CONSTEXPR char32_t 
-      signaling_NaN() throw() { return char32_t(); }
-
-      static _GLIBCXX_CONSTEXPR char32_t 
-      denorm_min() throw() { return char32_t(); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-#endif
-
-  /// numeric_limits<short> specialization.
-  template<>
-    struct numeric_limits<short>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR short 
-      min() throw() { return -__SHRT_MAX__ - 1; }
-
-      static _GLIBCXX_CONSTEXPR short 
-      max() throw() { return __SHRT_MAX__; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr short 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR short 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR short 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR short 
-      infinity() throw() { return short(); }
-
-      static _GLIBCXX_CONSTEXPR short 
-      quiet_NaN() throw() { return short(); }
-
-      static _GLIBCXX_CONSTEXPR short 
-      signaling_NaN() throw() { return short(); }
-
-      static _GLIBCXX_CONSTEXPR short 
-      denorm_min() throw() { return short(); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-  /// numeric_limits<unsigned short> specialization.
-  template<>
-    struct numeric_limits<unsigned short>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR unsigned short 
-      min() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR unsigned short 
-      max() throw() { return __SHRT_MAX__ * 2U + 1; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr unsigned short 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits 
-       = __glibcxx_digits (unsigned short);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 
-       = __glibcxx_digits10 (unsigned short);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR unsigned short 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR unsigned short 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR unsigned short 
-      infinity() throw() { return static_cast<unsigned short>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned short 
-      quiet_NaN() throw() { return static_cast<unsigned short>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned short 
-      signaling_NaN() throw() { return static_cast<unsigned short>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned short 
-      denorm_min() throw() { return static_cast<unsigned short>(0); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-  /// numeric_limits<int> specialization.
-  template<>
-    struct numeric_limits<int>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR int 
-      min() throw() { return -__INT_MAX__ - 1; }
-
-      static _GLIBCXX_CONSTEXPR int 
-      max() throw() { return __INT_MAX__; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR int 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR int 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR int 
-      infinity() throw() { return static_cast<int>(0); }
-
-      static _GLIBCXX_CONSTEXPR int 
-      quiet_NaN() throw() { return static_cast<int>(0); }
-
-      static _GLIBCXX_CONSTEXPR int 
-      signaling_NaN() throw() { return static_cast<int>(0); }
-
-      static _GLIBCXX_CONSTEXPR int 
-      denorm_min() throw() { return static_cast<int>(0); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-  /// numeric_limits<unsigned int> specialization.
-  template<>
-    struct numeric_limits<unsigned int>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR unsigned int 
-      min() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR unsigned int 
-      max() throw() { return __INT_MAX__ * 2U + 1; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr unsigned int 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits 
-       = __glibcxx_digits (unsigned int);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 
-       = __glibcxx_digits10 (unsigned int);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR unsigned int 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR unsigned int 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR unsigned int 
-      infinity() throw() { return static_cast<unsigned int>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned int 
-      quiet_NaN() throw() { return static_cast<unsigned int>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned int 
-      signaling_NaN() throw() { return static_cast<unsigned int>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned int 
-      denorm_min() throw() { return static_cast<unsigned int>(0); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-  /// numeric_limits<long> specialization.
-  template<>
-    struct numeric_limits<long>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR long
-      min() throw() { return -__LONG_MAX__ - 1; }
-
-      static _GLIBCXX_CONSTEXPR long 
-      max() throw() { return __LONG_MAX__; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr long 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR long 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR long 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR long 
-      infinity() throw() { return static_cast<long>(0); }
-
-      static _GLIBCXX_CONSTEXPR long 
-      quiet_NaN() throw() { return static_cast<long>(0); }
-
-      static _GLIBCXX_CONSTEXPR long 
-      signaling_NaN() throw() { return static_cast<long>(0); }
-
-      static _GLIBCXX_CONSTEXPR long 
-      denorm_min() throw() { return static_cast<long>(0); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-  /// numeric_limits<unsigned long> specialization.
-  template<>
-    struct numeric_limits<unsigned long>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR unsigned long 
-      min() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR unsigned long 
-      max() throw() { return __LONG_MAX__ * 2UL + 1; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr unsigned long 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits 
-       = __glibcxx_digits (unsigned long);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 
-       = __glibcxx_digits10 (unsigned long);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR unsigned long 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR unsigned long 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR unsigned long 
-      infinity() throw() { return static_cast<unsigned long>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned long 
-      quiet_NaN() throw() { return static_cast<unsigned long>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned long 
-      signaling_NaN() throw() { return static_cast<unsigned long>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned long 
-      denorm_min() throw() { return static_cast<unsigned long>(0); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-  /// numeric_limits<long long> specialization.
-  template<>
-    struct numeric_limits<long long>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR long long 
-      min() throw() { return -__LONG_LONG_MAX__ - 1; }
-
-      static _GLIBCXX_CONSTEXPR long long 
-      max() throw() { return __LONG_LONG_MAX__; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr long long 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits 
-       = __glibcxx_digits (long long);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 
-       = __glibcxx_digits10 (long long);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR long long 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR long long 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR long long 
-      infinity() throw() { return static_cast<long long>(0); }
-
-      static _GLIBCXX_CONSTEXPR long long 
-      quiet_NaN() throw() { return static_cast<long long>(0); }
-
-      static _GLIBCXX_CONSTEXPR long long 
-      signaling_NaN() throw() { return static_cast<long long>(0); }
-
-      static _GLIBCXX_CONSTEXPR long long 
-      denorm_min() throw() { return static_cast<long long>(0); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-  /// numeric_limits<unsigned long long> specialization.
-  template<>
-    struct numeric_limits<unsigned long long>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR unsigned long long 
-      min() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR unsigned long long 
-      max() throw() { return __LONG_LONG_MAX__ * 2ULL + 1; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr unsigned long long 
-      lowest() throw() { return min(); }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits 
-       = __glibcxx_digits (unsigned long long);
-      static _GLIBCXX_USE_CONSTEXPR int digits10 
-       = __glibcxx_digits10 (unsigned long long);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10 = 0;
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
-      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
-
-      static _GLIBCXX_CONSTEXPR unsigned long long 
-      epsilon() throw() { return 0; }
-
-      static _GLIBCXX_CONSTEXPR unsigned long long 
-      round_error() throw() { return 0; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
-
-      static _GLIBCXX_CONSTEXPR unsigned long long 
-      infinity() throw() { return static_cast<unsigned long long>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned long long 
-      quiet_NaN() throw() { return static_cast<unsigned long long>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned long long 
-      signaling_NaN() throw() { return static_cast<unsigned long long>(0); }
-
-      static _GLIBCXX_CONSTEXPR unsigned long long 
-      denorm_min() throw() { return static_cast<unsigned long long>(0); }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_toward_zero;
-    };
-
-  /// numeric_limits<float> specialization.
-  template<>
-    struct numeric_limits<float>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR float 
-      min() throw() { return __FLT_MIN__; }
-
-      static _GLIBCXX_CONSTEXPR float 
-      max() throw() { return __FLT_MAX__; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr float 
-      lowest() throw() { return -__FLT_MAX__; }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__;
-      static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__;
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10
-	 = __glibcxx_max_digits10 (__FLT_MANT_DIG__);
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
-      static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
-
-      static _GLIBCXX_CONSTEXPR float 
-      epsilon() throw() { return __FLT_EPSILON__; }
-
-      static _GLIBCXX_CONSTEXPR float 
-      round_error() throw() { return 0.5F; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-	= bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 
-       = __glibcxx_float_has_denorm_loss;
-
-      static _GLIBCXX_CONSTEXPR float 
-      infinity() throw() { return __builtin_huge_valf (); }
-
-      static _GLIBCXX_CONSTEXPR float 
-      quiet_NaN() throw() { return __builtin_nanf (""); }
-
-      static _GLIBCXX_CONSTEXPR float 
-      signaling_NaN() throw() { return __builtin_nansf (""); }
-
-      static _GLIBCXX_CONSTEXPR float 
-      denorm_min() throw() { return __FLT_DENORM_MIN__; }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559
-	= has_infinity && has_quiet_NaN && has_denorm == denorm_present;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 
-       = __glibcxx_float_tinyness_before;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_to_nearest;
-    };
-
-#undef __glibcxx_float_has_denorm_loss
-#undef __glibcxx_float_traps
-#undef __glibcxx_float_tinyness_before
-
-  /// numeric_limits<double> specialization.
-  template<>
-    struct numeric_limits<double>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR double 
-      min() throw()  { return __DBL_MIN__; }
-
-      static _GLIBCXX_CONSTEXPR double 
-      max() throw() { return __DBL_MAX__; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr double 
-      lowest() throw() { return -__DBL_MAX__; }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__;
-      static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__;
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr int max_digits10
-	 = __glibcxx_max_digits10 (__DBL_MANT_DIG__);
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
-      static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
-
-      static _GLIBCXX_CONSTEXPR double 
-      epsilon() throw() { return __DBL_EPSILON__; }
-
-      static _GLIBCXX_CONSTEXPR double 
-      round_error() throw() { return 0.5; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-	= bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 
-        = __glibcxx_double_has_denorm_loss;
-
-      static _GLIBCXX_CONSTEXPR double 
-      infinity() throw() { return __builtin_huge_val(); }
-
-      static _GLIBCXX_CONSTEXPR double 
-      quiet_NaN() throw() { return __builtin_nan (""); }
-
-      static _GLIBCXX_CONSTEXPR double 
-      signaling_NaN() throw() { return __builtin_nans (""); }
-
-      static _GLIBCXX_CONSTEXPR double 
-      denorm_min() throw() { return __DBL_DENORM_MIN__; }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559
-	= has_infinity && has_quiet_NaN && has_denorm == denorm_present;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 
-       = __glibcxx_double_tinyness_before;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
-       = round_to_nearest;
-    };
-
-#undef __glibcxx_double_has_denorm_loss
-#undef __glibcxx_double_traps
-#undef __glibcxx_double_tinyness_before
-
-  /// numeric_limits<long double> specialization.
-  template<>
-    struct numeric_limits<long double>
-    {
-      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
-
-      static _GLIBCXX_CONSTEXPR long double 
-      min() throw() { return __LDBL_MIN__; }
-
-      static _GLIBCXX_CONSTEXPR long double 
-      max() throw() { return __LDBL_MAX__; }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static constexpr long double 
-      lowest() throw() { return -__LDBL_MAX__; }
-#endif
-
-      static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__;
-      static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__;
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      static _GLIBCXX_USE_CONSTEXPR int max_digits10
-	 = __glibcxx_max_digits10 (__LDBL_MANT_DIG__);
-#endif
-      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
-      static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
-      static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
-
-      static _GLIBCXX_CONSTEXPR long double 
-      epsilon() throw() { return __LDBL_EPSILON__; }
-
-      static _GLIBCXX_CONSTEXPR long double 
-      round_error() throw() { return 0.5L; }
-
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__;
-      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__;
-      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__;
-
-      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__;
-      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__;
-      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
-      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-	= bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
-	= __glibcxx_long_double_has_denorm_loss;
-
-      static _GLIBCXX_CONSTEXPR long double 
-      infinity() throw() { return __builtin_huge_vall (); }
-
-      static _GLIBCXX_CONSTEXPR long double 
-      quiet_NaN() throw() { return __builtin_nanl (""); }
-
-      static _GLIBCXX_CONSTEXPR long double 
-      signaling_NaN() throw() { return __builtin_nansl (""); }
-
-      static _GLIBCXX_CONSTEXPR long double 
-      denorm_min() throw() { return __LDBL_DENORM_MIN__; }
-
-      static _GLIBCXX_USE_CONSTEXPR bool is_iec559
-	= has_infinity && has_quiet_NaN && has_denorm == denorm_present;
-      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
-
-      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps;
-      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = 
-					 __glibcxx_long_double_tinyness_before;
-      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 
-						      round_to_nearest;
-    };
-
-#undef __glibcxx_long_double_has_denorm_loss
-#undef __glibcxx_long_double_traps
-#undef __glibcxx_long_double_tinyness_before
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
-#undef __glibcxx_signed
-#undef __glibcxx_min
-#undef __glibcxx_max
-#undef __glibcxx_digits
-#undef __glibcxx_digits10
-#undef __glibcxx_max_digits10
-
-#endif // _GLIBCXX_NUMERIC_LIMITS
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/new b/arm-linux-androideabi/include/c++/4.6.x-google/new
deleted file mode 100644
index 80ee3ba..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/new
+++ /dev/null
@@ -1,114 +0,0 @@
-// The -*- C++ -*- dynamic memory management header.
-
-// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-// 2003, 2004, 2005, 2006, 2007, 2009, 2010
-// Free Software Foundation
-
-// 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/>.
-
-/** @file new
- *  This is a Standard C++ Library header.
- *
- *  The header @c new defines several functions to manage dynamic memory and
- *  handling memory allocation errors; see
- *  http://gcc.gnu.org/onlinedocs/libstdc++/18_support/howto.html#4 for more.
- */
-
-#ifndef _NEW
-#define _NEW
-
-#pragma GCC system_header
-
-#include <bits/c++config.h>
-#include <exception>
-
-#pragma GCC visibility push(default)
-
-extern "C++" {
-
-namespace std 
-{
-  /**
-   *  @brief  Exception possibly thrown by @c new.
-   *  @ingroup exceptions
-   *
-   *  @c bad_alloc (or classes derived from it) is used to report allocation
-   *  errors from the throwing forms of @c new.  */
-  class bad_alloc : public exception 
-  {
-  public:
-    bad_alloc() throw() { }
-
-    // This declaration is not useless:
-    // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
-    virtual ~bad_alloc() throw();
-
-    // See comment in eh_exception.cc.
-    virtual const char* what() const throw();
-  };
-
-  struct nothrow_t { };
-
-  extern const nothrow_t nothrow;
-
-  /** If you write your own error handler to be called by @c new, it must
-   *  be of this type.  */
-  typedef void (*new_handler)();
-
-  /// Takes a replacement handler as the argument, returns the
-  /// previous handler.
-  new_handler set_new_handler(new_handler) throw();
-} // namespace std
-
-//@{
-/** These are replaceable signatures:
- *  - normal single new and delete (no arguments, throw @c bad_alloc on error)
- *  - normal array new and delete (same)
- *  - @c nothrow single new and delete (take a @c nothrow argument, return
- *    @c NULL on error)
- *  - @c nothrow array new and delete (same)
- *
- *  Placement new and delete signatures (take a memory address argument,
- *  does nothing) may not be replaced by a user's program.
-*/
-void* operator new(std::size_t) throw (std::bad_alloc);
-void* operator new[](std::size_t) throw (std::bad_alloc);
-void operator delete(void*) throw();
-void operator delete[](void*) throw();
-void* operator new(std::size_t, const std::nothrow_t&) throw();
-void* operator new[](std::size_t, const std::nothrow_t&) throw();
-void operator delete(void*, const std::nothrow_t&) throw();
-void operator delete[](void*, const std::nothrow_t&) throw();
-
-// Default placement versions of operator new.
-inline void* operator new(std::size_t, void* __p) throw() { return __p; }
-inline void* operator new[](std::size_t, void* __p) throw() { return __p; }
-
-// Default placement versions of operator delete.
-inline void  operator delete  (void*, void*) throw() { }
-inline void  operator delete[](void*, void*) throw() { }
-//@}
-} // extern "C++"
-
-#pragma GCC visibility pop
-
-#endif
diff --git a/arm-linux-androideabi/include/c++/4.6.x-google/typeinfo b/arm-linux-androideabi/include/c++/4.6.x-google/typeinfo
deleted file mode 100644
index 69311d6..0000000
--- a/arm-linux-androideabi/include/c++/4.6.x-google/typeinfo
+++ /dev/null
@@ -1,224 +0,0 @@
-// RTTI support for -*- C++ -*-
-// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-// 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
-// Free Software Foundation
-//
-// 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/>.
-
-/** @file typeinfo
- *  This is a Standard C++ Library header.
- */
-
-#ifndef _TYPEINFO
-#define _TYPEINFO
-
-#pragma GCC system_header
-
-#include <exception>
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-#include <bits/hash_bytes.h>
-#endif
-
-
-#pragma GCC visibility push(default)
-
-extern "C++" {
-
-namespace __cxxabiv1
-{
-  class __class_type_info;
-} // namespace __cxxabiv1
-
-// Determine whether typeinfo names for the same type are merged (in which
-// case comparison can just compare pointers) or not (in which case strings
-// must be compared), and whether comparison is to be implemented inline or
-// not.  We used to do inline pointer comparison by default if weak symbols
-// are available, but even with weak symbols sometimes names are not merged
-// when objects are loaded with RTLD_LOCAL, so now we always use strcmp by
-// default.  For ABI compatibility, we do the strcmp inline if weak symbols
-// are available, and out-of-line if not.  Out-of-line pointer comparison
-// is used where the object files are to be portable to multiple systems,
-// some of which may not be able to use pointer comparison, but the
-// particular system for which libstdc++ is being built can use pointer
-// comparison; in particular for most ARM EABI systems, where the ABI
-// specifies out-of-line comparison.  The compiler's target configuration
-// can override the defaults by defining __GXX_TYPEINFO_EQUALITY_INLINE to
-// 1 or 0 to indicate whether or not comparison is inline, and
-// __GXX_MERGED_TYPEINFO_NAMES to 1 or 0 to indicate whether or not pointer
-// comparison can be used.
-
-#ifndef __GXX_MERGED_TYPEINFO_NAMES
-// By default, typeinfo names are not merged.
-#define __GXX_MERGED_TYPEINFO_NAMES 0
-#endif
-
-// By default follow the old inline rules to avoid ABI changes.
-#ifndef __GXX_TYPEINFO_EQUALITY_INLINE
-  #if !__GXX_WEAK__
-    #define __GXX_TYPEINFO_EQUALITY_INLINE 0
-  #else
-    #define __GXX_TYPEINFO_EQUALITY_INLINE 1
-  #endif
-#endif
-
-namespace std 
-{
-  /**
-   *  @brief  Part of RTTI.
-   *
-   *  The @c type_info class describes type information generated by
-   *  an implementation.
-  */
-  class type_info 
-  {
-  public:
-    /** Destructor first. Being the first non-inline virtual function, this
-     *  controls in which translation unit the vtable is emitted. The
-     *  compiler makes use of that information to know where to emit
-     *  the runtime-mandated type_info structures in the new-abi.  */
-    virtual ~type_info();
-
-    /** Returns an @e implementation-defined byte string; this is not
-     *  portable between compilers!  */
-    const char* name() const
-    { return __name[0] == '*' ? __name + 1 : __name; }
-
-#if !__GXX_TYPEINFO_EQUALITY_INLINE
-    // In old abi, or when weak symbols are not supported, there can
-    // be multiple instances of a type_info object for one
-    // type. Uniqueness must use the _name value, not object address.
-    bool before(const type_info& __arg) const;
-    bool operator==(const type_info& __arg) const;
-#else
-  #if !__GXX_MERGED_TYPEINFO_NAMES
-    /** Returns true if @c *this precedes @c __arg in the implementation's
-     *  collation order.  */
-    // Even with the new abi, on systems that support dlopen
-    // we can run into cases where type_info names aren't merged,
-    // so we still need to do string comparison.
-    bool before(const type_info& __arg) const
-    { return (__name[0] == '*' && __arg.__name[0] == '*')
-	? __name < __arg.__name
-	: __builtin_strcmp (__name, __arg.__name) < 0; }
-
-    bool operator==(const type_info& __arg) const
-    {
-      return ((__name == __arg.__name)
-	      || (__name[0] != '*' &&
-		  __builtin_strcmp (__name, __arg.__name) == 0));
-    }
-  #else
-    // On some targets we can rely on type_info's NTBS being unique,
-    // and therefore address comparisons are sufficient.
-    bool before(const type_info& __arg) const
-    { return __name < __arg.__name; }
-
-    bool operator==(const type_info& __arg) const
-    { return __name == __arg.__name; }
-  #endif
-#endif
-    bool operator!=(const type_info& __arg) const
-    { return !operator==(__arg); }
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-    size_t hash_code() const throw()
-    {
-#  if !__GXX_MERGED_TYPEINFO_NAMES
-      return _Hash_bytes(name(), __builtin_strlen(name()),
-			 static_cast<size_t>(0xc70f6907UL));
-#  else
-      return reinterpret_cast<size_t>(__name);
-#  endif
-    }
-#endif // __GXX_EXPERIMENTAL_CXX0X__
-
-    // Return true if this is a pointer type of some kind
-    virtual bool __is_pointer_p() const;
-
-    // Return true if this is a function type
-    virtual bool __is_function_p() const;
-
-    // Try and catch a thrown type. Store an adjusted pointer to the
-    // caught type in THR_OBJ. If THR_TYPE is not a pointer type, then
-    // THR_OBJ points to the thrown object. If THR_TYPE is a pointer
-    // type, then THR_OBJ is the pointer itself. OUTER indicates the
-    // number of outer pointers, and whether they were const
-    // qualified.
-    virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj,
-			    unsigned __outer) const;
-
-    // Internally used during catch matching
-    virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target,
-			     void **__obj_ptr) const;
-
-  protected:
-    const char *__name;
-    
-    explicit type_info(const char *__n): __name(__n) { }
-    
-  private:
-    /// Assigning type_info is not supported.
-    type_info& operator=(const type_info&);
-    type_info(const type_info&);
-  };
-
-  /**
-   *  @brief  Thrown during incorrect typecasting.
-   *  @ingroup exceptions
-   *
-   *  If you attempt an invalid @c dynamic_cast expression, an instance of
-   *  this class (or something derived from this class) is thrown.  */
-  class bad_cast : public exception 
-  {
-  public:
-    bad_cast() throw() { }
-
-    // This declaration is not useless:
-    // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
-    virtual ~bad_cast() throw();
-
-    // See comment in eh_exception.cc.
-    virtual const char* what() const throw();
-  };
-  
-  /** 
-   *  @brief Thrown when a NULL pointer in a @c typeid expression is used.
-   *  @ingroup exceptions
-   */
-  class bad_typeid : public exception 
-  {
-  public:
-    bad_typeid () throw() { }
-
-    // This declaration is not useless:
-    // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
-    virtual ~bad_typeid() throw();
-
-    // See comment in eh_exception.cc.
-    virtual const char* what() const throw();
-  };
-} // namespace std
-
-#pragma GCC visibility pop
-
-} // extern "C++"
-#endif
diff --git a/arm-linux-androideabi/lib/armv7-a/libstdc++*-gdb.py b/arm-linux-androideabi/lib/armv7-a/libstdc++*-gdb.py
deleted file mode 100644
index 651021e..0000000
--- a/arm-linux-androideabi/lib/armv7-a/libstdc++*-gdb.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- python -*-
-# Copyright (C) 2009, 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 program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-import sys
-import gdb
-import os
-import os.path
-
-pythondir = '/usr/local/share/gcc-4.6.x-google/python'
-libdir = '/usr/local/arm-linux-androideabi/lib/armv7-a'
-
-# This file might be loaded when there is no current objfile.  This
-# can happen if the user loads it manually.  In this case we don't
-# update sys.path; instead we just hope the user managed to do that
-# beforehand.
-if gdb.current_objfile () is not None:
-    # Update module path.  We want to find the relative path from libdir
-    # to pythondir, and then we want to apply that relative path to the
-    # directory holding the objfile with which this file is associated.
-    # This preserves relocatability of the gcc tree.
-
-    # Do a simple normalization that removes duplicate separators.
-    pythondir = os.path.normpath (pythondir)
-    libdir = os.path.normpath (libdir)
-
-    prefix = os.path.commonprefix ([libdir, pythondir])
-    # In some bizarre configuration we might have found a match in the
-    # middle of a directory name.
-    if prefix[-1] != '/':
-        prefix = os.path.dirname (prefix) + '/'
-
-    # Strip off the prefix.
-    pythondir = pythondir[len (prefix):]
-    libdir = libdir[len (prefix):]
-
-    # Compute the ".."s needed to get from libdir to the prefix.
-    dotdots = ('..' + os.sep) * len (libdir.split (os.sep))
-
-    objfile = gdb.current_objfile ().filename
-    dir_ = os.path.join (os.path.dirname (objfile), dotdots, pythondir)
-
-    if not dir_ in sys.path:
-        sys.path.insert(0, dir_)
-
-# Load the pretty-printers.
-from libstdcxx.v6.printers import register_libstdcxx_printers
-register_libstdcxx_printers (gdb.current_objfile ())
diff --git a/arm-linux-androideabi/lib/armv7-a/libsupc++.a b/arm-linux-androideabi/lib/armv7-a/libsupc++.a
deleted file mode 100644
index 3cca755..0000000
--- a/arm-linux-androideabi/lib/armv7-a/libsupc++.a
+++ /dev/null
Binary files differ
diff --git a/arm-linux-androideabi/lib/armv7-a/thumb/libstdc++*-gdb.py b/arm-linux-androideabi/lib/armv7-a/thumb/libstdc++*-gdb.py
deleted file mode 100644
index c3ba79d..0000000
--- a/arm-linux-androideabi/lib/armv7-a/thumb/libstdc++*-gdb.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- python -*-
-# Copyright (C) 2009, 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 program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-import sys
-import gdb
-import os
-import os.path
-
-pythondir = '/usr/local/share/gcc-4.6.x-google/python'
-libdir = '/usr/local/arm-linux-androideabi/lib/armv7-a/thumb'
-
-# This file might be loaded when there is no current objfile.  This
-# can happen if the user loads it manually.  In this case we don't
-# update sys.path; instead we just hope the user managed to do that
-# beforehand.
-if gdb.current_objfile () is not None:
-    # Update module path.  We want to find the relative path from libdir
-    # to pythondir, and then we want to apply that relative path to the
-    # directory holding the objfile with which this file is associated.
-    # This preserves relocatability of the gcc tree.
-
-    # Do a simple normalization that removes duplicate separators.
-    pythondir = os.path.normpath (pythondir)
-    libdir = os.path.normpath (libdir)
-
-    prefix = os.path.commonprefix ([libdir, pythondir])
-    # In some bizarre configuration we might have found a match in the
-    # middle of a directory name.
-    if prefix[-1] != '/':
-        prefix = os.path.dirname (prefix) + '/'
-
-    # Strip off the prefix.
-    pythondir = pythondir[len (prefix):]
-    libdir = libdir[len (prefix):]
-
-    # Compute the ".."s needed to get from libdir to the prefix.
-    dotdots = ('..' + os.sep) * len (libdir.split (os.sep))
-
-    objfile = gdb.current_objfile ().filename
-    dir_ = os.path.join (os.path.dirname (objfile), dotdots, pythondir)
-
-    if not dir_ in sys.path:
-        sys.path.insert(0, dir_)
-
-# Load the pretty-printers.
-from libstdcxx.v6.printers import register_libstdcxx_printers
-register_libstdcxx_printers (gdb.current_objfile ())
diff --git a/arm-linux-androideabi/lib/armv7-a/thumb/libsupc++.a b/arm-linux-androideabi/lib/armv7-a/thumb/libsupc++.a
deleted file mode 100644
index 017a361..0000000
--- a/arm-linux-androideabi/lib/armv7-a/thumb/libsupc++.a
+++ /dev/null
Binary files differ
diff --git a/arm-linux-androideabi/lib/armv7-a/thumb/libsupc++.la b/arm-linux-androideabi/lib/armv7-a/thumb/libsupc++.la
deleted file mode 100755
index 18de723..0000000
--- a/arm-linux-androideabi/lib/armv7-a/thumb/libsupc++.la
+++ /dev/null
@@ -1,41 +0,0 @@
-# libsupc++.la - a libtool library file
-# Generated by libtool (GNU libtool 1.3134 2009-11-29) 2.2.7a
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname=''
-
-# Names of this library.
-library_names=''
-
-# The name of the static archive.
-old_library='libsupc++.a'
-
-# Linker flags that can not go in dependency_libs.
-inherited_linker_flags=''
-
-# Libraries that this one depends upon.
-dependency_libs=''
-
-# Names of additional weak libraries provided by this library
-weak_library_names=''
-
-# Version information for libsupc++.
-current=0
-age=0
-revision=0
-
-# Is this an already installed library?
-installed=yes
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=no
-
-# Files to dlopen/dlpreopen
-dlopen=''
-dlpreopen=''
-
-# Directory that this library needs to be installed in:
-libdir='/usr/local/arm-linux-androideabi/lib/armv7-a/thumb'
diff --git a/arm-linux-androideabi/lib/libstdc++*-gdb.py b/arm-linux-androideabi/lib/libstdc++*-gdb.py
deleted file mode 100644
index b4a471a..0000000
--- a/arm-linux-androideabi/lib/libstdc++*-gdb.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- python -*-
-# Copyright (C) 2009, 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 program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-import sys
-import gdb
-import os
-import os.path
-
-pythondir = '/usr/local/share/gcc-4.6.x-google/python'
-libdir = '/usr/local/arm-linux-androideabi/lib'
-
-# This file might be loaded when there is no current objfile.  This
-# can happen if the user loads it manually.  In this case we don't
-# update sys.path; instead we just hope the user managed to do that
-# beforehand.
-if gdb.current_objfile () is not None:
-    # Update module path.  We want to find the relative path from libdir
-    # to pythondir, and then we want to apply that relative path to the
-    # directory holding the objfile with which this file is associated.
-    # This preserves relocatability of the gcc tree.
-
-    # Do a simple normalization that removes duplicate separators.
-    pythondir = os.path.normpath (pythondir)
-    libdir = os.path.normpath (libdir)
-
-    prefix = os.path.commonprefix ([libdir, pythondir])
-    # In some bizarre configuration we might have found a match in the
-    # middle of a directory name.
-    if prefix[-1] != '/':
-        prefix = os.path.dirname (prefix) + '/'
-
-    # Strip off the prefix.
-    pythondir = pythondir[len (prefix):]
-    libdir = libdir[len (prefix):]
-
-    # Compute the ".."s needed to get from libdir to the prefix.
-    dotdots = ('..' + os.sep) * len (libdir.split (os.sep))
-
-    objfile = gdb.current_objfile ().filename
-    dir_ = os.path.join (os.path.dirname (objfile), dotdots, pythondir)
-
-    if not dir_ in sys.path:
-        sys.path.insert(0, dir_)
-
-# Load the pretty-printers.
-from libstdcxx.v6.printers import register_libstdcxx_printers
-register_libstdcxx_printers (gdb.current_objfile ())
diff --git a/arm-linux-androideabi/lib/libsupc++.a b/arm-linux-androideabi/lib/libsupc++.a
deleted file mode 100644
index 4277abb..0000000
--- a/arm-linux-androideabi/lib/libsupc++.a
+++ /dev/null
Binary files differ
diff --git a/arm-linux-androideabi/lib/libsupc++.la b/arm-linux-androideabi/lib/libsupc++.la
deleted file mode 100755
index a71231e..0000000
--- a/arm-linux-androideabi/lib/libsupc++.la
+++ /dev/null
@@ -1,41 +0,0 @@
-# libsupc++.la - a libtool library file
-# Generated by libtool (GNU libtool 1.3134 2009-11-29) 2.2.7a
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname=''
-
-# Names of this library.
-library_names=''
-
-# The name of the static archive.
-old_library='libsupc++.a'
-
-# Linker flags that can not go in dependency_libs.
-inherited_linker_flags=''
-
-# Libraries that this one depends upon.
-dependency_libs=''
-
-# Names of additional weak libraries provided by this library
-weak_library_names=''
-
-# Version information for libsupc++.
-current=0
-age=0
-revision=0
-
-# Is this an already installed library?
-installed=yes
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=no
-
-# Files to dlopen/dlpreopen
-dlopen=''
-dlpreopen=''
-
-# Directory that this library needs to be installed in:
-libdir='/usr/local/arm-linux-androideabi/lib'
diff --git a/arm-linux-androideabi/lib/thumb/libstdc++*-gdb.py b/arm-linux-androideabi/lib/thumb/libstdc++*-gdb.py
deleted file mode 100644
index fc62633..0000000
--- a/arm-linux-androideabi/lib/thumb/libstdc++*-gdb.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- python -*-
-# Copyright (C) 2009, 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 program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-import sys
-import gdb
-import os
-import os.path
-
-pythondir = '/usr/local/share/gcc-4.6.x-google/python'
-libdir = '/usr/local/arm-linux-androideabi/lib/thumb'
-
-# This file might be loaded when there is no current objfile.  This
-# can happen if the user loads it manually.  In this case we don't
-# update sys.path; instead we just hope the user managed to do that
-# beforehand.
-if gdb.current_objfile () is not None:
-    # Update module path.  We want to find the relative path from libdir
-    # to pythondir, and then we want to apply that relative path to the
-    # directory holding the objfile with which this file is associated.
-    # This preserves relocatability of the gcc tree.
-
-    # Do a simple normalization that removes duplicate separators.
-    pythondir = os.path.normpath (pythondir)
-    libdir = os.path.normpath (libdir)
-
-    prefix = os.path.commonprefix ([libdir, pythondir])
-    # In some bizarre configuration we might have found a match in the
-    # middle of a directory name.
-    if prefix[-1] != '/':
-        prefix = os.path.dirname (prefix) + '/'
-
-    # Strip off the prefix.
-    pythondir = pythondir[len (prefix):]
-    libdir = libdir[len (prefix):]
-
-    # Compute the ".."s needed to get from libdir to the prefix.
-    dotdots = ('..' + os.sep) * len (libdir.split (os.sep))
-
-    objfile = gdb.current_objfile ().filename
-    dir_ = os.path.join (os.path.dirname (objfile), dotdots, pythondir)
-
-    if not dir_ in sys.path:
-        sys.path.insert(0, dir_)
-
-# Load the pretty-printers.
-from libstdcxx.v6.printers import register_libstdcxx_printers
-register_libstdcxx_printers (gdb.current_objfile ())
diff --git a/arm-linux-androideabi/lib/thumb/libsupc++.a b/arm-linux-androideabi/lib/thumb/libsupc++.a
deleted file mode 100644
index fba4e79..0000000
--- a/arm-linux-androideabi/lib/thumb/libsupc++.a
+++ /dev/null
Binary files differ
diff --git a/arm-linux-androideabi/lib/thumb/libsupc++.la b/arm-linux-androideabi/lib/thumb/libsupc++.la
deleted file mode 100755
index ddbcc53..0000000
--- a/arm-linux-androideabi/lib/thumb/libsupc++.la
+++ /dev/null
@@ -1,41 +0,0 @@
-# libsupc++.la - a libtool library file
-# Generated by libtool (GNU libtool 1.3134 2009-11-29) 2.2.7a
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname=''
-
-# Names of this library.
-library_names=''
-
-# The name of the static archive.
-old_library='libsupc++.a'
-
-# Linker flags that can not go in dependency_libs.
-inherited_linker_flags=''
-
-# Libraries that this one depends upon.
-dependency_libs=''
-
-# Names of additional weak libraries provided by this library
-weak_library_names=''
-
-# Version information for libsupc++.
-current=0
-age=0
-revision=0
-
-# Is this an already installed library?
-installed=yes
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=no
-
-# Files to dlopen/dlpreopen
-dlopen=''
-dlpreopen=''
-
-# Directory that this library needs to be installed in:
-libdir='/usr/local/arm-linux-androideabi/lib/thumb'
diff --git a/bin/arm-linux-androideabi-addr2line b/bin/arm-linux-androideabi-addr2line
index 7343947..63803ae 100755
--- a/bin/arm-linux-androideabi-addr2line
+++ b/bin/arm-linux-androideabi-addr2line
Binary files differ
diff --git a/bin/arm-linux-androideabi-ar b/bin/arm-linux-androideabi-ar
index ce7908d..c123d83 100755
--- a/bin/arm-linux-androideabi-ar
+++ b/bin/arm-linux-androideabi-ar
Binary files differ
diff --git a/bin/arm-linux-androideabi-as b/bin/arm-linux-androideabi-as
index 1d71fe7..da34349 100755
--- a/bin/arm-linux-androideabi-as
+++ b/bin/arm-linux-androideabi-as
Binary files differ
diff --git a/bin/arm-linux-androideabi-c++ b/bin/arm-linux-androideabi-c++
index d77f89f..09fa36d 100755
--- a/bin/arm-linux-androideabi-c++
+++ b/bin/arm-linux-androideabi-c++
Binary files differ
diff --git a/bin/arm-linux-androideabi-c++filt b/bin/arm-linux-androideabi-c++filt
index 0dd1ba1..a0b9690 100755
--- a/bin/arm-linux-androideabi-c++filt
+++ b/bin/arm-linux-androideabi-c++filt
Binary files differ
diff --git a/bin/arm-linux-androideabi-cpp b/bin/arm-linux-androideabi-cpp
index 0a86573..1f78507 100755
--- a/bin/arm-linux-androideabi-cpp
+++ b/bin/arm-linux-androideabi-cpp
Binary files differ
diff --git a/bin/arm-linux-androideabi-elfedit b/bin/arm-linux-androideabi-elfedit
index 1a23652..4699d6b 100755
--- a/bin/arm-linux-androideabi-elfedit
+++ b/bin/arm-linux-androideabi-elfedit
Binary files differ
diff --git a/bin/arm-linux-androideabi-g++ b/bin/arm-linux-androideabi-g++
index d77f89f..09fa36d 100755
--- a/bin/arm-linux-androideabi-g++
+++ b/bin/arm-linux-androideabi-g++
Binary files differ
diff --git a/bin/arm-linux-androideabi-gcc b/bin/arm-linux-androideabi-gcc
index c5ef353..3db3c8a 100755
--- a/bin/arm-linux-androideabi-gcc
+++ b/bin/arm-linux-androideabi-gcc
Binary files differ
diff --git a/bin/arm-linux-androideabi-gcc-4.6.x-google b/bin/arm-linux-androideabi-gcc-4.6.x-google
index c5ef353..3db3c8a 100755
--- a/bin/arm-linux-androideabi-gcc-4.6.x-google
+++ b/bin/arm-linux-androideabi-gcc-4.6.x-google
Binary files differ
diff --git a/bin/arm-linux-androideabi-gcov b/bin/arm-linux-androideabi-gcov
index 32dc748..24980b2 100755
--- a/bin/arm-linux-androideabi-gcov
+++ b/bin/arm-linux-androideabi-gcov
Binary files differ
diff --git a/bin/arm-linux-androideabi-gdb b/bin/arm-linux-androideabi-gdb
index c6c8c99..6f8e9ef 100755
--- a/bin/arm-linux-androideabi-gdb
+++ b/bin/arm-linux-androideabi-gdb
Binary files differ
diff --git a/bin/arm-linux-androideabi-gdbtui b/bin/arm-linux-androideabi-gdbtui
index dc5f1a2..6fd73f4 100755
--- a/bin/arm-linux-androideabi-gdbtui
+++ b/bin/arm-linux-androideabi-gdbtui
Binary files differ
diff --git a/bin/arm-linux-androideabi-gprof b/bin/arm-linux-androideabi-gprof
index 9c2a689..cc0841d 100755
--- a/bin/arm-linux-androideabi-gprof
+++ b/bin/arm-linux-androideabi-gprof
Binary files differ
diff --git a/bin/arm-linux-androideabi-ld b/bin/arm-linux-androideabi-ld
index 83a60f5..fc1c99b 100755
--- a/bin/arm-linux-androideabi-ld
+++ b/bin/arm-linux-androideabi-ld
Binary files differ
diff --git a/bin/arm-linux-androideabi-ld.bfd b/bin/arm-linux-androideabi-ld.bfd
index 4edd050..34b54bf 100755
--- a/bin/arm-linux-androideabi-ld.bfd
+++ b/bin/arm-linux-androideabi-ld.bfd
Binary files differ
diff --git a/bin/arm-linux-androideabi-ld.gold b/bin/arm-linux-androideabi-ld.gold
index 83a60f5..fc1c99b 100755
--- a/bin/arm-linux-androideabi-ld.gold
+++ b/bin/arm-linux-androideabi-ld.gold
Binary files differ
diff --git a/bin/arm-linux-androideabi-nm b/bin/arm-linux-androideabi-nm
index 22d6c79..fe4aefa 100755
--- a/bin/arm-linux-androideabi-nm
+++ b/bin/arm-linux-androideabi-nm
Binary files differ
diff --git a/bin/arm-linux-androideabi-objcopy b/bin/arm-linux-androideabi-objcopy
index d47a13b..08cc747 100755
--- a/bin/arm-linux-androideabi-objcopy
+++ b/bin/arm-linux-androideabi-objcopy
Binary files differ
diff --git a/bin/arm-linux-androideabi-objdump b/bin/arm-linux-androideabi-objdump
index 96f6147..7dbbe25 100755
--- a/bin/arm-linux-androideabi-objdump
+++ b/bin/arm-linux-androideabi-objdump
Binary files differ
diff --git a/bin/arm-linux-androideabi-ranlib b/bin/arm-linux-androideabi-ranlib
index bf6d827..2ef7098 100755
--- a/bin/arm-linux-androideabi-ranlib
+++ b/bin/arm-linux-androideabi-ranlib
Binary files differ
diff --git a/bin/arm-linux-androideabi-readelf b/bin/arm-linux-androideabi-readelf
index 709191f..7d06fff 100755
--- a/bin/arm-linux-androideabi-readelf
+++ b/bin/arm-linux-androideabi-readelf
Binary files differ
diff --git a/bin/arm-linux-androideabi-run b/bin/arm-linux-androideabi-run
index 89e1eb8..231f17f 100755
--- a/bin/arm-linux-androideabi-run
+++ b/bin/arm-linux-androideabi-run
Binary files differ
diff --git a/bin/arm-linux-androideabi-size b/bin/arm-linux-androideabi-size
index 96e5cd9..256d3a2 100755
--- a/bin/arm-linux-androideabi-size
+++ b/bin/arm-linux-androideabi-size
Binary files differ
diff --git a/bin/arm-linux-androideabi-strings b/bin/arm-linux-androideabi-strings
index be922de..a8e2305 100755
--- a/bin/arm-linux-androideabi-strings
+++ b/bin/arm-linux-androideabi-strings
Binary files differ
diff --git a/bin/arm-linux-androideabi-strip b/bin/arm-linux-androideabi-strip
index 5d47d5a..eba2fd1 100755
--- a/bin/arm-linux-androideabi-strip
+++ b/bin/arm-linux-androideabi-strip
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtbegin.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtbegin.o
index 9a10fba..d993401 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtbegin.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtbegin.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtbeginS.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtbeginS.o
index eb4dc73..6f33d78 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtbeginS.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtbeginT.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtbeginT.o
index 9a10fba..d993401 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtbeginT.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtend.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtend.o
index fc5c2b1..99bf9ba 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtend.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtend.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtendS.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtendS.o
index fc5c2b1..99bf9ba 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtendS.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/crtendS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/libgcc.a b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/libgcc.a
index 23f8785..e90d73a 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/libgcc.a
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/libgcc.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/libgcov.a b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/libgcov.a
index beabcdd..f7be74d 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/libgcov.a
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/libgcov.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtbegin.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtbegin.o
index 914363d..cc257bb 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtbegin.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtbegin.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtbeginS.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtbeginS.o
index 6b27470..da82210 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtbeginS.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtbeginT.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtbeginT.o
index 914363d..cc257bb 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtbeginT.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtend.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtend.o
index ce46f0e..d0f18f6 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtend.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtend.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtendS.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtendS.o
index ce46f0e..d0f18f6 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtendS.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/crtendS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/libgcc.a b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/libgcc.a
index 459e31b..ed98865 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/libgcc.a
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/libgcc.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/libgcov.a b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/libgcov.a
index c27bd36..121bba6 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/libgcov.a
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a/thumb/libgcov.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/crtbegin.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/crtbegin.o
index 13f02f0..ffef2ab 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/crtbegin.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/crtbegin.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/crtbeginS.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/crtbeginS.o
index e21b0d8..2ddd86e 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/crtbeginS.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/crtbeginT.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/crtbeginT.o
index 13f02f0..ffef2ab 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/crtbeginT.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/crtend.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/crtend.o
index 5d99f38..3547126 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/crtend.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/crtend.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/crtendS.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/crtendS.o
index 5d99f38..3547126 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/crtendS.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/crtendS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/gcov-src/libgcov.c b/lib/gcc/arm-linux-androideabi/4.6.x-google/gcov-src/libgcov.c
index 2110858..613c1f4 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/gcov-src/libgcov.c
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/gcov-src/libgcov.c
@@ -810,6 +810,7 @@
   gcov_unsigned_t tag, length;
 
   eof_pos = 0;
+  summary_pos = 0;
 
   tag = gcov_read_unsigned ();
   if (tag)
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/install-tools/mkheaders.conf b/lib/gcc/arm-linux-androideabi/4.6.x-google/install-tools/mkheaders.conf
index 270332f..e68c751 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/install-tools/mkheaders.conf
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/install-tools/mkheaders.conf
@@ -1,3 +1,3 @@
-SYSTEM_HEADER_DIR="/tmp/android/android-toolchain-build/v15/install/sysroot${sysroot_headers_suffix}/usr/include"
+SYSTEM_HEADER_DIR="/tmp/android-17841/install/sysroot${sysroot_headers_suffix}/usr/include"
 OTHER_FIXINCLUDES_DIRS=""
 STMP_FIXINC="stmp-fixinc"
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/libgcc.a b/lib/gcc/arm-linux-androideabi/4.6.x-google/libgcc.a
index c5f4f85..5cda6f8 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/libgcc.a
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/libgcc.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/libgcov.a b/lib/gcc/arm-linux-androideabi/4.6.x-google/libgcov.a
index c19e2e9..a9fbfa2 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/libgcov.a
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/libgcov.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/auto-host.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/auto-host.h
index 0ce9aa0..c56621f 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/auto-host.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/auto-host.h
@@ -1584,12 +1584,6 @@
 #endif
 
 
-/* The linker hash style */
-#ifndef USED_FOR_TARGET
-/* #undef LINKER_HASH_STYLE */
-#endif
-
-
 /* Define to the name of the LTO plugin DSO that must be passed to the
    linker's -plugin=LIB option. */
 #ifndef USED_FOR_TARGET
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/basic-block.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/basic-block.h
index 1544e4c..4de6a50 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/basic-block.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/basic-block.h
@@ -744,6 +744,7 @@
 extern void compute_available (sbitmap *, sbitmap *, sbitmap *, sbitmap *);
 
 /* In predict.c */
+extern bool maybe_hot_count_p (gcov_type);
 extern bool maybe_hot_bb_p (const_basic_block);
 extern bool maybe_hot_edge_p (edge);
 extern bool probably_never_executed_bb_p (const_basic_block);
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-common.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-family/c-common.h
similarity index 99%
rename from lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-common.h
rename to lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-family/c-common.h
index 566aba7..0bddae1 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-common.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-family/c-common.h
@@ -607,11 +607,12 @@
 /* The supported C++ dialects.  */
 
 enum cxx_dialect {
-  /* C++98  */
+  /* C++98 with TC1  */
   cxx98,
-  /* Experimental features that are likely to become part of
-     C++0x.  */
-  cxx0x
+  cxx03 = cxx98,
+  /* C++11  */
+  cxx0x,
+  cxx11 = cxx0x
 };
 
 /* The C++ dialect being used. C++98 is the default.  */
@@ -916,7 +917,8 @@
 
 extern void verify_sequence_points (tree);
 
-extern tree fold_offsetof (tree, tree);
+extern tree fold_offsetof_1 (tree);
+extern tree fold_offsetof (tree);
 
 /* Places where an lvalue, or modifiable lvalue, may be required.
    Used to select diagnostic messages in lvalue_error and
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-objc.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-family/c-objc.h
similarity index 100%
rename from lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-objc.h
rename to lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-family/c-objc.h
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-pragma.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-family/c-pragma.h
similarity index 100%
rename from lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-pragma.h
rename to lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-family/c-pragma.h
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-pretty-print.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-family/c-pretty-print.h
similarity index 99%
rename from lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-pretty-print.h
rename to lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-family/c-pretty-print.h
index f0daa4a..ed6e9b5 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-pretty-print.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/c-family/c-pretty-print.h
@@ -23,7 +23,7 @@
 #define GCC_C_PRETTY_PRINTER
 
 #include "tree.h"
-#include "c-common.h"
+#include "c-family/c-common.h"
 #include "pretty-print.h"
 
 
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cfgloop.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cfgloop.h
index 0ff44de..c6178e8 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cfgloop.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cfgloop.h
@@ -235,6 +235,7 @@
 extern bool loop_exits_to_bb_p (struct loop *, basic_block);
 extern bool loop_exits_from_bb_p (struct loop *, basic_block);
 extern void mark_loop_exit_edges (void);
+extern location_t get_loop_location (struct loop *loop);
 
 /* Loops & cfg manipulation.  */
 extern basic_block *get_loop_body (const struct loop *);
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cgraph.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cgraph.h
index f30c9ba..4a12b59 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cgraph.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cgraph.h
@@ -235,6 +235,8 @@
 
   /* Expected number of executions: calculated in profile.c.  */
   gcov_type count;
+  /* Maximum count of any basic block in the function.  */
+  gcov_type max_bb_count;
   /* How to scale counts at materialization time; used to merge
      LTO units with different number of profile runs.  */
   int count_materialization_scale;
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/config/arm/arm.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/config/arm/arm.h
index 151d314..0e2e827 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/config/arm/arm.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/config/arm/arm.h
@@ -2451,9 +2451,9 @@
   ARM_BUILTIN_MAX = ARM_BUILTIN_NEON_BASE  /* FIXME: Wrong!  */
 };
 
-/* Do not emit .note.GNU-stack by default.  */
+/* Do emit .note.GNU-stack by default.  */
 #ifndef NEED_INDICATE_EXEC_STACK
-#define NEED_INDICATE_EXEC_STACK	0
+#define NEED_INDICATE_EXEC_STACK	1
 #endif
 
 /* The maximum number of parallel loads or stores we support in an ldm/stm
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/configargs.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/configargs.h
index 6b219ae..e8cd067 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/configargs.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/configargs.h
@@ -1,5 +1,5 @@
 /* Generated automatically. */
-static const char configuration_arguments[] = "/usr/local/google/home/android/v15release/./src/build/../gcc/gcc-4.6/configure --prefix=/usr/local --target=arm-linux-androideabi --host=i686-linux-gnu --build=i686-linux-gnu --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/tmp/android/android-toolchain-build/v15/obj/temp-install --with-mpfr=/tmp/android/android-toolchain-build/v15/obj/temp-install --with-mpc=/tmp/android/android-toolchain-build/v15/obj/temp-install --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-sjlj-exceptions --disable-shared --disable-tls --with-float=soft --with-fpu=vfp --with-arch=armv5te --enable-target-optspace --disable-hosted-libstdcxx --enable-cxx-flags='-fexceptions -frtti' --with-gcc-version=4.6 --with-binutils-version=2.21 --with-gmp-version=4.2.4 --with-mpfr-version=2.4.1 --with-gdb-version=7.1.x --with-arch=armv5te --with-sysroot=/tmp/android/android-toolchain-build/v15/install/sysroot --with-prefix=/tmp/android/android-toolchain-build/v15/install --with-gold-version=2.21 --enable-gold --program-transform-name='s&^&arm-linux-androideabi-&' --enable-gold=default";
+static const char configuration_arguments[] = "/tmp/android-17841/src/build/../gcc/gcc-4.6/configure --prefix=/usr/local --target=arm-linux-androideabi --host=i686-linux-gnu --build=i686-linux-gnu --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/tmp/android-17841/obj/temp-install --with-mpfr=/tmp/android-17841/obj/temp-install --with-mpc=/tmp/android-17841/obj/temp-install --without-ppl --without-cloog --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared --disable-tls --disable-libitm --with-float=soft --with-fpu=vfp --with-arch=armv5te --enable-target-optspace --with-gcc-version=4.6 --with-binutils-version=2.21 --with-gmp-version=4.2.4 --with-mpfr-version=2.4.1 --with-gdb-version=7.1.x --with-arch=armv5te --with-sysroot=/tmp/android-17841/install/sysroot --with-prefix=/tmp/android-17841/install --with-gold-version=2.21 --enable-gold --program-transform-name='s&^&arm-linux-androideabi-&' --enable-gold=default";
 static const char thread_model[] = "posix";
 
 static const struct {
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cp/cp-tree.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cp/cp-tree.h
index 9745797..daf4714 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cp/cp-tree.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cp/cp-tree.h
@@ -4723,6 +4723,7 @@
 extern bool user_provided_p			(tree);
 extern bool type_has_user_provided_constructor  (tree);
 extern bool type_has_user_provided_default_constructor (tree);
+extern tree default_init_uninitialized_part (tree);
 extern bool synthesized_default_constructor_is_constexpr (tree);
 extern bool type_has_constexpr_default_constructor (tree);
 extern bool type_has_virtual_destructor		(tree);
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cpplib.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cpplib.h
index 8fa2881..0f32863 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cpplib.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/cpplib.h
@@ -157,7 +157,7 @@
 /* C language kind, used when calling cpp_create_reader.  */
 enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_GNUC1X,
 	     CLK_STDC89, CLK_STDC94, CLK_STDC99, CLK_STDC1X,
-	     CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX0X, CLK_CXX0X, CLK_ASM};
+	     CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX11, CLK_CXX11, CLK_ASM};
 
 /* Payload of a NUMBER, STRING, CHAR or COMMENT token.  */
 struct GTY(()) cpp_string {
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/flag-types.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/flag-types.h
index 430ac93..02a13f4 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/flag-types.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/flag-types.h
@@ -204,4 +204,11 @@
   MAX_VERBOSITY_LEVEL
 };
 
+/* flag_opt_info verbosity levels.  */
+enum opt_info_verbosity_levels {
+  OPT_INFO_NONE = 0,
+  OPT_INFO_MIN  = 1,
+  OPT_INFO_MED  = 2,
+  OPT_INFO_MAX  = 3
+};
 #endif /* ! GCC_FLAG_TYPES_H */
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/ggc.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/ggc.h
index 1258f25..00db925 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/ggc.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/ggc.h
@@ -266,8 +266,9 @@
 extern struct alloc_zone tree_id_zone;
 
 #define ggc_alloc_rtvec_sized(NELT)                                     \
-    (ggc_alloc_zone_vec_rtvec_def (sizeof (rtx),                        \
-                                   sizeof (struct rtvec_def) + ((NELT) - 1), \
+    (ggc_alloc_zone_vec_rtvec_def (1,                                   \
+                                   sizeof (struct rtvec_def)            \
+				   + ((NELT) - 1) * sizeof (rtx),	\
                                    &rtl_zone))
 
 #if defined (GGC_ZONE) && !defined (GENERATOR_FILE)
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/gtype-desc.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/gtype-desc.h
index fc54591..ff6d7f3 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/gtype-desc.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/gtype-desc.h
@@ -254,6 +254,7 @@
  gt_ggc_e_18VEC_dcall_entry_gc,
  gt_ggc_e_20VEC_dcall_entry_base,
  gt_ggc_e_12dcall_struct,
+ gt_ggc_e_22cached_dw_loc_list_def,
  gt_ggc_e_16var_loc_list_def,
  gt_ggc_e_12var_loc_node,
  gt_ggc_e_20VEC_die_arg_entry_gc,
@@ -662,6 +663,7 @@
  gt_e_P18saved_module_scope4htab,
  gt_e_SP9tree_node12splay_tree_s,
  gt_e_P10vcall_insn4htab,
+ gt_e_P22cached_dw_loc_list_def4htab,
  gt_e_P16var_loc_list_def4htab,
  gt_e_P10die_struct4htab,
  gt_e_P15dwarf_file_data4htab,
@@ -2545,6 +2547,14 @@
 #define ggc_alloc_zone_cleared_dcall_struct(z) ((struct dcall_struct *)(ggc_internal_zone_cleared_alloc_stat (z, sizeof (struct dcall_struct) MEM_STAT_INFO)))
 #define ggc_alloc_zone_vec_dcall_struct(n, z) ((struct dcall_struct *)(ggc_internal_zone_vec_alloc_stat (z, sizeof (struct dcall_struct), n MEM_STAT_INFO)))
 #define ggc_alloc_zone_cleared_vec_dcall_struct(n, z) ((struct dcall_struct *)(ggc_internal_zone_cleared_vec_alloc_stat (z, sizeof (struct dcall_struct), n MEM_STAT_INFO)))
+#define ggc_alloc_cached_dw_loc_list_def() ((struct cached_dw_loc_list_def *)(ggc_internal_alloc_stat (sizeof (struct cached_dw_loc_list_def) MEM_STAT_INFO)))
+#define ggc_alloc_cleared_cached_dw_loc_list_def() ((struct cached_dw_loc_list_def *)(ggc_internal_cleared_alloc_stat (sizeof (struct cached_dw_loc_list_def) MEM_STAT_INFO)))
+#define ggc_alloc_vec_cached_dw_loc_list_def(n) ((struct cached_dw_loc_list_def *)(ggc_internal_vec_alloc_stat (sizeof (struct cached_dw_loc_list_def), n MEM_STAT_INFO)))
+#define ggc_alloc_cleared_vec_cached_dw_loc_list_def(n) ((struct cached_dw_loc_list_def *)(ggc_internal_cleared_vec_alloc_stat (sizeof (struct cached_dw_loc_list_def), n MEM_STAT_INFO)))
+#define ggc_alloc_zone_cached_dw_loc_list_def(z) ((struct cached_dw_loc_list_def *)(ggc_internal_zone_alloc_stat (z, sizeof (struct cached_dw_loc_list_def) MEM_STAT_INFO)))
+#define ggc_alloc_zone_cleared_cached_dw_loc_list_def(z) ((struct cached_dw_loc_list_def *)(ggc_internal_zone_cleared_alloc_stat (z, sizeof (struct cached_dw_loc_list_def) MEM_STAT_INFO)))
+#define ggc_alloc_zone_vec_cached_dw_loc_list_def(n, z) ((struct cached_dw_loc_list_def *)(ggc_internal_zone_vec_alloc_stat (z, sizeof (struct cached_dw_loc_list_def), n MEM_STAT_INFO)))
+#define ggc_alloc_zone_cleared_vec_cached_dw_loc_list_def(n, z) ((struct cached_dw_loc_list_def *)(ggc_internal_zone_cleared_vec_alloc_stat (z, sizeof (struct cached_dw_loc_list_def), n MEM_STAT_INFO)))
 #define ggc_alloc_var_loc_list_def() ((struct var_loc_list_def *)(ggc_internal_alloc_stat (sizeof (struct var_loc_list_def) MEM_STAT_INFO)))
 #define ggc_alloc_cleared_var_loc_list_def() ((struct var_loc_list_def *)(ggc_internal_cleared_alloc_stat (sizeof (struct var_loc_list_def) MEM_STAT_INFO)))
 #define ggc_alloc_vec_var_loc_list_def(n) ((struct var_loc_list_def *)(ggc_internal_vec_alloc_stat (sizeof (struct var_loc_list_def), n MEM_STAT_INFO)))
@@ -5829,6 +5839,13 @@
 #define ggc_alloc_zone_dcall_entry(z) ((dcall_entry *)(ggc_internal_zone_alloc_stat (z, sizeof (dcall_entry) MEM_STAT_INFO)))
 #define ggc_alloc_zone_cleared_dcall_entry(z) ((dcall_entry *)(ggc_internal_zone_cleared_alloc_stat (z, sizeof (dcall_entry) MEM_STAT_INFO)))
 #define ggc_alloc_zone_cleared_vec_dcall_entry(n, z) ((dcall_entry *)(ggc_internal_zone_cleared_vec_alloc_stat (z, sizeof (dcall_entry), n MEM_STAT_INFO)))
+#define ggc_alloc_cached_dw_loc_list() ((cached_dw_loc_list *)(ggc_internal_alloc_stat (sizeof (cached_dw_loc_list) MEM_STAT_INFO)))
+#define ggc_alloc_cleared_cached_dw_loc_list() ((cached_dw_loc_list *)(ggc_internal_cleared_alloc_stat (sizeof (cached_dw_loc_list) MEM_STAT_INFO)))
+#define ggc_alloc_vec_cached_dw_loc_list(n) ((cached_dw_loc_list *)(ggc_internal_vec_alloc_stat (sizeof (cached_dw_loc_list), n MEM_STAT_INFO)))
+#define ggc_alloc_cleared_vec_cached_dw_loc_list(n) ((cached_dw_loc_list *)(ggc_internal_cleared_vec_alloc_stat (sizeof (cached_dw_loc_list), n MEM_STAT_INFO)))
+#define ggc_alloc_zone_cached_dw_loc_list(z) ((cached_dw_loc_list *)(ggc_internal_zone_alloc_stat (z, sizeof (cached_dw_loc_list) MEM_STAT_INFO)))
+#define ggc_alloc_zone_cleared_cached_dw_loc_list(z) ((cached_dw_loc_list *)(ggc_internal_zone_cleared_alloc_stat (z, sizeof (cached_dw_loc_list) MEM_STAT_INFO)))
+#define ggc_alloc_zone_cleared_vec_cached_dw_loc_list(n, z) ((cached_dw_loc_list *)(ggc_internal_zone_cleared_vec_alloc_stat (z, sizeof (cached_dw_loc_list), n MEM_STAT_INFO)))
 #define ggc_alloc_var_loc_list() ((var_loc_list *)(ggc_internal_alloc_stat (sizeof (var_loc_list) MEM_STAT_INFO)))
 #define ggc_alloc_cleared_var_loc_list() ((var_loc_list *)(ggc_internal_cleared_alloc_stat (sizeof (var_loc_list) MEM_STAT_INFO)))
 #define ggc_alloc_vec_var_loc_list(n) ((var_loc_list *)(ggc_internal_vec_alloc_stat (sizeof (var_loc_list), n MEM_STAT_INFO)))
@@ -6744,6 +6761,10 @@
   if (X != NULL) gt_ggc_mx_VEC_dcall_entry_gc (X);\
   } while (0)
 extern void gt_ggc_mx_VEC_dcall_entry_gc (void *);
+#define gt_ggc_m_22cached_dw_loc_list_def(X) do { \
+  if (X != NULL) gt_ggc_mx_cached_dw_loc_list_def (X);\
+  } while (0)
+extern void gt_ggc_mx_cached_dw_loc_list_def (void *);
 #define gt_ggc_m_16var_loc_list_def(X) do { \
   if (X != NULL) gt_ggc_mx_var_loc_list_def (X);\
   } while (0)
@@ -7198,6 +7219,7 @@
 extern void gt_ggc_m_P18saved_module_scope4htab (void *);
 extern void gt_ggc_m_SP9tree_node12splay_tree_s (void *);
 extern void gt_ggc_m_P10vcall_insn4htab (void *);
+extern void gt_ggc_m_P22cached_dw_loc_list_def4htab (void *);
 extern void gt_ggc_m_P16var_loc_list_def4htab (void *);
 extern void gt_ggc_m_P10die_struct4htab (void *);
 extern void gt_ggc_m_P15dwarf_file_data4htab (void *);
@@ -7597,6 +7619,10 @@
   if (X != NULL) gt_pch_nx_VEC_dcall_entry_gc (X);\
   } while (0)
 extern void gt_pch_nx_VEC_dcall_entry_gc (void *);
+#define gt_pch_n_22cached_dw_loc_list_def(X) do { \
+  if (X != NULL) gt_pch_nx_cached_dw_loc_list_def (X);\
+  } while (0)
+extern void gt_pch_nx_cached_dw_loc_list_def (void *);
 #define gt_pch_n_16var_loc_list_def(X) do { \
   if (X != NULL) gt_pch_nx_var_loc_list_def (X);\
   } while (0)
@@ -8051,6 +8077,7 @@
 extern void gt_pch_n_P18saved_module_scope4htab (void *);
 extern void gt_pch_n_SP9tree_node12splay_tree_s (void *);
 extern void gt_pch_n_P10vcall_insn4htab (void *);
+extern void gt_pch_n_P22cached_dw_loc_list_def4htab (void *);
 extern void gt_pch_n_P16var_loc_list_def4htab (void *);
 extern void gt_pch_n_P10die_struct4htab (void *);
 extern void gt_pch_n_P15dwarf_file_data4htab (void *);
@@ -8259,6 +8286,8 @@
     (void *, void *, gt_pointer_operator, void *);
 extern void gt_pch_p_18VEC_dcall_entry_gc
     (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_22cached_dw_loc_list_def
+    (void *, void *, gt_pointer_operator, void *);
 extern void gt_pch_p_16var_loc_list_def
     (void *, void *, gt_pointer_operator, void *);
 extern void gt_pch_p_12var_loc_node
@@ -8542,6 +8571,8 @@
     (void *, void *, gt_pointer_operator, void *);
 extern void gt_pch_p_P10vcall_insn4htab
     (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_P22cached_dw_loc_list_def4htab
+    (void *, void *, gt_pointer_operator, void *);
 extern void gt_pch_p_P16var_loc_list_def4htab
     (void *, void *, gt_pointer_operator, void *);
 extern void gt_pch_p_P10die_struct4htab
@@ -8610,6 +8641,7 @@
 extern void * ggc_alloc_splay_tree_saved_module_scope_htab (int, void *);
 extern void * ggc_alloc_splay_tree_str_tree_node_splay_tree_s (int, void *);
 extern void * ggc_alloc_splay_tree_vcall_insn_htab (int, void *);
+extern void * ggc_alloc_splay_tree_cached_dw_loc_list_def_htab (int, void *);
 extern void * ggc_alloc_splay_tree_var_loc_list_def_htab (int, void *);
 extern void * ggc_alloc_splay_tree_die_struct_htab (int, void *);
 extern void * ggc_alloc_splay_tree_dwarf_file_data_htab (int, void *);
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/l-ipo.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/l-ipo.h
new file mode 100644
index 0000000..d1c3dbf
--- /dev/null
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/l-ipo.h
@@ -0,0 +1,61 @@
+/* Copyright (C) 2009. Free Software Foundation, Inc.
+   Contributed by Xinliang David Li (davidxl@google.com) and
+                  Raksit Ashok  (raksit@google.com)
+
+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.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_L_IPO_H
+#define GCC_L_IPO_H
+
+/* Primary module's id (non-zero). If no module-info was read in, this will
+   be zero.  */
+extern unsigned primary_module_id;
+
+/* The macro to test if the compilation is in light weight IPO mode.
+   In this mode, the source module being compiled will be compiled
+   together with 0 or more auxiliary modules.  */
+#define L_IPO_COMP_MODE (primary_module_id != 0)
+
+/* The macro to test if the current module being parsed is the
+   primary source module.  */
+#define L_IPO_IS_PRIMARY_MODULE (current_module_id == primary_module_id)
+
+/* The macro to test if the current module being parsed is an
+   auxiliary source module.  */
+#define L_IPO_IS_AUXILIARY_MODULE (L_IPO_COMP_MODE && current_module_id \
+                             && current_module_id != primary_module_id)
+
+/* Current module id.  */
+extern unsigned current_module_id;
+extern struct gcov_module_info **module_infos;
+extern int is_last_module (unsigned mod_id);
+
+extern unsigned num_in_fnames;
+extern int at_eof;
+extern bool parser_parsing_start;
+
+void push_module_scope (void);
+void pop_module_scope (void);
+tree lipo_save_decl (tree src);
+void lipo_restore_decl (tree, tree);
+void add_decl_to_current_module_scope (tree decl, void *b);
+int lipo_cmp_type (tree t1, tree t2);
+tree get_type_or_decl_name (tree);
+int equivalent_struct_types_for_tbaa (const_tree t1, const_tree t2);
+extern void copy_defined_module_set (tree, tree);
+
+#endif
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/options.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/options.h
index f28242c..27a9f7d 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/options.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/options.h
@@ -621,6 +621,12 @@
 #define warn_mudflap global_options.x_warn_mudflap
 #endif
 #ifdef GENERATOR_FILE
+extern int warn_narrowing;
+#else
+  int x_warn_narrowing;
+#define warn_narrowing global_options.x_warn_narrowing
+#endif
+#ifdef GENERATOR_FILE
 extern int warn_nested_externs;
 #else
   int x_warn_nested_externs;
@@ -1005,6 +1011,12 @@
 #define warn_unsupported_lock_name global_options.x_warn_unsupported_lock_name
 #endif
 #ifdef GENERATOR_FILE
+extern int warn_thread_optimization;
+#else
+  int x_warn_thread_optimization;
+#define warn_thread_optimization global_options.x_warn_thread_optimization
+#endif
+#ifdef GENERATOR_FILE
 extern int warn_traditional;
 #else
   int x_warn_traditional;
@@ -1767,6 +1779,12 @@
 #define flag_inline_functions_called_once global_options.x_flag_inline_functions_called_once
 #endif
 #ifdef GENERATOR_FILE
+extern int flag_inline_hot_caller;
+#else
+  int x_flag_inline_hot_caller;
+#define flag_inline_hot_caller global_options.x_flag_inline_hot_caller
+#endif
+#ifdef GENERATOR_FILE
 extern int flag_inline_small_functions;
 #else
   int x_flag_inline_small_functions;
@@ -2145,6 +2163,12 @@
 #define flag_openmp global_options.x_flag_openmp
 #endif
 #ifdef GENERATOR_FILE
+extern int flag_opt_info;
+#else
+  int x_flag_opt_info;
+#define flag_opt_info global_options.x_flag_opt_info
+#endif
+#ifdef GENERATOR_FILE
 extern int flag_optimize_locality;
 #else
   int x_flag_optimize_locality;
@@ -2319,6 +2343,12 @@
 #define flag_record_gcc_switches global_options.x_flag_record_gcc_switches
 #endif
 #ifdef GENERATOR_FILE
+extern int flag_record_gcc_switches_in_elf;
+#else
+  int x_flag_record_gcc_switches_in_elf;
+#define flag_record_gcc_switches_in_elf global_options.x_flag_record_gcc_switches_in_elf
+#endif
+#ifdef GENERATOR_FILE
 extern int flag_reduced_reflection;
 #else
   int x_flag_reduced_reflection;
@@ -2397,10 +2427,16 @@
 #define flag_ripa_no_promote_always_inline global_options.x_flag_ripa_no_promote_always_inline
 #endif
 #ifdef GENERATOR_FILE
-extern int flag_ripa_verbose;
+extern int flag_ripa_peel_size_limit;
 #else
-  int x_flag_ripa_verbose;
-#define flag_ripa_verbose global_options.x_flag_ripa_verbose
+  int x_flag_ripa_peel_size_limit;
+#define flag_ripa_peel_size_limit global_options.x_flag_ripa_peel_size_limit
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ripa_unroll_size_limit;
+#else
+  int x_flag_ripa_unroll_size_limit;
+#define flag_ripa_unroll_size_limit global_options.x_flag_ripa_unroll_size_limit
 #endif
 #ifdef GENERATOR_FILE
 extern int flag_rounding_math;
@@ -2607,6 +2643,12 @@
 #define flag_single_precision_constant global_options.x_flag_single_precision_constant
 #endif
 #ifdef GENERATOR_FILE
+extern int flag_sized_delete;
+#else
+  int x_flag_sized_delete;
+#define flag_sized_delete global_options.x_flag_sized_delete
+#endif
+#ifdef GENERATOR_FILE
 extern int flag_split_ivs_in_unroller;
 #else
   int x_flag_split_ivs_in_unroller;
@@ -3463,6 +3505,7 @@
   signed char x_flag_if_conversion2;
   signed char x_flag_inline_functions;
   signed char x_flag_inline_functions_called_once;
+  signed char x_flag_inline_hot_caller;
   signed char x_flag_inline_small_functions;
   signed char x_flag_ipa_cp;
   signed char x_flag_ipa_cp_clone;
@@ -3488,6 +3531,7 @@
   signed char x_flag_non_call_exceptions;
   signed char x_flag_nothrow_opt;
   signed char x_flag_omit_frame_pointer;
+  signed char x_flag_opt_info;
   signed char x_flag_regmove;
   signed char x_flag_optimize_sibling_calls;
   signed char x_flag_pack_struct;
@@ -3504,6 +3548,8 @@
   signed char x_flag_reorder_functions;
   signed char x_flag_rerun_cse_after_loop;
   signed char x_flag_resched_modulo_sched;
+  signed char x_flag_ripa_peel_size_limit;
+  signed char x_flag_ripa_unroll_size_limit;
   signed char x_flag_rounding_math;
   signed char x_flag_rtti;
   signed char x_flag_sched_critical_path_heuristic;
@@ -3532,6 +3578,7 @@
   signed char x_flag_signaling_nans;
   signed char x_flag_signed_zeros;
   signed char x_flag_single_precision_constant;
+  signed char x_flag_sized_delete;
   signed char x_flag_split_ivs_in_unroller;
   signed char x_flag_split_wide_types;
   signed char x_flag_strict_aliasing;
@@ -3855,939 +3902,952 @@
   OPT_Wbuiltin_macro_redefined = 173,        /* -Wbuiltin-macro-redefined */
   OPT_Wc___compat = 174,                     /* -Wc++-compat */
   OPT_Wc__0x_compat = 175,                   /* -Wc++0x-compat */
-  OPT_Wcast_align = 176,                     /* -Wcast-align */
-  OPT_Wcast_qual = 177,                      /* -Wcast-qual */
-  OPT_Wchar_concat = 178,                    /* -Wchar-concat */
-  OPT_Wchar_subscripts = 179,                /* -Wchar-subscripts */
-  OPT_Wcharacter_truncation = 180,           /* -Wcharacter-truncation */
-  OPT_Wclobbered = 181,                      /* -Wclobbered */
-  OPT_Wcomment = 182,                        /* -Wcomment */
-  /* OPT_Wcomments = 183, */                 /* -Wcomments */
-  OPT_Wcondition_assign = 184,               /* -Wcondition-assign */
-  OPT_Wconstructor_name = 185,               /* -Wconstructor-name */
-  OPT_Wconversion = 186,                     /* -Wconversion */
-  OPT_Wconversion_extra = 187,               /* -Wconversion-extra */
-  OPT_Wconversion_null = 188,                /* -Wconversion-null */
-  OPT_Wcoverage_mismatch = 189,              /* -Wcoverage-mismatch */
-  OPT_Wcpp = 190,                            /* -Wcpp */
-  OPT_Wctor_dtor_privacy = 191,              /* -Wctor-dtor-privacy */
-  OPT_Wdeclaration_after_statement = 192,    /* -Wdeclaration-after-statement */
-  OPT_Wdep_ann = 193,                        /* -Wdep-ann */
-  OPT_Wdeprecated = 194,                     /* -Wdeprecated */
-  OPT_Wdeprecated_declarations = 195,        /* -Wdeprecated-declarations */
-  OPT_Wdisabled_optimization = 196,          /* -Wdisabled-optimization */
-  OPT_Wdiscouraged = 197,                    /* -Wdiscouraged */
-  OPT_Wdiv_by_zero = 198,                    /* -Wdiv-by-zero */
-  OPT_Wdouble_promotion = 199,               /* -Wdouble-promotion */
-  OPT_Weffc__ = 200,                         /* -Weffc++ */
-  OPT_Wempty_block = 201,                    /* -Wempty-block */
-  OPT_Wempty_body = 202,                     /* -Wempty-body */
-  OPT_Wendif_labels = 203,                   /* -Wendif-labels */
-  OPT_Wenum_compare = 204,                   /* -Wenum-compare */
-  OPT_Wenum_identifier = 205,                /* -Wenum-identifier */
-  OPT_Wenum_switch = 206,                    /* -Wenum-switch */
-  OPT_Werror = 207,                          /* -Werror */
-  /* OPT_Werror_implicit_function_declaration = 208, *//* -Werror-implicit-function-declaration */
-  OPT_Werror_ = 209,                         /* -Werror= */
-  OPT_Wextra = 210,                          /* -Wextra */
-  OPT_Wextraneous_semicolon = 211,           /* -Wextraneous-semicolon */
-  OPT_Wfallthrough = 212,                    /* -Wfallthrough */
-  OPT_Wfatal_errors = 213,                   /* -Wfatal-errors */
-  OPT_Wfield_hiding = 214,                   /* -Wfield-hiding */
-  OPT_Wfinal_bound = 215,                    /* -Wfinal-bound */
-  OPT_Wfinally = 216,                        /* -Wfinally */
-  OPT_Wfloat_equal = 217,                    /* -Wfloat-equal */
-  OPT_Wforbidden = 218,                      /* -Wforbidden */
-  OPT_Wformat = 219,                         /* -Wformat */
-  OPT_Wformat_contains_nul = 220,            /* -Wformat-contains-nul */
-  OPT_Wformat_extra_args = 221,              /* -Wformat-extra-args */
-  OPT_Wformat_nonliteral = 222,              /* -Wformat-nonliteral */
-  OPT_Wformat_security = 223,                /* -Wformat-security */
-  OPT_Wformat_y2k = 224,                     /* -Wformat-y2k */
-  OPT_Wformat_zero_length = 225,             /* -Wformat-zero-length */
-  OPT_Wformat_ = 226,                        /* -Wformat= */
-  OPT_Wframe_larger_than_ = 227,             /* -Wframe-larger-than= */
-  OPT_Whiding = 228,                         /* -Whiding */
-  OPT_Wignored_qualifiers = 229,             /* -Wignored-qualifiers */
-  OPT_Wimplicit = 230,                       /* -Wimplicit */
-  OPT_Wimplicit_function_declaration = 231,  /* -Wimplicit-function-declaration */
-  OPT_Wimplicit_int = 232,                   /* -Wimplicit-int */
-  OPT_Wimplicit_interface = 233,             /* -Wimplicit-interface */
-  OPT_Wimplicit_procedure = 234,             /* -Wimplicit-procedure */
-  /* OPT_Wimport = 235, */                   /* -Wimport */
-  OPT_Windirect_static = 236,                /* -Windirect-static */
-  OPT_Winit_self = 237,                      /* -Winit-self */
-  OPT_Winline = 238,                         /* -Winline */
-  OPT_Wint_to_pointer_cast = 239,            /* -Wint-to-pointer-cast */
-  OPT_Wintf_annotation = 240,                /* -Wintf-annotation */
-  OPT_Wintf_non_inherited = 241,             /* -Wintf-non-inherited */
-  OPT_Wintrinsic_shadow = 242,               /* -Wintrinsic-shadow */
-  OPT_Wintrinsics_std = 243,                 /* -Wintrinsics-std */
-  OPT_Winvalid_offsetof = 244,               /* -Winvalid-offsetof */
-  OPT_Winvalid_pch = 245,                    /* -Winvalid-pch */
-  OPT_Wjavadoc = 246,                        /* -Wjavadoc */
-  OPT_Wjump_misses_init = 247,               /* -Wjump-misses-init */
-  OPT_Wl_ = 248,                             /* -Wl, */
-  /* OPT_Wlarger_than_ = 249, */             /* -Wlarger-than- */
-  OPT_Wlarger_than_ = 250,                   /* -Wlarger-than= */
-  OPT_Wline_truncation = 251,                /* -Wline-truncation */
-  OPT_Wlocal_hiding = 252,                   /* -Wlocal-hiding */
-  OPT_Wlogical_op = 253,                     /* -Wlogical-op */
-  OPT_Wlong_long = 254,                      /* -Wlong-long */
-  OPT_Wmain = 255,                           /* -Wmain */
-  OPT_Wmasked_catch_block = 256,             /* -Wmasked-catch-block */
-  OPT_Wmaybe_uninitialized = 257,            /* -Wmaybe-uninitialized */
-  OPT_Wmissing_braces = 258,                 /* -Wmissing-braces */
-  OPT_Wmissing_declarations = 259,           /* -Wmissing-declarations */
-  OPT_Wmissing_field_initializers = 260,     /* -Wmissing-field-initializers */
-  OPT_Wmissing_format_attribute = 261,       /* -Wmissing-format-attribute */
-  OPT_Wmissing_include_dirs = 262,           /* -Wmissing-include-dirs */
-  OPT_Wmissing_noreturn = 263,               /* -Wmissing-noreturn */
-  OPT_Wmissing_parameter_type = 264,         /* -Wmissing-parameter-type */
-  OPT_Wmissing_prototypes = 265,             /* -Wmissing-prototypes */
-  OPT_Wmudflap = 266,                        /* -Wmudflap */
-  OPT_Wmultichar = 267,                      /* -Wmultichar */
-  OPT_Wnested_externs = 268,                 /* -Wnested-externs */
-  OPT_Wnls = 269,                            /* -Wnls */
-  OPT_Wno_effect_assign = 270,               /* -Wno-effect-assign */
-  OPT_Wnoexcept = 271,                       /* -Wnoexcept */
-  OPT_Wnon_template_friend = 272,            /* -Wnon-template-friend */
-  OPT_Wnon_virtual_dtor = 273,               /* -Wnon-virtual-dtor */
-  OPT_Wnonnull = 274,                        /* -Wnonnull */
-  OPT_Wnormalized_ = 275,                    /* -Wnormalized= */
-  OPT_Wnull = 276,                           /* -Wnull */
-  OPT_Wold_style_cast = 277,                 /* -Wold-style-cast */
-  OPT_Wold_style_declaration = 278,          /* -Wold-style-declaration */
-  OPT_Wold_style_definition = 279,           /* -Wold-style-definition */
-  OPT_Wout_of_date = 280,                    /* -Wout-of-date */
-  OPT_Wover_ann = 281,                       /* -Wover-ann */
-  OPT_Woverflow = 282,                       /* -Woverflow */
-  OPT_Woverlength_strings = 283,             /* -Woverlength-strings */
-  OPT_Woverloaded_virtual = 284,             /* -Woverloaded-virtual */
-  OPT_Woverride_init = 285,                  /* -Woverride-init */
-  OPT_Wp_ = 286,                             /* -Wp, */
-  OPT_Wpacked = 287,                         /* -Wpacked */
-  OPT_Wpacked_bitfield_compat = 288,         /* -Wpacked-bitfield-compat */
-  OPT_Wpadded = 289,                         /* -Wpadded */
-  OPT_Wparam_assign = 290,                   /* -Wparam-assign */
-  OPT_Wparentheses = 291,                    /* -Wparentheses */
-  OPT_Wpkg_default_method = 292,             /* -Wpkg-default-method */
-  OPT_Wpmf_conversions = 293,                /* -Wpmf-conversions */
-  OPT_Wpointer_arith = 294,                  /* -Wpointer-arith */
-  OPT_Wpointer_sign = 295,                   /* -Wpointer-sign */
-  OPT_Wpointer_to_int_cast = 296,            /* -Wpointer-to-int-cast */
-  OPT_Wpragmas = 297,                        /* -Wpragmas */
-  OPT_Wproperty_assign_default = 298,        /* -Wproperty-assign-default */
-  OPT_Wprotocol = 299,                       /* -Wprotocol */
-  OPT_Wpsabi = 300,                          /* -Wpsabi */
-  OPT_Wraw = 301,                            /* -Wraw */
-  OPT_Wreal_conversion = 302,                /* -Wreal-conversion */
-  OPT_Wreal_q_constant = 303,                /* -Wreal-q-constant */
-  OPT_Wredundant_decls = 304,                /* -Wredundant-decls */
-  OPT_Wredundant_modifiers = 305,            /* -Wredundant-modifiers */
-  OPT_Wreorder = 306,                        /* -Wreorder */
-  OPT_Wreturn_type = 307,                    /* -Wreturn-type */
-  OPT_Wripa_opt_mismatch = 308,              /* -Wripa-opt-mismatch */
-  OPT_Wselector = 309,                       /* -Wselector */
-  OPT_Wself_assign = 310,                    /* -Wself-assign */
-  OPT_Wself_assign_non_pod = 311,            /* -Wself-assign-non-pod */
-  OPT_Wsequence_point = 312,                 /* -Wsequence-point */
-  OPT_Wserial = 313,                         /* -Wserial */
-  OPT_Wshadow = 314,                         /* -Wshadow */
-  OPT_Wshadow_compatible_local = 315,        /* -Wshadow-compatible-local */
-  OPT_Wshadow_local = 316,                   /* -Wshadow-local */
-  OPT_Wsign_compare = 317,                   /* -Wsign-compare */
-  OPT_Wsign_conversion = 318,                /* -Wsign-conversion */
-  OPT_Wsign_promo = 319,                     /* -Wsign-promo */
-  OPT_Wspecial_param_hiding = 320,           /* -Wspecial-param-hiding */
-  OPT_Wstack_protector = 321,                /* -Wstack-protector */
-  OPT_Wstatic_access = 322,                  /* -Wstatic-access */
-  OPT_Wstatic_receiver = 323,                /* -Wstatic-receiver */
-  OPT_Wstrict_aliasing = 324,                /* -Wstrict-aliasing */
-  OPT_Wstrict_aliasing_ = 325,               /* -Wstrict-aliasing= */
-  OPT_Wstrict_null_sentinel = 326,           /* -Wstrict-null-sentinel */
-  OPT_Wstrict_overflow = 327,                /* -Wstrict-overflow */
-  OPT_Wstrict_overflow_ = 328,               /* -Wstrict-overflow= */
-  OPT_Wstrict_prototypes = 329,              /* -Wstrict-prototypes */
-  OPT_Wstrict_selector_match = 330,          /* -Wstrict-selector-match */
-  OPT_Wsuggest_attribute_const = 331,        /* -Wsuggest-attribute=const */
-  OPT_Wsuggest_attribute_noreturn = 332,     /* -Wsuggest-attribute=noreturn */
-  OPT_Wsuggest_attribute_pure = 333,         /* -Wsuggest-attribute=pure */
-  OPT_Wsuppress = 334,                       /* -Wsuppress */
-  OPT_Wsurprising = 335,                     /* -Wsurprising */
-  OPT_Wswitch = 336,                         /* -Wswitch */
-  OPT_Wswitch_default = 337,                 /* -Wswitch-default */
-  OPT_Wswitch_enum = 338,                    /* -Wswitch-enum */
-  OPT_Wsync_nand = 339,                      /* -Wsync-nand */
-  OPT_Wsynth = 340,                          /* -Wsynth */
-  OPT_Wsynthetic_access = 341,               /* -Wsynthetic-access */
-  OPT_Wsystem_headers = 342,                 /* -Wsystem-headers */
-  OPT_Wtabs = 343,                           /* -Wtabs */
-  OPT_Wtasks = 344,                          /* -Wtasks */
-  OPT_Wthread_attr_bind_param = 345,         /* -Wthread-attr-bind-param */
-  OPT_Wthread_mismatched_lock_acq_rel = 346, /* -Wthread-mismatched-lock-acq-rel */
-  OPT_Wthread_mismatched_lock_order = 347,   /* -Wthread-mismatched-lock-order */
-  OPT_Wthread_reentrant_lock = 348,          /* -Wthread-reentrant-lock */
-  OPT_Wthread_safety = 349,                  /* -Wthread-safety */
-  OPT_Wthread_unguarded_func = 350,          /* -Wthread-unguarded-func */
-  OPT_Wthread_unguarded_var = 351,           /* -Wthread-unguarded-var */
-  OPT_Wthread_unsupported_lock_name = 352,   /* -Wthread-unsupported-lock-name */
-  OPT_Wtraditional = 353,                    /* -Wtraditional */
-  OPT_Wtraditional_conversion = 354,         /* -Wtraditional-conversion */
-  OPT_Wtrampolines = 355,                    /* -Wtrampolines */
-  OPT_Wtrigraphs = 356,                      /* -Wtrigraphs */
-  OPT_Wtype_hiding = 357,                    /* -Wtype-hiding */
-  OPT_Wtype_limits = 358,                    /* -Wtype-limits */
-  OPT_Wuncheck = 359,                        /* -Wuncheck */
-  OPT_Wundeclared_selector = 360,            /* -Wundeclared-selector */
-  OPT_Wundef = 361,                          /* -Wundef */
-  OPT_Wunderflow = 362,                      /* -Wunderflow */
-  OPT_Wuninitialized = 363,                  /* -Wuninitialized */
-  OPT_Wunknown_pragmas = 364,                /* -Wunknown-pragmas */
-  OPT_Wunnecessary_else = 365,               /* -Wunnecessary-else */
-  OPT_Wunqualified_field = 366,              /* -Wunqualified-field */
-  /* OPT_Wunreachable_code = 367, */         /* -Wunreachable-code */
-  OPT_Wunsafe_loop_optimizations = 368,      /* -Wunsafe-loop-optimizations */
-  OPT_Wunsuffixed_float_constants = 369,     /* -Wunsuffixed-float-constants */
-  OPT_Wunused = 370,                         /* -Wunused */
-  OPT_Wunused_argument = 371,                /* -Wunused-argument */
-  OPT_Wunused_but_set_parameter = 372,       /* -Wunused-but-set-parameter */
-  OPT_Wunused_but_set_variable = 373,        /* -Wunused-but-set-variable */
-  OPT_Wunused_dummy_argument = 374,          /* -Wunused-dummy-argument */
-  OPT_Wunused_function = 375,                /* -Wunused-function */
-  OPT_Wunused_import = 376,                  /* -Wunused-import */
-  OPT_Wunused_label = 377,                   /* -Wunused-label */
-  OPT_Wunused_local = 378,                   /* -Wunused-local */
-  OPT_Wunused_macros = 379,                  /* -Wunused-macros */
-  OPT_Wunused_parameter = 380,               /* -Wunused-parameter */
-  OPT_Wunused_private = 381,                 /* -Wunused-private */
-  OPT_Wunused_result = 382,                  /* -Wunused-result */
-  OPT_Wunused_thrown = 383,                  /* -Wunused-thrown */
-  OPT_Wunused_value = 384,                   /* -Wunused-value */
-  OPT_Wunused_variable = 385,                /* -Wunused-variable */
-  OPT_Wuseless_type_check = 386,             /* -Wuseless-type-check */
-  OPT_Wvarargs_cast = 387,                   /* -Wvarargs-cast */
-  OPT_Wvariadic_macros = 388,                /* -Wvariadic-macros */
-  OPT_Wvla = 389,                            /* -Wvla */
-  OPT_Wvolatile_register_var = 390,          /* -Wvolatile-register-var */
-  OPT_Wwarning_token = 391,                  /* -Wwarning-token */
-  OPT_Wwrite_strings = 392,                  /* -Wwrite-strings */
-  OPT_Xassembler = 393,                      /* -Xassembler */
-  OPT_Xlinker = 394,                         /* -Xlinker */
-  OPT_Xpreprocessor = 395,                   /* -Xpreprocessor */
-  OPT_Z = 396,                               /* -Z */
-  OPT_ansi = 397,                            /* -ansi */
-  OPT_aux_info = 398,                        /* -aux-info */
-  /* OPT_aux_info_ = 399, */                 /* -aux-info= */
-  OPT_auxbase = 400,                         /* -auxbase */
-  OPT_auxbase_strip = 401,                   /* -auxbase-strip */
-  /* OPT_bootclasspath = 402, */             /* -bootclasspath */
-  OPT_c = 403,                               /* -c */
-  OPT_canonical_prefixes = 404,              /* -canonical-prefixes */
-  /* OPT_classpath = 405, */                 /* -classpath */
-  OPT_coverage = 406,                        /* -coverage */
-  OPT_cpp = 407,                             /* -cpp */
-  OPT_cpp_ = 408,                            /* -cpp= */
-  OPT_d = 409,                               /* -d */
-  OPT_dumpbase = 410,                        /* -dumpbase */
-  OPT_dumpdir = 411,                         /* -dumpdir */
-  OPT_dumpmachine = 412,                     /* -dumpmachine */
-  OPT_dumpspecs = 413,                       /* -dumpspecs */
-  OPT_dumpversion = 414,                     /* -dumpversion */
-  OPT_e = 415,                               /* -e */
-  /* OPT_encoding = 416, */                  /* -encoding */
-  OPT_export_dynamic = 417,                  /* -export-dynamic */
-  OPT_extdirs = 418,                         /* -extdirs */
-  /* OPT_fCLASSPATH_ = 419, */               /* -fCLASSPATH= */
-  OPT_fPIC = 420,                            /* -fPIC */
-  OPT_fPIE = 421,                            /* -fPIE */
-  OPT_fRTS_ = 422,                           /* -fRTS= */
-  OPT_fabi_version_ = 423,                   /* -fabi-version= */
-  OPT_faccess_control = 424,                 /* -faccess-control */
-  OPT_falign_commons = 425,                  /* -falign-commons */
-  OPT_falign_functions = 426,                /* -falign-functions */
-  OPT_falign_functions_ = 427,               /* -falign-functions= */
-  OPT_falign_jumps = 428,                    /* -falign-jumps */
-  OPT_falign_jumps_ = 429,                   /* -falign-jumps= */
-  OPT_falign_labels = 430,                   /* -falign-labels */
-  OPT_falign_labels_ = 431,                  /* -falign-labels= */
-  OPT_falign_loops = 432,                    /* -falign-loops */
-  OPT_falign_loops_ = 433,                   /* -falign-loops= */
-  OPT_fall_intrinsics = 434,                 /* -fall-intrinsics */
-  /* OPT_fall_virtual = 435, */              /* -fall-virtual */
-  OPT_fallow_leading_underscore = 436,       /* -fallow-leading-underscore */
-  /* OPT_falt_external_templates = 437, */   /* -falt-external-templates */
-  /* OPT_fargument_alias = 438, */           /* -fargument-alias */
-  /* OPT_fargument_noalias = 439, */         /* -fargument-noalias */
-  /* OPT_fargument_noalias_anything = 440, *//* -fargument-noalias-anything */
-  /* OPT_fargument_noalias_global = 441, */  /* -fargument-noalias-global */
-  OPT_fasm = 442,                            /* -fasm */
-  OPT_fassert = 443,                         /* -fassert */
-  OPT_fassociative_math = 444,               /* -fassociative-math */
-  OPT_fassume_compiled = 445,                /* -fassume-compiled */
-  OPT_fassume_compiled_ = 446,               /* -fassume-compiled= */
-  OPT_fasynchronous_unwind_tables = 447,     /* -fasynchronous-unwind-tables */
-  OPT_fauto_inc_dec = 448,                   /* -fauto-inc-dec */
-  OPT_fautomatic = 449,                      /* -fautomatic */
-  OPT_faux_classpath = 450,                  /* -faux-classpath */
-  OPT_fbackslash = 451,                      /* -fbackslash */
-  OPT_fbacktrace = 452,                      /* -fbacktrace */
-  OPT_fblas_matmul_limit_ = 453,             /* -fblas-matmul-limit= */
-  OPT_fbootclasspath_ = 454,                 /* -fbootclasspath= */
-  OPT_fbootstrap_classes = 455,              /* -fbootstrap-classes */
-  OPT_fbounds_check = 456,                   /* -fbounds-check */
-  OPT_fbranch_count_reg = 457,               /* -fbranch-count-reg */
-  OPT_fbranch_probabilities = 458,           /* -fbranch-probabilities */
-  OPT_fbranch_target_load_optimize = 459,    /* -fbranch-target-load-optimize */
-  OPT_fbranch_target_load_optimize2 = 460,   /* -fbranch-target-load-optimize2 */
-  OPT_fbtr_bb_exclusive = 461,               /* -fbtr-bb-exclusive */
-  OPT_fbuiltin = 462,                        /* -fbuiltin */
-  OPT_fbuiltin_ = 463,                       /* -fbuiltin- */
-  OPT_fcall_saved_ = 464,                    /* -fcall-saved- */
-  OPT_fcall_used_ = 465,                     /* -fcall-used- */
-  OPT_fcaller_saves = 466,                   /* -fcaller-saves */
-  OPT_fcallgraph_profiles_sections = 467,    /* -fcallgraph-profiles-sections */
-  OPT_fcheck_array_temporaries = 468,        /* -fcheck-array-temporaries */
-  OPT_fcheck_data_deps = 469,                /* -fcheck-data-deps */
-  OPT_fcheck_new = 470,                      /* -fcheck-new */
-  OPT_fcheck_references = 471,               /* -fcheck-references */
-  OPT_fcheck_ = 472,                         /* -fcheck= */
-  OPT_fclasspath_ = 473,                     /* -fclasspath= */
-  OPT_fclone_hot_version_paths = 474,        /* -fclone-hot-version-paths */
-  OPT_fcoarray_ = 475,                       /* -fcoarray= */
-  OPT_fcombine_stack_adjustments = 476,      /* -fcombine-stack-adjustments */
-  OPT_fcommon = 477,                         /* -fcommon */
-  OPT_fcompare_debug = 478,                  /* -fcompare-debug */
-  OPT_fcompare_debug_second = 479,           /* -fcompare-debug-second */
-  OPT_fcompare_debug_ = 480,                 /* -fcompare-debug= */
-  OPT_fcompare_elim = 481,                   /* -fcompare-elim */
-  OPT_fcompile_resource_ = 482,              /* -fcompile-resource= */
-  OPT_fcond_mismatch = 483,                  /* -fcond-mismatch */
-  OPT_fconserve_space = 484,                 /* -fconserve-space */
-  OPT_fconserve_stack = 485,                 /* -fconserve-stack */
-  OPT_fconstant_string_class_ = 486,         /* -fconstant-string-class= */
-  OPT_fconstexpr_depth_ = 487,               /* -fconstexpr-depth= */
-  OPT_fconvert_big_endian = 488,             /* -fconvert=big-endian */
-  OPT_fconvert_little_endian = 489,          /* -fconvert=little-endian */
-  OPT_fconvert_native = 490,                 /* -fconvert=native */
-  OPT_fconvert_swap = 491,                   /* -fconvert=swap */
-  OPT_fcprop_registers = 492,                /* -fcprop-registers */
-  OPT_fcray_pointer = 493,                   /* -fcray-pointer */
-  OPT_fcrossjumping = 494,                   /* -fcrossjumping */
-  OPT_fcse_follow_jumps = 495,               /* -fcse-follow-jumps */
-  /* OPT_fcse_skip_blocks = 496, */          /* -fcse-skip-blocks */
-  OPT_fcx_fortran_rules = 497,               /* -fcx-fortran-rules */
-  OPT_fcx_limited_range = 498,               /* -fcx-limited-range */
-  OPT_fd_lines_as_code = 499,                /* -fd-lines-as-code */
-  OPT_fd_lines_as_comments = 500,            /* -fd-lines-as-comments */
-  OPT_fdata_sections = 501,                  /* -fdata-sections */
-  OPT_fdbg_cnt_list = 502,                   /* -fdbg-cnt-list */
-  OPT_fdbg_cnt_ = 503,                       /* -fdbg-cnt= */
-  OPT_fdce = 504,                            /* -fdce */
-  OPT_fdebug_prefix_map_ = 505,              /* -fdebug-prefix-map= */
-  OPT_fdeduce_init_list = 506,               /* -fdeduce-init-list */
-  OPT_fdefault_double_8 = 507,               /* -fdefault-double-8 */
-  /* OPT_fdefault_inline = 508, */           /* -fdefault-inline */
-  OPT_fdefault_integer_8 = 509,              /* -fdefault-integer-8 */
-  OPT_fdefault_real_8 = 510,                 /* -fdefault-real-8 */
-  OPT_fdefer_pop = 511,                      /* -fdefer-pop */
-  OPT_fdelayed_branch = 512,                 /* -fdelayed-branch */
-  OPT_fdelete_null_pointer_checks = 513,     /* -fdelete-null-pointer-checks */
-  OPT_fdevirtualize = 514,                   /* -fdevirtualize */
-  OPT_fdiagnostics_show_location_ = 515,     /* -fdiagnostics-show-location= */
-  OPT_fdiagnostics_show_option = 516,        /* -fdiagnostics-show-option */
-  OPT_fdirectives_only = 517,                /* -fdirectives-only */
-  OPT_fdisable_ = 518,                       /* -fdisable- */
-  OPT_fdisable_assertions = 519,             /* -fdisable-assertions */
-  OPT_fdisable_assertions_ = 520,            /* -fdisable-assertions= */
-  OPT_fdollar_ok = 521,                      /* -fdollar-ok */
-  OPT_fdollars_in_identifiers = 522,         /* -fdollars-in-identifiers */
-  OPT_fdse = 523,                            /* -fdse */
-  OPT_fdump_ = 524,                          /* -fdump- */
-  OPT_fdump_core = 525,                      /* -fdump-core */
-  OPT_fdump_final_insns = 526,               /* -fdump-final-insns */
-  OPT_fdump_final_insns_ = 527,              /* -fdump-final-insns= */
-  OPT_fdump_fortran_optimized = 528,         /* -fdump-fortran-optimized */
-  OPT_fdump_fortran_original = 529,          /* -fdump-fortran-original */
-  OPT_fdump_go_spec_ = 530,                  /* -fdump-go-spec= */
-  OPT_fdump_noaddr = 531,                    /* -fdump-noaddr */
-  OPT_fdump_parse_tree = 532,                /* -fdump-parse-tree */
-  OPT_fdump_passes = 533,                    /* -fdump-passes */
-  OPT_fdump_unnumbered = 534,                /* -fdump-unnumbered */
-  OPT_fdump_unnumbered_links = 535,          /* -fdump-unnumbered-links */
-  OPT_fdwarf2_cfi_asm = 536,                 /* -fdwarf2-cfi-asm */
-  OPT_fearly_inlining = 537,                 /* -fearly-inlining */
-  OPT_felide_constructors = 538,             /* -felide-constructors */
-  OPT_feliminate_dwarf2_dups = 539,          /* -feliminate-dwarf2-dups */
-  OPT_feliminate_unused_debug_symbols = 540, /* -feliminate-unused-debug-symbols */
-  OPT_feliminate_unused_debug_types = 541,   /* -feliminate-unused-debug-types */
-  OPT_femit_class_debug_always = 542,        /* -femit-class-debug-always */
-  OPT_femit_class_file = 543,                /* -femit-class-file */
-  OPT_femit_class_files = 544,               /* -femit-class-files */
-  OPT_femit_struct_debug_baseonly = 545,     /* -femit-struct-debug-baseonly */
-  OPT_femit_struct_debug_detailed_ = 546,    /* -femit-struct-debug-detailed= */
-  OPT_femit_struct_debug_reduced = 547,      /* -femit-struct-debug-reduced */
-  OPT_fenable_ = 548,                        /* -fenable- */
-  OPT_fenable_assertions = 549,              /* -fenable-assertions */
-  OPT_fenable_assertions_ = 550,             /* -fenable-assertions= */
-  OPT_fenable_icf_debug = 551,               /* -fenable-icf-debug */
-  OPT_fencoding_ = 552,                      /* -fencoding= */
-  OPT_fenforce_eh_specs = 553,               /* -fenforce-eh-specs */
-  /* OPT_fenum_int_equiv = 554, */           /* -fenum-int-equiv */
-  OPT_fexceptions = 555,                     /* -fexceptions */
-  OPT_fexcess_precision_ = 556,              /* -fexcess-precision= */
-  OPT_fexec_charset_ = 557,                  /* -fexec-charset= */
-  OPT_fexpensive_optimizations = 558,        /* -fexpensive-optimizations */
-  OPT_fextdirs_ = 559,                       /* -fextdirs= */
-  OPT_fextended_identifiers = 560,           /* -fextended-identifiers */
-  OPT_fexternal_blas = 561,                  /* -fexternal-blas */
-  /* OPT_fexternal_templates = 562, */       /* -fexternal-templates */
-  OPT_ff2c = 563,                            /* -ff2c */
-  OPT_ffast_math = 564,                      /* -ffast-math */
-  OPT_ffilelist_file = 565,                  /* -ffilelist-file */
-  OPT_ffinite_math_only = 566,               /* -ffinite-math-only */
-  OPT_ffixed_ = 567,                         /* -ffixed- */
-  OPT_ffixed_form = 568,                     /* -ffixed-form */
-  OPT_ffixed_line_length_ = 569,             /* -ffixed-line-length- */
-  OPT_ffixed_line_length_none = 570,         /* -ffixed-line-length-none */
-  OPT_ffloat_store = 571,                    /* -ffloat-store */
-  OPT_ffor_scope = 572,                      /* -ffor-scope */
-  /* OPT_fforce_addr = 573, */               /* -fforce-addr */
-  OPT_fforce_classes_archive_check = 574,    /* -fforce-classes-archive-check */
-  OPT_fforward_propagate = 575,              /* -fforward-propagate */
-  OPT_ffp_contract_ = 576,                   /* -ffp-contract= */
-  OPT_ffpe_trap_ = 577,                      /* -ffpe-trap= */
-  OPT_ffree_form = 578,                      /* -ffree-form */
-  OPT_ffree_line_length_ = 579,              /* -ffree-line-length- */
-  OPT_ffree_line_length_none = 580,          /* -ffree-line-length-none */
-  OPT_ffreestanding = 581,                   /* -ffreestanding */
-  OPT_ffriend_injection = 582,               /* -ffriend-injection */
-  OPT_ffunction_cse = 583,                   /* -ffunction-cse */
-  OPT_ffunction_sections = 584,              /* -ffunction-sections */
-  OPT_fgcse = 585,                           /* -fgcse */
-  OPT_fgcse_after_reload = 586,              /* -fgcse-after-reload */
-  OPT_fgcse_las = 587,                       /* -fgcse-las */
-  OPT_fgcse_lm = 588,                        /* -fgcse-lm */
-  OPT_fgcse_sm = 589,                        /* -fgcse-sm */
-  OPT_fgnu_keywords = 590,                   /* -fgnu-keywords */
-  OPT_fgnu_runtime = 591,                    /* -fgnu-runtime */
-  OPT_fgnu89_inline = 592,                   /* -fgnu89-inline */
-  OPT_fgo_dump_ = 593,                       /* -fgo-dump- */
-  OPT_fgo_prefix_ = 594,                     /* -fgo-prefix= */
-  OPT_fgraphite = 595,                       /* -fgraphite */
-  OPT_fgraphite_identity = 596,              /* -fgraphite-identity */
-  OPT_fguess_branch_probability = 597,       /* -fguess-branch-probability */
-  /* OPT_fguiding_decls = 598, */            /* -fguiding-decls */
-  /* OPT_fhandle_exceptions = 599, */        /* -fhandle-exceptions */
-  OPT_fhash_synchronization = 600,           /* -fhash-synchronization */
-  /* OPT_fhelp = 601, */                     /* -fhelp */
-  /* OPT_fhelp_ = 602, */                    /* -fhelp= */
-  /* OPT_fhonor_std = 603, */                /* -fhonor-std */
-  OPT_fhosted = 604,                         /* -fhosted */
-  /* OPT_fhuge_objects = 605, */             /* -fhuge-objects */
-  OPT_fident = 606,                          /* -fident */
-  OPT_fif_conversion = 607,                  /* -fif-conversion */
-  OPT_fif_conversion2 = 608,                 /* -fif-conversion2 */
-  OPT_fimplement_inlines = 609,              /* -fimplement-inlines */
-  OPT_fimplicit_inline_templates = 610,      /* -fimplicit-inline-templates */
-  OPT_fimplicit_none = 611,                  /* -fimplicit-none */
-  OPT_fimplicit_templates = 612,             /* -fimplicit-templates */
-  OPT_findirect_classes = 613,               /* -findirect-classes */
-  OPT_findirect_dispatch = 614,              /* -findirect-dispatch */
-  OPT_findirect_inlining = 615,              /* -findirect-inlining */
-  OPT_finhibit_size_directive = 616,         /* -finhibit-size-directive */
-  OPT_finit_character_ = 617,                /* -finit-character= */
-  OPT_finit_integer_ = 618,                  /* -finit-integer= */
-  OPT_finit_local_zero = 619,                /* -finit-local-zero */
-  OPT_finit_logical_ = 620,                  /* -finit-logical= */
-  OPT_finit_real_ = 621,                     /* -finit-real= */
-  OPT_finline = 622,                         /* -finline */
-  OPT_finline_functions = 623,               /* -finline-functions */
-  OPT_finline_functions_called_once = 624,   /* -finline-functions-called-once */
-  /* OPT_finline_limit_ = 625, */            /* -finline-limit- */
-  OPT_finline_limit_ = 626,                  /* -finline-limit= */
-  OPT_finline_small_functions = 627,         /* -finline-small-functions */
-  OPT_finput_charset_ = 628,                 /* -finput-charset= */
-  OPT_finstrument_functions = 629,           /* -finstrument-functions */
-  OPT_finstrument_functions_exclude_file_list_ = 630,/* -finstrument-functions-exclude-file-list= */
-  OPT_finstrument_functions_exclude_function_list_ = 631,/* -finstrument-functions-exclude-function-list= */
-  OPT_fintrinsic_modules_path = 632,         /* -fintrinsic-modules-path */
-  OPT_fipa_cp = 633,                         /* -fipa-cp */
-  OPT_fipa_cp_clone = 634,                   /* -fipa-cp-clone */
-  OPT_fipa_matrix_reorg = 635,               /* -fipa-matrix-reorg */
-  OPT_fipa_profile = 636,                    /* -fipa-profile */
-  OPT_fipa_pta = 637,                        /* -fipa-pta */
-  OPT_fipa_pure_const = 638,                 /* -fipa-pure-const */
-  OPT_fipa_reference = 639,                  /* -fipa-reference */
-  OPT_fipa_sra = 640,                        /* -fipa-sra */
-  OPT_fipa_struct_reorg = 641,               /* -fipa-struct-reorg */
-  OPT_fira_algorithm_ = 642,                 /* -fira-algorithm= */
-  OPT_fira_loop_pressure = 643,              /* -fira-loop-pressure */
-  OPT_fira_region_ = 644,                    /* -fira-region= */
-  OPT_fira_share_save_slots = 645,           /* -fira-share-save-slots */
-  OPT_fira_share_spill_slots = 646,          /* -fira-share-spill-slots */
-  OPT_fira_verbose_ = 647,                   /* -fira-verbose= */
-  OPT_fivopts = 648,                         /* -fivopts */
-  OPT_fjni = 649,                            /* -fjni */
-  OPT_fjump_tables = 650,                    /* -fjump-tables */
-  OPT_fkeep_inline_dllexport = 651,          /* -fkeep-inline-dllexport */
-  OPT_fkeep_inline_functions = 652,          /* -fkeep-inline-functions */
-  OPT_fkeep_static_consts = 653,             /* -fkeep-static-consts */
-  /* OPT_flabels_ok = 654, */                /* -flabels-ok */
-  OPT_flax_vector_conversions = 655,         /* -flax-vector-conversions */
-  OPT_fleading_underscore = 656,             /* -fleading-underscore */
-  OPT_floop_block = 657,                     /* -floop-block */
-  OPT_floop_flatten = 658,                   /* -floop-flatten */
-  OPT_floop_interchange = 659,               /* -floop-interchange */
-  /* OPT_floop_optimize = 660, */            /* -floop-optimize */
-  OPT_floop_parallelize_all = 661,           /* -floop-parallelize-all */
-  OPT_floop_strip_mine = 662,                /* -floop-strip-mine */
-  OPT_flto = 663,                            /* -flto */
-  OPT_flto_compression_level_ = 664,         /* -flto-compression-level= */
-  OPT_flto_partition_1to1 = 665,             /* -flto-partition=1to1 */
-  OPT_flto_partition_balanced = 666,         /* -flto-partition=balanced */
-  OPT_flto_partition_none = 667,             /* -flto-partition=none */
-  OPT_flto_report = 668,                     /* -flto-report */
-  OPT_flto_ = 669,                           /* -flto= */
-  OPT_fltrans = 670,                         /* -fltrans */
-  OPT_fltrans_output_list_ = 671,            /* -fltrans-output-list= */
-  OPT_fmain_ = 672,                          /* -fmain= */
-  OPT_fmath_errno = 673,                     /* -fmath-errno */
-  OPT_fmax_array_constructor_ = 674,         /* -fmax-array-constructor= */
-  OPT_fmax_errors_ = 675,                    /* -fmax-errors= */
-  OPT_fmax_identifier_length_ = 676,         /* -fmax-identifier-length= */
-  OPT_fmax_stack_var_size_ = 677,            /* -fmax-stack-var-size= */
-  OPT_fmax_subrecord_length_ = 678,          /* -fmax-subrecord-length= */
-  OPT_fmem_report = 679,                     /* -fmem-report */
-  OPT_fmerge_all_constants = 680,            /* -fmerge-all-constants */
-  OPT_fmerge_constants = 681,                /* -fmerge-constants */
-  OPT_fmerge_debug_strings = 682,            /* -fmerge-debug-strings */
-  OPT_fmessage_length_ = 683,                /* -fmessage-length= */
-  OPT_fmodule_private = 684,                 /* -fmodule-private */
-  OPT_fmodulo_sched = 685,                   /* -fmodulo-sched */
-  OPT_fmodulo_sched_allow_regmoves = 686,    /* -fmodulo-sched-allow-regmoves */
-  OPT_fmove_loop_invariants = 687,           /* -fmove-loop-invariants */
-  OPT_fms_extensions = 688,                  /* -fms-extensions */
-  OPT_fmudflap = 689,                        /* -fmudflap */
-  OPT_fmudflapir = 690,                      /* -fmudflapir */
-  OPT_fmudflapth = 691,                      /* -fmudflapth */
-  /* OPT_fname_mangling_version_ = 692, */   /* -fname-mangling-version- */
-  /* OPT_fnew_abi = 693, */                  /* -fnew-abi */
-  OPT_fnext_runtime = 694,                   /* -fnext-runtime */
-  OPT_fnil_receivers = 695,                  /* -fnil-receivers */
-  OPT_fnon_call_exceptions = 696,            /* -fnon-call-exceptions */
-  OPT_fnonansi_builtins = 697,               /* -fnonansi-builtins */
-  /* OPT_fnonnull_objects = 698, */          /* -fnonnull-objects */
-  OPT_fnothrow_opt = 699,                    /* -fnothrow-opt */
-  OPT_fobjc_abi_version_ = 700,              /* -fobjc-abi-version= */
-  OPT_fobjc_call_cxx_cdtors = 701,           /* -fobjc-call-cxx-cdtors */
-  OPT_fobjc_direct_dispatch = 702,           /* -fobjc-direct-dispatch */
-  OPT_fobjc_exceptions = 703,                /* -fobjc-exceptions */
-  OPT_fobjc_gc = 704,                        /* -fobjc-gc */
-  OPT_fobjc_nilcheck = 705,                  /* -fobjc-nilcheck */
-  OPT_fobjc_sjlj_exceptions = 706,           /* -fobjc-sjlj-exceptions */
-  OPT_fobjc_std_objc1 = 707,                 /* -fobjc-std=objc1 */
-  OPT_fomit_frame_pointer = 708,             /* -fomit-frame-pointer */
-  OPT_fopenmp = 709,                         /* -fopenmp */
-  OPT_foperator_names = 710,                 /* -foperator-names */
-  OPT_foptimize_locality = 711,              /* -foptimize-locality */
-  OPT_foptimize_register_move = 712,         /* -foptimize-register-move */
-  OPT_foptimize_sibling_calls = 713,         /* -foptimize-sibling-calls */
-  OPT_foptimize_static_class_initialization = 714,/* -foptimize-static-class-initialization */
-  /* OPT_foptional_diags = 715, */           /* -foptional-diags */
-  OPT_foutput_class_dir_ = 716,              /* -foutput-class-dir= */
-  OPT_fpack_derived = 717,                   /* -fpack-derived */
-  OPT_fpack_struct = 718,                    /* -fpack-struct */
-  OPT_fpack_struct_ = 719,                   /* -fpack-struct= */
-  OPT_fpartial_inlining = 720,               /* -fpartial-inlining */
-  OPT_fpcc_struct_return = 721,              /* -fpcc-struct-return */
-  OPT_fpch_deps = 722,                       /* -fpch-deps */
-  OPT_fpch_preprocess = 723,                 /* -fpch-preprocess */
-  OPT_fpeel_loops = 724,                     /* -fpeel-loops */
-  OPT_fpeephole = 725,                       /* -fpeephole */
-  OPT_fpeephole2 = 726,                      /* -fpeephole2 */
-  OPT_fpermissive = 727,                     /* -fpermissive */
-  OPT_fpic = 728,                            /* -fpic */
-  OPT_fpie = 729,                            /* -fpie */
-  OPT_fplan9_extensions = 730,               /* -fplan9-extensions */
-  OPT_fplugin_arg_ = 731,                    /* -fplugin-arg- */
-  OPT_fplugin_ = 732,                        /* -fplugin= */
-  OPT_fpmu_profile_generate_ = 733,          /* -fpmu-profile-generate= */
-  OPT_fpmu_profile_use_ = 734,               /* -fpmu-profile-use= */
-  OPT_fpost_ipa_mem_report = 735,            /* -fpost-ipa-mem-report */
-  OPT_fpre_ipa_mem_report = 736,             /* -fpre-ipa-mem-report */
-  OPT_fpredictive_commoning = 737,           /* -fpredictive-commoning */
-  OPT_fprefetch_loop_arrays = 738,           /* -fprefetch-loop-arrays */
-  OPT_fpreprocessed = 739,                   /* -fpreprocessed */
-  OPT_fpretty_templates = 740,               /* -fpretty-templates */
-  OPT_fprofile = 741,                        /* -fprofile */
-  OPT_fprofile_arcs = 742,                   /* -fprofile-arcs */
-  OPT_fprofile_correction = 743,             /* -fprofile-correction */
-  OPT_fprofile_dir_ = 744,                   /* -fprofile-dir= */
-  OPT_fprofile_dump = 745,                   /* -fprofile-dump */
-  OPT_fprofile_generate = 746,               /* -fprofile-generate */
-  OPT_fprofile_generate_sampling = 747,      /* -fprofile-generate-sampling */
-  OPT_fprofile_generate_ = 748,              /* -fprofile-generate= */
-  OPT_fprofile_reusedist = 749,              /* -fprofile-reusedist */
-  OPT_fprofile_use = 750,                    /* -fprofile-use */
-  OPT_fprofile_use_ = 751,                   /* -fprofile-use= */
-  OPT_fprofile_values = 752,                 /* -fprofile-values */
-  OPT_fprotect_parens = 753,                 /* -fprotect-parens */
-  OPT_frandom_seed = 754,                    /* -frandom-seed */
-  OPT_frandom_seed_ = 755,                   /* -frandom-seed= */
-  OPT_frange_check = 756,                    /* -frange-check */
-  OPT_frealloc_lhs = 757,                    /* -frealloc-lhs */
-  OPT_freciprocal_math = 758,                /* -freciprocal-math */
-  OPT_frecord_gcc_switches = 759,            /* -frecord-gcc-switches */
-  OPT_frecord_marker_4 = 760,                /* -frecord-marker=4 */
-  OPT_frecord_marker_8 = 761,                /* -frecord-marker=8 */
-  OPT_frecursive = 762,                      /* -frecursive */
-  OPT_freduced_reflection = 763,             /* -freduced-reflection */
-  OPT_freg_struct_return = 764,              /* -freg-struct-return */
-  OPT_fregmove = 765,                        /* -fregmove */
-  OPT_frename_registers = 766,               /* -frename-registers */
-  OPT_freorder_blocks = 767,                 /* -freorder-blocks */
-  OPT_freorder_blocks_and_partition = 768,   /* -freorder-blocks-and-partition */
-  OPT_freorder_functions = 769,              /* -freorder-functions */
-  OPT_frepack_arrays = 770,                  /* -frepack-arrays */
-  OPT_freplace_objc_classes = 771,           /* -freplace-objc-classes */
-  OPT_frepo = 772,                           /* -frepo */
-  OPT_frequire_return_statement = 773,       /* -frequire-return-statement */
-  OPT_frerun_cse_after_loop = 774,           /* -frerun-cse-after-loop */
-  /* OPT_frerun_loop_opt = 775, */           /* -frerun-loop-opt */
-  OPT_freschedule_modulo_scheduled_loops = 776,/* -freschedule-modulo-scheduled-loops */
-  OPT_fresolution_ = 777,                    /* -fresolution= */
-  OPT_fripa = 778,                           /* -fripa */
-  OPT_fripa_disallow_asm_modules = 779,      /* -fripa-disallow-asm-modules */
-  OPT_fripa_disallow_opt_mismatch = 780,     /* -fripa-disallow-opt-mismatch */
-  OPT_fripa_no_promote_always_inline_func = 781,/* -fripa-no-promote-always-inline-func */
-  OPT_fripa_verbose = 782,                   /* -fripa-verbose */
-  OPT_frounding_math = 783,                  /* -frounding-math */
-  OPT_frtti = 784,                           /* -frtti */
-  OPT_fsaw_java_file = 785,                  /* -fsaw-java-file */
-  OPT_fsched_critical_path_heuristic = 786,  /* -fsched-critical-path-heuristic */
-  OPT_fsched_dep_count_heuristic = 787,      /* -fsched-dep-count-heuristic */
-  OPT_fsched_group_heuristic = 788,          /* -fsched-group-heuristic */
-  OPT_fsched_interblock = 789,               /* -fsched-interblock */
-  OPT_fsched_last_insn_heuristic = 790,      /* -fsched-last-insn-heuristic */
-  OPT_fsched_pressure = 791,                 /* -fsched-pressure */
-  OPT_fsched_rank_heuristic = 792,           /* -fsched-rank-heuristic */
-  OPT_fsched_spec = 793,                     /* -fsched-spec */
-  OPT_fsched_spec_insn_heuristic = 794,      /* -fsched-spec-insn-heuristic */
-  OPT_fsched_spec_load = 795,                /* -fsched-spec-load */
-  OPT_fsched_spec_load_dangerous = 796,      /* -fsched-spec-load-dangerous */
-  OPT_fsched_stalled_insns = 797,            /* -fsched-stalled-insns */
-  OPT_fsched_stalled_insns_dep = 798,        /* -fsched-stalled-insns-dep */
-  OPT_fsched_stalled_insns_dep_ = 799,       /* -fsched-stalled-insns-dep= */
-  OPT_fsched_stalled_insns_ = 800,           /* -fsched-stalled-insns= */
-  OPT_fsched_verbose_ = 801,                 /* -fsched-verbose= */
-  OPT_fsched2_use_superblocks = 802,         /* -fsched2-use-superblocks */
-  /* OPT_fsched2_use_traces = 803, */        /* -fsched2-use-traces */
-  OPT_fschedule_insns = 804,                 /* -fschedule-insns */
-  OPT_fschedule_insns2 = 805,                /* -fschedule-insns2 */
-  OPT_fsecond_underscore = 806,              /* -fsecond-underscore */
-  OPT_fsection_anchors = 807,                /* -fsection-anchors */
-  /* OPT_fsee = 808, */                      /* -fsee */
-  OPT_fsel_sched_pipelining = 809,           /* -fsel-sched-pipelining */
-  OPT_fsel_sched_pipelining_outer_loops = 810,/* -fsel-sched-pipelining-outer-loops */
-  OPT_fsel_sched_reschedule_pipelined = 811, /* -fsel-sched-reschedule-pipelined */
-  OPT_fselective_scheduling = 812,           /* -fselective-scheduling */
-  OPT_fselective_scheduling2 = 813,          /* -fselective-scheduling2 */
-  OPT_fshort_double = 814,                   /* -fshort-double */
-  OPT_fshort_enums = 815,                    /* -fshort-enums */
-  OPT_fshort_wchar = 816,                    /* -fshort-wchar */
-  OPT_fshow_column = 817,                    /* -fshow-column */
-  OPT_fsign_zero = 818,                      /* -fsign-zero */
-  OPT_fsignaling_nans = 819,                 /* -fsignaling-nans */
-  OPT_fsigned_bitfields = 820,               /* -fsigned-bitfields */
-  OPT_fsigned_char = 821,                    /* -fsigned-char */
-  OPT_fsigned_zeros = 822,                   /* -fsigned-zeros */
-  OPT_fsingle_precision_constant = 823,      /* -fsingle-precision-constant */
-  OPT_fsource_filename_ = 824,               /* -fsource-filename= */
-  OPT_fsource_ = 825,                        /* -fsource= */
-  OPT_fsplit_ivs_in_unroller = 826,          /* -fsplit-ivs-in-unroller */
-  OPT_fsplit_stack = 827,                    /* -fsplit-stack */
-  OPT_fsplit_wide_types = 828,               /* -fsplit-wide-types */
-  /* OPT_fsquangle = 829, */                 /* -fsquangle */
-  /* OPT_fstack_check = 830, */              /* -fstack-check */
-  OPT_fstack_check_ = 831,                   /* -fstack-check= */
-  OPT_fstack_limit = 832,                    /* -fstack-limit */
-  OPT_fstack_limit_register_ = 833,          /* -fstack-limit-register= */
-  OPT_fstack_limit_symbol_ = 834,            /* -fstack-limit-symbol= */
-  OPT_fstack_protector = 835,                /* -fstack-protector */
-  OPT_fstack_protector_all = 836,            /* -fstack-protector-all */
-  OPT_fstack_usage = 837,                    /* -fstack-usage */
-  OPT_fstats = 838,                          /* -fstats */
-  OPT_fstore_check = 839,                    /* -fstore-check */
-  /* OPT_fstrength_reduce = 840, */          /* -fstrength-reduce */
-  OPT_fstrict_aliasing = 841,                /* -fstrict-aliasing */
-  OPT_fstrict_enum_precision = 842,          /* -fstrict-enum-precision */
-  OPT_fstrict_enums = 843,                   /* -fstrict-enums */
-  OPT_fstrict_overflow = 844,                /* -fstrict-overflow */
-  /* OPT_fstrict_prototype = 845, */         /* -fstrict-prototype */
-  OPT_fstrict_volatile_bitfields = 846,      /* -fstrict-volatile-bitfields */
-  OPT_fsyntax_only = 847,                    /* -fsyntax-only */
-  OPT_ftabstop_ = 848,                       /* -ftabstop= */
-  /* OPT_ftarget_help = 849, */              /* -ftarget-help */
-  OPT_ftarget_ = 850,                        /* -ftarget= */
-  /* OPT_ftemplate_depth_ = 851, */          /* -ftemplate-depth- */
-  OPT_ftemplate_depth_ = 852,                /* -ftemplate-depth= */
-  OPT_ftest_coverage = 853,                  /* -ftest-coverage */
-  /* OPT_fthis_is_variable = 854, */         /* -fthis-is-variable */
-  OPT_fthread_jumps = 855,                   /* -fthread-jumps */
-  OPT_fthreadsafe_statics = 856,             /* -fthreadsafe-statics */
-  OPT_ftime_report = 857,                    /* -ftime-report */
-  OPT_ftls_model_ = 858,                     /* -ftls-model= */
-  OPT_ftoplevel_reorder = 859,               /* -ftoplevel-reorder */
-  OPT_ftracer = 860,                         /* -ftracer */
-  OPT_ftrapping_math = 861,                  /* -ftrapping-math */
-  OPT_ftrapv = 862,                          /* -ftrapv */
-  OPT_ftree_bit_ccp = 863,                   /* -ftree-bit-ccp */
-  OPT_ftree_builtin_call_dce = 864,          /* -ftree-builtin-call-dce */
-  OPT_ftree_ccp = 865,                       /* -ftree-ccp */
-  OPT_ftree_ch = 866,                        /* -ftree-ch */
-  OPT_ftree_copy_prop = 867,                 /* -ftree-copy-prop */
-  OPT_ftree_copyrename = 868,                /* -ftree-copyrename */
-  OPT_ftree_cselim = 869,                    /* -ftree-cselim */
-  OPT_ftree_dce = 870,                       /* -ftree-dce */
-  OPT_ftree_dominator_opts = 871,            /* -ftree-dominator-opts */
-  OPT_ftree_dse = 872,                       /* -ftree-dse */
-  OPT_ftree_forwprop = 873,                  /* -ftree-forwprop */
-  OPT_ftree_fre = 874,                       /* -ftree-fre */
-  OPT_ftree_loop_distribute_patterns = 875,  /* -ftree-loop-distribute-patterns */
-  OPT_ftree_loop_distribution = 876,         /* -ftree-loop-distribution */
-  OPT_ftree_loop_if_convert = 877,           /* -ftree-loop-if-convert */
-  OPT_ftree_loop_if_convert_stores = 878,    /* -ftree-loop-if-convert-stores */
-  OPT_ftree_loop_im = 879,                   /* -ftree-loop-im */
-  OPT_ftree_loop_ivcanon = 880,              /* -ftree-loop-ivcanon */
-  /* OPT_ftree_loop_linear = 881, */         /* -ftree-loop-linear */
-  OPT_ftree_loop_optimize = 882,             /* -ftree-loop-optimize */
-  OPT_ftree_lrs = 883,                       /* -ftree-lrs */
-  OPT_ftree_parallelize_loops_ = 884,        /* -ftree-parallelize-loops= */
-  OPT_ftree_phiprop = 885,                   /* -ftree-phiprop */
-  OPT_ftree_pre = 886,                       /* -ftree-pre */
-  OPT_ftree_pta = 887,                       /* -ftree-pta */
-  OPT_ftree_reassoc = 888,                   /* -ftree-reassoc */
-  /* OPT_ftree_salias = 889, */              /* -ftree-salias */
-  OPT_ftree_scev_cprop = 890,                /* -ftree-scev-cprop */
-  OPT_ftree_sink = 891,                      /* -ftree-sink */
-  OPT_ftree_slp_vectorize = 892,             /* -ftree-slp-vectorize */
-  OPT_ftree_sra = 893,                       /* -ftree-sra */
-  /* OPT_ftree_store_ccp = 894, */           /* -ftree-store-ccp */
-  /* OPT_ftree_store_copy_prop = 895, */     /* -ftree-store-copy-prop */
-  OPT_ftree_switch_conversion = 896,         /* -ftree-switch-conversion */
-  OPT_ftree_ter = 897,                       /* -ftree-ter */
-  OPT_ftree_vect_loop_version = 898,         /* -ftree-vect-loop-version */
-  OPT_ftree_vectorize = 899,                 /* -ftree-vectorize */
-  OPT_ftree_vectorizer_verbose_ = 900,       /* -ftree-vectorizer-verbose= */
-  OPT_ftree_vrp = 901,                       /* -ftree-vrp */
-  OPT_funderscoring = 902,                   /* -funderscoring */
-  OPT_funit_at_a_time = 903,                 /* -funit-at-a-time */
-  OPT_funroll_all_loops = 904,               /* -funroll-all-loops */
-  OPT_funroll_loops = 905,                   /* -funroll-loops */
-  OPT_funsafe_loop_optimizations = 906,      /* -funsafe-loop-optimizations */
-  OPT_funsafe_math_optimizations = 907,      /* -funsafe-math-optimizations */
-  OPT_funsigned_bitfields = 908,             /* -funsigned-bitfields */
-  OPT_funsigned_char = 909,                  /* -funsigned-char */
-  OPT_funswitch_loops = 910,                 /* -funswitch-loops */
-  OPT_funwind_tables = 911,                  /* -funwind-tables */
-  OPT_fuse_atomic_builtins = 912,            /* -fuse-atomic-builtins */
-  OPT_fuse_boehm_gc = 913,                   /* -fuse-boehm-gc */
-  OPT_fuse_cxa_atexit = 914,                 /* -fuse-cxa-atexit */
-  OPT_fuse_cxa_get_exception_ptr = 915,      /* -fuse-cxa-get-exception-ptr */
-  OPT_fuse_divide_subroutine = 916,          /* -fuse-divide-subroutine */
-  OPT_fuse_ld_ = 917,                        /* -fuse-ld= */
-  OPT_fuse_linker_plugin = 918,              /* -fuse-linker-plugin */
-  OPT_fvar_tracking = 919,                   /* -fvar-tracking */
-  OPT_fvar_tracking_assignments = 920,       /* -fvar-tracking-assignments */
-  OPT_fvar_tracking_assignments_toggle = 921,/* -fvar-tracking-assignments-toggle */
-  OPT_fvar_tracking_uninit = 922,            /* -fvar-tracking-uninit */
-  OPT_fvariable_expansion_in_unroller = 923, /* -fvariable-expansion-in-unroller */
-  OPT_fvect_cost_model = 924,                /* -fvect-cost-model */
-  OPT_fverbose_asm = 925,                    /* -fverbose-asm */
-  /* OPT_fversion = 926, */                  /* -fversion */
-  OPT_fvisibility_inlines_hidden = 927,      /* -fvisibility-inlines-hidden */
-  OPT_fvisibility_ms_compat = 928,           /* -fvisibility-ms-compat */
-  OPT_fvisibility_ = 929,                    /* -fvisibility= */
-  OPT_fvpt = 930,                            /* -fvpt */
-  /* OPT_fvtable_gc = 931, */                /* -fvtable-gc */
-  /* OPT_fvtable_thunks = 932, */            /* -fvtable-thunks */
-  OPT_fweak = 933,                           /* -fweak */
-  OPT_fweb = 934,                            /* -fweb */
-  OPT_fwhole_file = 935,                     /* -fwhole-file */
-  OPT_fwhole_program = 936,                  /* -fwhole-program */
-  OPT_fwide_exec_charset_ = 937,             /* -fwide-exec-charset= */
-  OPT_fworking_directory = 938,              /* -fworking-directory */
-  OPT_fwpa = 939,                            /* -fwpa */
-  OPT_fwrapv = 940,                          /* -fwrapv */
-  /* OPT_fxref = 941, */                     /* -fxref */
-  OPT_fzee = 942,                            /* -fzee */
-  OPT_fzero_initialized_in_bss = 943,        /* -fzero-initialized-in-bss */
-  OPT_fzero_link = 944,                      /* -fzero-link */
-  OPT_g = 945,                               /* -g */
-  OPT_gant = 946,                            /* -gant */
-  OPT_gcoff = 947,                           /* -gcoff */
-  OPT_gdwarf_ = 948,                         /* -gdwarf- */
-  OPT_gen_decls = 949,                       /* -gen-decls */
-  OPT_ggdb = 950,                            /* -ggdb */
-  OPT_gmlt = 951,                            /* -gmlt */
-  OPT_gnat = 952,                            /* -gnat */
-  OPT_gnatO = 953,                           /* -gnatO */
-  OPT_gno_strict_dwarf = 954,                /* -gno-strict-dwarf */
-  OPT_gstabs = 955,                          /* -gstabs */
-  OPT_gstabs_ = 956,                         /* -gstabs+ */
-  OPT_gstrict_dwarf = 957,                   /* -gstrict-dwarf */
-  OPT_gtoggle = 958,                         /* -gtoggle */
-  OPT_gvms = 959,                            /* -gvms */
-  OPT_gxcoff = 960,                          /* -gxcoff */
-  OPT_gxcoff_ = 961,                         /* -gxcoff+ */
-  OPT_h = 962,                               /* -h */
-  OPT_idirafter = 963,                       /* -idirafter */
-  OPT_imacros = 964,                         /* -imacros */
-  OPT_imultilib = 965,                       /* -imultilib */
-  OPT_include = 966,                         /* -include */
-  OPT_iplugindir_ = 967,                     /* -iplugindir= */
-  OPT_iprefix = 968,                         /* -iprefix */
-  OPT_iquote = 969,                          /* -iquote */
-  OPT_isysroot = 970,                        /* -isysroot */
-  OPT_isystem = 971,                         /* -isystem */
-  OPT_iwithprefix = 972,                     /* -iwithprefix */
-  OPT_iwithprefixbefore = 973,               /* -iwithprefixbefore */
-  OPT_k8 = 974,                              /* -k8 */
-  OPT_l = 975,                               /* -l */
-  OPT_lang_asm = 976,                        /* -lang-asm */
-  OPT_mabi_ = 977,                           /* -mabi= */
-  OPT_mabort_on_noreturn = 978,              /* -mabort-on-noreturn */
-  OPT_mandroid = 979,                        /* -mandroid */
-  OPT_mapcs = 980,                           /* -mapcs */
-  OPT_mapcs_float = 981,                     /* -mapcs-float */
-  OPT_mapcs_frame = 982,                     /* -mapcs-frame */
-  OPT_mapcs_reentrant = 983,                 /* -mapcs-reentrant */
-  OPT_mapcs_stack_check = 984,               /* -mapcs-stack-check */
-  OPT_march_ = 985,                          /* -march= */
-  OPT_marm = 986,                            /* -marm */
-  OPT_mbig_endian = 987,                     /* -mbig-endian */
-  OPT_mbionic = 988,                         /* -mbionic */
-  OPT_mcallee_super_interworking = 989,      /* -mcallee-super-interworking */
-  OPT_mcaller_super_interworking = 990,      /* -mcaller-super-interworking */
-  OPT_mcirrus_fix_invalid_insns = 991,       /* -mcirrus-fix-invalid-insns */
-  OPT_mcpu_ = 992,                           /* -mcpu= */
-  OPT_mfix_cortex_m3_ldrd = 993,             /* -mfix-cortex-m3-ldrd */
-  OPT_mfloat_abi_ = 994,                     /* -mfloat-abi= */
-  OPT_mfp16_format_ = 995,                   /* -mfp16-format= */
-  OPT_mfp_ = 996,                            /* -mfp= */
-  OPT_mfpe = 997,                            /* -mfpe */
-  OPT_mfpe_ = 998,                           /* -mfpe= */
-  OPT_mfpu_ = 999,                           /* -mfpu= */
-  OPT_mglibc = 1000,                         /* -mglibc */
-  OPT_mhard_float = 1001,                    /* -mhard-float */
-  OPT_mlittle_endian = 1002,                 /* -mlittle-endian */
-  OPT_mlong_calls = 1003,                    /* -mlong-calls */
-  OPT_mpic_register_ = 1004,                 /* -mpic-register= */
-  OPT_mpoke_function_name = 1005,            /* -mpoke-function-name */
-  OPT_msched_prolog = 1006,                  /* -msched-prolog */
-  OPT_msingle_pic_base = 1007,               /* -msingle-pic-base */
-  OPT_msoft_float = 1008,                    /* -msoft-float */
-  OPT_mstructure_size_boundary_ = 1009,      /* -mstructure-size-boundary= */
-  OPT_mthumb = 1010,                         /* -mthumb */
-  OPT_mthumb_interwork = 1011,               /* -mthumb-interwork */
-  OPT_mtp_ = 1012,                           /* -mtp= */
-  OPT_mtpcs_frame = 1013,                    /* -mtpcs-frame */
-  OPT_mtpcs_leaf_frame = 1014,               /* -mtpcs-leaf-frame */
-  OPT_mtune_ = 1015,                         /* -mtune= */
-  OPT_muclibc = 1016,                        /* -muclibc */
-  OPT_mvectorize_with_neon_quad = 1017,      /* -mvectorize-with-neon-quad */
-  OPT_mword_relocations = 1018,              /* -mword-relocations */
-  OPT_mwords_little_endian = 1019,           /* -mwords-little-endian */
-  OPT_n = 1020,                              /* -n */
-  OPT_no_canonical_prefixes = 1021,          /* -no-canonical-prefixes */
-  OPT_no_integrated_cpp = 1022,              /* -no-integrated-cpp */
-  OPT_nocpp = 1023,                          /* -nocpp */
-  OPT_nodefaultlibs = 1024,                  /* -nodefaultlibs */
-  OPT_nostartfiles = 1025,                   /* -nostartfiles */
-  OPT_nostdinc = 1026,                       /* -nostdinc */
-  OPT_nostdinc__ = 1027,                     /* -nostdinc++ */
-  OPT_nostdlib = 1028,                       /* -nostdlib */
-  OPT_o = 1029,                              /* -o */
-  OPT_p = 1030,                              /* -p */
-  OPT_pass_exit_codes = 1031,                /* -pass-exit-codes */
-  OPT_pedantic = 1032,                       /* -pedantic */
-  OPT_pedantic_errors = 1033,                /* -pedantic-errors */
-  OPT_pg = 1034,                             /* -pg */
-  OPT_pie = 1035,                            /* -pie */
-  OPT_pipe = 1036,                           /* -pipe */
-  OPT_posix = 1037,                          /* -posix */
-  OPT_print_file_name_ = 1038,               /* -print-file-name= */
-  OPT_print_libgcc_file_name = 1039,         /* -print-libgcc-file-name */
-  OPT_print_multi_directory = 1040,          /* -print-multi-directory */
-  OPT_print_multi_lib = 1041,                /* -print-multi-lib */
-  OPT_print_multi_os_directory = 1042,       /* -print-multi-os-directory */
-  OPT_print_objc_runtime_info = 1043,        /* -print-objc-runtime-info */
-  OPT_print_prog_name_ = 1044,               /* -print-prog-name= */
-  OPT_print_search_dirs = 1045,              /* -print-search-dirs */
-  OPT_print_sysroot = 1046,                  /* -print-sysroot */
-  OPT_print_sysroot_headers_suffix = 1047,   /* -print-sysroot-headers-suffix */
-  OPT_profile = 1048,                        /* -profile */
-  OPT_pthread = 1049,                        /* -pthread */
-  OPT_quiet = 1050,                          /* -quiet */
-  OPT_r = 1051,                              /* -r */
-  OPT_rdynamic = 1052,                       /* -rdynamic */
-  OPT_remap = 1053,                          /* -remap */
-  OPT_s = 1054,                              /* -s */
-  OPT_s_bc_abi = 1055,                       /* -s-bc-abi */
-  OPT_save_temps = 1056,                     /* -save-temps */
-  OPT_save_temps_ = 1057,                    /* -save-temps= */
-  OPT_shared = 1058,                         /* -shared */
-  OPT_shared_libgcc = 1059,                  /* -shared-libgcc */
-  /* OPT_specs = 1060, */                    /* -specs */
-  OPT_specs_ = 1061,                         /* -specs= */
-  OPT_static = 1062,                         /* -static */
-  OPT_static_libgcc = 1063,                  /* -static-libgcc */
-  OPT_static_libgcj = 1064,                  /* -static-libgcj */
-  OPT_static_libgfortran = 1065,             /* -static-libgfortran */
-  OPT_static_libgo = 1066,                   /* -static-libgo */
-  OPT_static_libstdc__ = 1067,               /* -static-libstdc++ */
-  /* OPT_std_c__03 = 1068, */                /* -std=c++03 */
-  OPT_std_c__0x = 1069,                      /* -std=c++0x */
-  OPT_std_c__98 = 1070,                      /* -std=c++98 */
-  OPT_std_c1x = 1071,                        /* -std=c1x */
-  /* OPT_std_c89 = 1072, */                  /* -std=c89 */
-  OPT_std_c90 = 1073,                        /* -std=c90 */
-  OPT_std_c99 = 1074,                        /* -std=c99 */
-  /* OPT_std_c9x = 1075, */                  /* -std=c9x */
-  OPT_std_f2003 = 1076,                      /* -std=f2003 */
-  OPT_std_f2008 = 1077,                      /* -std=f2008 */
-  OPT_std_f95 = 1078,                        /* -std=f95 */
-  OPT_std_gnu = 1079,                        /* -std=gnu */
-  OPT_std_gnu__0x = 1080,                    /* -std=gnu++0x */
-  OPT_std_gnu__98 = 1081,                    /* -std=gnu++98 */
-  OPT_std_gnu1x = 1082,                      /* -std=gnu1x */
-  /* OPT_std_gnu89 = 1083, */                /* -std=gnu89 */
-  OPT_std_gnu90 = 1084,                      /* -std=gnu90 */
-  OPT_std_gnu99 = 1085,                      /* -std=gnu99 */
-  /* OPT_std_gnu9x = 1086, */                /* -std=gnu9x */
-  /* OPT_std_iso9899_1990 = 1087, */         /* -std=iso9899:1990 */
-  OPT_std_iso9899_199409 = 1088,             /* -std=iso9899:199409 */
-  /* OPT_std_iso9899_1999 = 1089, */         /* -std=iso9899:1999 */
-  /* OPT_std_iso9899_199x = 1090, */         /* -std=iso9899:199x */
-  OPT_std_legacy = 1091,                     /* -std=legacy */
-  OPT_symbolic = 1092,                       /* -symbolic */
-  OPT_t = 1093,                              /* -t */
-  OPT_time = 1094,                           /* -time */
-  OPT_time_ = 1095,                          /* -time= */
-  OPT_tno_android_cc = 1096,                 /* -tno-android-cc */
-  OPT_tno_android_ld = 1097,                 /* -tno-android-ld */
-  OPT_traditional = 1098,                    /* -traditional */
-  OPT_traditional_cpp = 1099,                /* -traditional-cpp */
-  OPT_trigraphs = 1100,                      /* -trigraphs */
-  OPT_u = 1101,                              /* -u */
-  OPT_undef = 1102,                          /* -undef */
-  OPT_v = 1103,                              /* -v */
-  OPT_version = 1104,                        /* -version */
-  OPT_w = 1105,                              /* -w */
-  OPT_wrapper = 1106,                        /* -wrapper */
-  OPT_x = 1107,                              /* -x */
-  OPT_z = 1108,                              /* -z */
+  /* OPT_Wc__11_compat = 176, */             /* -Wc++11-compat */
+  OPT_Wcast_align = 177,                     /* -Wcast-align */
+  OPT_Wcast_qual = 178,                      /* -Wcast-qual */
+  OPT_Wchar_concat = 179,                    /* -Wchar-concat */
+  OPT_Wchar_subscripts = 180,                /* -Wchar-subscripts */
+  OPT_Wcharacter_truncation = 181,           /* -Wcharacter-truncation */
+  OPT_Wclobbered = 182,                      /* -Wclobbered */
+  OPT_Wcomment = 183,                        /* -Wcomment */
+  /* OPT_Wcomments = 184, */                 /* -Wcomments */
+  OPT_Wcondition_assign = 185,               /* -Wcondition-assign */
+  OPT_Wconstructor_name = 186,               /* -Wconstructor-name */
+  OPT_Wconversion = 187,                     /* -Wconversion */
+  OPT_Wconversion_extra = 188,               /* -Wconversion-extra */
+  OPT_Wconversion_null = 189,                /* -Wconversion-null */
+  OPT_Wcoverage_mismatch = 190,              /* -Wcoverage-mismatch */
+  OPT_Wcpp = 191,                            /* -Wcpp */
+  OPT_Wctor_dtor_privacy = 192,              /* -Wctor-dtor-privacy */
+  OPT_Wdeclaration_after_statement = 193,    /* -Wdeclaration-after-statement */
+  OPT_Wdep_ann = 194,                        /* -Wdep-ann */
+  OPT_Wdeprecated = 195,                     /* -Wdeprecated */
+  OPT_Wdeprecated_declarations = 196,        /* -Wdeprecated-declarations */
+  OPT_Wdisabled_optimization = 197,          /* -Wdisabled-optimization */
+  OPT_Wdiscouraged = 198,                    /* -Wdiscouraged */
+  OPT_Wdiv_by_zero = 199,                    /* -Wdiv-by-zero */
+  OPT_Wdouble_promotion = 200,               /* -Wdouble-promotion */
+  OPT_Weffc__ = 201,                         /* -Weffc++ */
+  OPT_Wempty_block = 202,                    /* -Wempty-block */
+  OPT_Wempty_body = 203,                     /* -Wempty-body */
+  OPT_Wendif_labels = 204,                   /* -Wendif-labels */
+  OPT_Wenum_compare = 205,                   /* -Wenum-compare */
+  OPT_Wenum_identifier = 206,                /* -Wenum-identifier */
+  OPT_Wenum_switch = 207,                    /* -Wenum-switch */
+  OPT_Werror = 208,                          /* -Werror */
+  /* OPT_Werror_implicit_function_declaration = 209, *//* -Werror-implicit-function-declaration */
+  OPT_Werror_ = 210,                         /* -Werror= */
+  OPT_Wextra = 211,                          /* -Wextra */
+  OPT_Wextraneous_semicolon = 212,           /* -Wextraneous-semicolon */
+  OPT_Wfallthrough = 213,                    /* -Wfallthrough */
+  OPT_Wfatal_errors = 214,                   /* -Wfatal-errors */
+  OPT_Wfield_hiding = 215,                   /* -Wfield-hiding */
+  OPT_Wfinal_bound = 216,                    /* -Wfinal-bound */
+  OPT_Wfinally = 217,                        /* -Wfinally */
+  OPT_Wfloat_equal = 218,                    /* -Wfloat-equal */
+  OPT_Wforbidden = 219,                      /* -Wforbidden */
+  OPT_Wformat = 220,                         /* -Wformat */
+  OPT_Wformat_contains_nul = 221,            /* -Wformat-contains-nul */
+  OPT_Wformat_extra_args = 222,              /* -Wformat-extra-args */
+  OPT_Wformat_nonliteral = 223,              /* -Wformat-nonliteral */
+  OPT_Wformat_security = 224,                /* -Wformat-security */
+  OPT_Wformat_y2k = 225,                     /* -Wformat-y2k */
+  OPT_Wformat_zero_length = 226,             /* -Wformat-zero-length */
+  OPT_Wformat_ = 227,                        /* -Wformat= */
+  OPT_Wframe_larger_than_ = 228,             /* -Wframe-larger-than= */
+  OPT_Whiding = 229,                         /* -Whiding */
+  OPT_Wignored_qualifiers = 230,             /* -Wignored-qualifiers */
+  OPT_Wimplicit = 231,                       /* -Wimplicit */
+  OPT_Wimplicit_function_declaration = 232,  /* -Wimplicit-function-declaration */
+  OPT_Wimplicit_int = 233,                   /* -Wimplicit-int */
+  OPT_Wimplicit_interface = 234,             /* -Wimplicit-interface */
+  OPT_Wimplicit_procedure = 235,             /* -Wimplicit-procedure */
+  /* OPT_Wimport = 236, */                   /* -Wimport */
+  OPT_Windirect_static = 237,                /* -Windirect-static */
+  OPT_Winit_self = 238,                      /* -Winit-self */
+  OPT_Winline = 239,                         /* -Winline */
+  OPT_Wint_to_pointer_cast = 240,            /* -Wint-to-pointer-cast */
+  OPT_Wintf_annotation = 241,                /* -Wintf-annotation */
+  OPT_Wintf_non_inherited = 242,             /* -Wintf-non-inherited */
+  OPT_Wintrinsic_shadow = 243,               /* -Wintrinsic-shadow */
+  OPT_Wintrinsics_std = 244,                 /* -Wintrinsics-std */
+  OPT_Winvalid_offsetof = 245,               /* -Winvalid-offsetof */
+  OPT_Winvalid_pch = 246,                    /* -Winvalid-pch */
+  OPT_Wjavadoc = 247,                        /* -Wjavadoc */
+  OPT_Wjump_misses_init = 248,               /* -Wjump-misses-init */
+  OPT_Wl_ = 249,                             /* -Wl, */
+  /* OPT_Wlarger_than_ = 250, */             /* -Wlarger-than- */
+  OPT_Wlarger_than_ = 251,                   /* -Wlarger-than= */
+  OPT_Wline_truncation = 252,                /* -Wline-truncation */
+  OPT_Wlocal_hiding = 253,                   /* -Wlocal-hiding */
+  OPT_Wlogical_op = 254,                     /* -Wlogical-op */
+  OPT_Wlong_long = 255,                      /* -Wlong-long */
+  OPT_Wmain = 256,                           /* -Wmain */
+  OPT_Wmasked_catch_block = 257,             /* -Wmasked-catch-block */
+  OPT_Wmaybe_uninitialized = 258,            /* -Wmaybe-uninitialized */
+  OPT_Wmissing_braces = 259,                 /* -Wmissing-braces */
+  OPT_Wmissing_declarations = 260,           /* -Wmissing-declarations */
+  OPT_Wmissing_field_initializers = 261,     /* -Wmissing-field-initializers */
+  OPT_Wmissing_format_attribute = 262,       /* -Wmissing-format-attribute */
+  OPT_Wmissing_include_dirs = 263,           /* -Wmissing-include-dirs */
+  OPT_Wmissing_noreturn = 264,               /* -Wmissing-noreturn */
+  OPT_Wmissing_parameter_type = 265,         /* -Wmissing-parameter-type */
+  OPT_Wmissing_prototypes = 266,             /* -Wmissing-prototypes */
+  OPT_Wmudflap = 267,                        /* -Wmudflap */
+  OPT_Wmultichar = 268,                      /* -Wmultichar */
+  OPT_Wnarrowing = 269,                      /* -Wnarrowing */
+  OPT_Wnested_externs = 270,                 /* -Wnested-externs */
+  OPT_Wnls = 271,                            /* -Wnls */
+  OPT_Wno_effect_assign = 272,               /* -Wno-effect-assign */
+  OPT_Wnoexcept = 273,                       /* -Wnoexcept */
+  OPT_Wnon_template_friend = 274,            /* -Wnon-template-friend */
+  OPT_Wnon_virtual_dtor = 275,               /* -Wnon-virtual-dtor */
+  OPT_Wnonnull = 276,                        /* -Wnonnull */
+  OPT_Wnormalized_ = 277,                    /* -Wnormalized= */
+  OPT_Wnull = 278,                           /* -Wnull */
+  OPT_Wold_style_cast = 279,                 /* -Wold-style-cast */
+  OPT_Wold_style_declaration = 280,          /* -Wold-style-declaration */
+  OPT_Wold_style_definition = 281,           /* -Wold-style-definition */
+  OPT_Wout_of_date = 282,                    /* -Wout-of-date */
+  OPT_Wover_ann = 283,                       /* -Wover-ann */
+  OPT_Woverflow = 284,                       /* -Woverflow */
+  OPT_Woverlength_strings = 285,             /* -Woverlength-strings */
+  OPT_Woverloaded_virtual = 286,             /* -Woverloaded-virtual */
+  OPT_Woverride_init = 287,                  /* -Woverride-init */
+  OPT_Wp_ = 288,                             /* -Wp, */
+  OPT_Wpacked = 289,                         /* -Wpacked */
+  OPT_Wpacked_bitfield_compat = 290,         /* -Wpacked-bitfield-compat */
+  OPT_Wpadded = 291,                         /* -Wpadded */
+  OPT_Wparam_assign = 292,                   /* -Wparam-assign */
+  OPT_Wparentheses = 293,                    /* -Wparentheses */
+  OPT_Wpkg_default_method = 294,             /* -Wpkg-default-method */
+  OPT_Wpmf_conversions = 295,                /* -Wpmf-conversions */
+  OPT_Wpointer_arith = 296,                  /* -Wpointer-arith */
+  OPT_Wpointer_sign = 297,                   /* -Wpointer-sign */
+  OPT_Wpointer_to_int_cast = 298,            /* -Wpointer-to-int-cast */
+  OPT_Wpragmas = 299,                        /* -Wpragmas */
+  OPT_Wproperty_assign_default = 300,        /* -Wproperty-assign-default */
+  OPT_Wprotocol = 301,                       /* -Wprotocol */
+  OPT_Wpsabi = 302,                          /* -Wpsabi */
+  OPT_Wraw = 303,                            /* -Wraw */
+  OPT_Wreal_conversion = 304,                /* -Wreal-conversion */
+  OPT_Wreal_q_constant = 305,                /* -Wreal-q-constant */
+  OPT_Wredundant_decls = 306,                /* -Wredundant-decls */
+  OPT_Wredundant_modifiers = 307,            /* -Wredundant-modifiers */
+  OPT_Wreorder = 308,                        /* -Wreorder */
+  OPT_Wreturn_type = 309,                    /* -Wreturn-type */
+  OPT_Wripa_opt_mismatch = 310,              /* -Wripa-opt-mismatch */
+  OPT_Wselector = 311,                       /* -Wselector */
+  OPT_Wself_assign = 312,                    /* -Wself-assign */
+  OPT_Wself_assign_non_pod = 313,            /* -Wself-assign-non-pod */
+  OPT_Wsequence_point = 314,                 /* -Wsequence-point */
+  OPT_Wserial = 315,                         /* -Wserial */
+  OPT_Wshadow = 316,                         /* -Wshadow */
+  OPT_Wshadow_compatible_local = 317,        /* -Wshadow-compatible-local */
+  OPT_Wshadow_local = 318,                   /* -Wshadow-local */
+  OPT_Wsign_compare = 319,                   /* -Wsign-compare */
+  OPT_Wsign_conversion = 320,                /* -Wsign-conversion */
+  OPT_Wsign_promo = 321,                     /* -Wsign-promo */
+  OPT_Wspecial_param_hiding = 322,           /* -Wspecial-param-hiding */
+  OPT_Wstack_protector = 323,                /* -Wstack-protector */
+  OPT_Wstatic_access = 324,                  /* -Wstatic-access */
+  OPT_Wstatic_receiver = 325,                /* -Wstatic-receiver */
+  OPT_Wstrict_aliasing = 326,                /* -Wstrict-aliasing */
+  OPT_Wstrict_aliasing_ = 327,               /* -Wstrict-aliasing= */
+  OPT_Wstrict_null_sentinel = 328,           /* -Wstrict-null-sentinel */
+  OPT_Wstrict_overflow = 329,                /* -Wstrict-overflow */
+  OPT_Wstrict_overflow_ = 330,               /* -Wstrict-overflow= */
+  OPT_Wstrict_prototypes = 331,              /* -Wstrict-prototypes */
+  OPT_Wstrict_selector_match = 332,          /* -Wstrict-selector-match */
+  OPT_Wsuggest_attribute_const = 333,        /* -Wsuggest-attribute=const */
+  OPT_Wsuggest_attribute_noreturn = 334,     /* -Wsuggest-attribute=noreturn */
+  OPT_Wsuggest_attribute_pure = 335,         /* -Wsuggest-attribute=pure */
+  OPT_Wsuppress = 336,                       /* -Wsuppress */
+  OPT_Wsurprising = 337,                     /* -Wsurprising */
+  OPT_Wswitch = 338,                         /* -Wswitch */
+  OPT_Wswitch_default = 339,                 /* -Wswitch-default */
+  OPT_Wswitch_enum = 340,                    /* -Wswitch-enum */
+  OPT_Wsync_nand = 341,                      /* -Wsync-nand */
+  OPT_Wsynth = 342,                          /* -Wsynth */
+  OPT_Wsynthetic_access = 343,               /* -Wsynthetic-access */
+  OPT_Wsystem_headers = 344,                 /* -Wsystem-headers */
+  OPT_Wtabs = 345,                           /* -Wtabs */
+  OPT_Wtasks = 346,                          /* -Wtasks */
+  OPT_Wthread_attr_bind_param = 347,         /* -Wthread-attr-bind-param */
+  OPT_Wthread_mismatched_lock_acq_rel = 348, /* -Wthread-mismatched-lock-acq-rel */
+  OPT_Wthread_mismatched_lock_order = 349,   /* -Wthread-mismatched-lock-order */
+  OPT_Wthread_reentrant_lock = 350,          /* -Wthread-reentrant-lock */
+  OPT_Wthread_safety = 351,                  /* -Wthread-safety */
+  OPT_Wthread_unguarded_func = 352,          /* -Wthread-unguarded-func */
+  OPT_Wthread_unguarded_var = 353,           /* -Wthread-unguarded-var */
+  OPT_Wthread_unsupported_lock_name = 354,   /* -Wthread-unsupported-lock-name */
+  OPT_Wthread_warn_optimization = 355,       /* -Wthread-warn-optimization */
+  OPT_Wtraditional = 356,                    /* -Wtraditional */
+  OPT_Wtraditional_conversion = 357,         /* -Wtraditional-conversion */
+  OPT_Wtrampolines = 358,                    /* -Wtrampolines */
+  OPT_Wtrigraphs = 359,                      /* -Wtrigraphs */
+  OPT_Wtype_hiding = 360,                    /* -Wtype-hiding */
+  OPT_Wtype_limits = 361,                    /* -Wtype-limits */
+  OPT_Wuncheck = 362,                        /* -Wuncheck */
+  OPT_Wundeclared_selector = 363,            /* -Wundeclared-selector */
+  OPT_Wundef = 364,                          /* -Wundef */
+  OPT_Wunderflow = 365,                      /* -Wunderflow */
+  OPT_Wuninitialized = 366,                  /* -Wuninitialized */
+  OPT_Wunknown_pragmas = 367,                /* -Wunknown-pragmas */
+  OPT_Wunnecessary_else = 368,               /* -Wunnecessary-else */
+  OPT_Wunqualified_field = 369,              /* -Wunqualified-field */
+  /* OPT_Wunreachable_code = 370, */         /* -Wunreachable-code */
+  OPT_Wunsafe_loop_optimizations = 371,      /* -Wunsafe-loop-optimizations */
+  OPT_Wunsuffixed_float_constants = 372,     /* -Wunsuffixed-float-constants */
+  OPT_Wunused = 373,                         /* -Wunused */
+  OPT_Wunused_argument = 374,                /* -Wunused-argument */
+  OPT_Wunused_but_set_parameter = 375,       /* -Wunused-but-set-parameter */
+  OPT_Wunused_but_set_variable = 376,        /* -Wunused-but-set-variable */
+  OPT_Wunused_dummy_argument = 377,          /* -Wunused-dummy-argument */
+  OPT_Wunused_function = 378,                /* -Wunused-function */
+  OPT_Wunused_import = 379,                  /* -Wunused-import */
+  OPT_Wunused_label = 380,                   /* -Wunused-label */
+  OPT_Wunused_local = 381,                   /* -Wunused-local */
+  OPT_Wunused_macros = 382,                  /* -Wunused-macros */
+  OPT_Wunused_parameter = 383,               /* -Wunused-parameter */
+  OPT_Wunused_private = 384,                 /* -Wunused-private */
+  OPT_Wunused_result = 385,                  /* -Wunused-result */
+  OPT_Wunused_thrown = 386,                  /* -Wunused-thrown */
+  OPT_Wunused_value = 387,                   /* -Wunused-value */
+  OPT_Wunused_variable = 388,                /* -Wunused-variable */
+  OPT_Wuseless_type_check = 389,             /* -Wuseless-type-check */
+  OPT_Wvarargs_cast = 390,                   /* -Wvarargs-cast */
+  OPT_Wvariadic_macros = 391,                /* -Wvariadic-macros */
+  OPT_Wvla = 392,                            /* -Wvla */
+  OPT_Wvolatile_register_var = 393,          /* -Wvolatile-register-var */
+  OPT_Wwarning_token = 394,                  /* -Wwarning-token */
+  OPT_Wwrite_strings = 395,                  /* -Wwrite-strings */
+  OPT_Xassembler = 396,                      /* -Xassembler */
+  OPT_Xlinker = 397,                         /* -Xlinker */
+  OPT_Xpreprocessor = 398,                   /* -Xpreprocessor */
+  OPT_Z = 399,                               /* -Z */
+  OPT_ansi = 400,                            /* -ansi */
+  OPT_aux_info = 401,                        /* -aux-info */
+  /* OPT_aux_info_ = 402, */                 /* -aux-info= */
+  OPT_auxbase = 403,                         /* -auxbase */
+  OPT_auxbase_strip = 404,                   /* -auxbase-strip */
+  /* OPT_bootclasspath = 405, */             /* -bootclasspath */
+  OPT_c = 406,                               /* -c */
+  OPT_canonical_prefixes = 407,              /* -canonical-prefixes */
+  /* OPT_classpath = 408, */                 /* -classpath */
+  OPT_coverage = 409,                        /* -coverage */
+  OPT_cpp = 410,                             /* -cpp */
+  OPT_cpp_ = 411,                            /* -cpp= */
+  OPT_d = 412,                               /* -d */
+  OPT_dumpbase = 413,                        /* -dumpbase */
+  OPT_dumpdir = 414,                         /* -dumpdir */
+  OPT_dumpmachine = 415,                     /* -dumpmachine */
+  OPT_dumpspecs = 416,                       /* -dumpspecs */
+  OPT_dumpversion = 417,                     /* -dumpversion */
+  OPT_e = 418,                               /* -e */
+  /* OPT_encoding = 419, */                  /* -encoding */
+  OPT_export_dynamic = 420,                  /* -export-dynamic */
+  OPT_extdirs = 421,                         /* -extdirs */
+  /* OPT_fCLASSPATH_ = 422, */               /* -fCLASSPATH= */
+  OPT_fPIC = 423,                            /* -fPIC */
+  OPT_fPIE = 424,                            /* -fPIE */
+  OPT_fRTS_ = 425,                           /* -fRTS= */
+  OPT_fabi_version_ = 426,                   /* -fabi-version= */
+  OPT_faccess_control = 427,                 /* -faccess-control */
+  OPT_falign_commons = 428,                  /* -falign-commons */
+  OPT_falign_functions = 429,                /* -falign-functions */
+  OPT_falign_functions_ = 430,               /* -falign-functions= */
+  OPT_falign_jumps = 431,                    /* -falign-jumps */
+  OPT_falign_jumps_ = 432,                   /* -falign-jumps= */
+  OPT_falign_labels = 433,                   /* -falign-labels */
+  OPT_falign_labels_ = 434,                  /* -falign-labels= */
+  OPT_falign_loops = 435,                    /* -falign-loops */
+  OPT_falign_loops_ = 436,                   /* -falign-loops= */
+  OPT_fall_intrinsics = 437,                 /* -fall-intrinsics */
+  /* OPT_fall_virtual = 438, */              /* -fall-virtual */
+  OPT_fallow_leading_underscore = 439,       /* -fallow-leading-underscore */
+  /* OPT_falt_external_templates = 440, */   /* -falt-external-templates */
+  /* OPT_fargument_alias = 441, */           /* -fargument-alias */
+  /* OPT_fargument_noalias = 442, */         /* -fargument-noalias */
+  /* OPT_fargument_noalias_anything = 443, *//* -fargument-noalias-anything */
+  /* OPT_fargument_noalias_global = 444, */  /* -fargument-noalias-global */
+  OPT_fasm = 445,                            /* -fasm */
+  OPT_fassert = 446,                         /* -fassert */
+  OPT_fassociative_math = 447,               /* -fassociative-math */
+  OPT_fassume_compiled = 448,                /* -fassume-compiled */
+  OPT_fassume_compiled_ = 449,               /* -fassume-compiled= */
+  OPT_fasynchronous_unwind_tables = 450,     /* -fasynchronous-unwind-tables */
+  OPT_fauto_inc_dec = 451,                   /* -fauto-inc-dec */
+  OPT_fautomatic = 452,                      /* -fautomatic */
+  OPT_faux_classpath = 453,                  /* -faux-classpath */
+  OPT_fbackslash = 454,                      /* -fbackslash */
+  OPT_fbacktrace = 455,                      /* -fbacktrace */
+  OPT_fblas_matmul_limit_ = 456,             /* -fblas-matmul-limit= */
+  OPT_fbootclasspath_ = 457,                 /* -fbootclasspath= */
+  OPT_fbootstrap_classes = 458,              /* -fbootstrap-classes */
+  OPT_fbounds_check = 459,                   /* -fbounds-check */
+  OPT_fbranch_count_reg = 460,               /* -fbranch-count-reg */
+  OPT_fbranch_probabilities = 461,           /* -fbranch-probabilities */
+  OPT_fbranch_target_load_optimize = 462,    /* -fbranch-target-load-optimize */
+  OPT_fbranch_target_load_optimize2 = 463,   /* -fbranch-target-load-optimize2 */
+  OPT_fbtr_bb_exclusive = 464,               /* -fbtr-bb-exclusive */
+  OPT_fbuiltin = 465,                        /* -fbuiltin */
+  OPT_fbuiltin_ = 466,                       /* -fbuiltin- */
+  OPT_fcall_saved_ = 467,                    /* -fcall-saved- */
+  OPT_fcall_used_ = 468,                     /* -fcall-used- */
+  OPT_fcaller_saves = 469,                   /* -fcaller-saves */
+  OPT_fcallgraph_profiles_sections = 470,    /* -fcallgraph-profiles-sections */
+  OPT_fcheck_array_temporaries = 471,        /* -fcheck-array-temporaries */
+  OPT_fcheck_data_deps = 472,                /* -fcheck-data-deps */
+  OPT_fcheck_new = 473,                      /* -fcheck-new */
+  OPT_fcheck_references = 474,               /* -fcheck-references */
+  OPT_fcheck_ = 475,                         /* -fcheck= */
+  OPT_fclasspath_ = 476,                     /* -fclasspath= */
+  OPT_fclone_hot_version_paths = 477,        /* -fclone-hot-version-paths */
+  OPT_fcoarray_ = 478,                       /* -fcoarray= */
+  OPT_fcombine_stack_adjustments = 479,      /* -fcombine-stack-adjustments */
+  OPT_fcommon = 480,                         /* -fcommon */
+  OPT_fcompare_debug = 481,                  /* -fcompare-debug */
+  OPT_fcompare_debug_second = 482,           /* -fcompare-debug-second */
+  OPT_fcompare_debug_ = 483,                 /* -fcompare-debug= */
+  OPT_fcompare_elim = 484,                   /* -fcompare-elim */
+  OPT_fcompile_resource_ = 485,              /* -fcompile-resource= */
+  OPT_fcond_mismatch = 486,                  /* -fcond-mismatch */
+  OPT_fconserve_space = 487,                 /* -fconserve-space */
+  OPT_fconserve_stack = 488,                 /* -fconserve-stack */
+  OPT_fconstant_string_class_ = 489,         /* -fconstant-string-class= */
+  OPT_fconstexpr_depth_ = 490,               /* -fconstexpr-depth= */
+  OPT_fconvert_big_endian = 491,             /* -fconvert=big-endian */
+  OPT_fconvert_little_endian = 492,          /* -fconvert=little-endian */
+  OPT_fconvert_native = 493,                 /* -fconvert=native */
+  OPT_fconvert_swap = 494,                   /* -fconvert=swap */
+  OPT_fcprop_registers = 495,                /* -fcprop-registers */
+  OPT_fcray_pointer = 496,                   /* -fcray-pointer */
+  OPT_fcrossjumping = 497,                   /* -fcrossjumping */
+  OPT_fcse_follow_jumps = 498,               /* -fcse-follow-jumps */
+  /* OPT_fcse_skip_blocks = 499, */          /* -fcse-skip-blocks */
+  OPT_fcx_fortran_rules = 500,               /* -fcx-fortran-rules */
+  OPT_fcx_limited_range = 501,               /* -fcx-limited-range */
+  OPT_fd_lines_as_code = 502,                /* -fd-lines-as-code */
+  OPT_fd_lines_as_comments = 503,            /* -fd-lines-as-comments */
+  OPT_fdata_sections = 504,                  /* -fdata-sections */
+  OPT_fdbg_cnt_list = 505,                   /* -fdbg-cnt-list */
+  OPT_fdbg_cnt_ = 506,                       /* -fdbg-cnt= */
+  OPT_fdce = 507,                            /* -fdce */
+  OPT_fdebug_prefix_map_ = 508,              /* -fdebug-prefix-map= */
+  OPT_fdeduce_init_list = 509,               /* -fdeduce-init-list */
+  OPT_fdefault_double_8 = 510,               /* -fdefault-double-8 */
+  /* OPT_fdefault_inline = 511, */           /* -fdefault-inline */
+  OPT_fdefault_integer_8 = 512,              /* -fdefault-integer-8 */
+  OPT_fdefault_real_8 = 513,                 /* -fdefault-real-8 */
+  OPT_fdefer_pop = 514,                      /* -fdefer-pop */
+  OPT_fdelayed_branch = 515,                 /* -fdelayed-branch */
+  OPT_fdelete_null_pointer_checks = 516,     /* -fdelete-null-pointer-checks */
+  OPT_fdevirtualize = 517,                   /* -fdevirtualize */
+  OPT_fdiagnostics_show_location_ = 518,     /* -fdiagnostics-show-location= */
+  OPT_fdiagnostics_show_option = 519,        /* -fdiagnostics-show-option */
+  OPT_fdirectives_only = 520,                /* -fdirectives-only */
+  OPT_fdisable_ = 521,                       /* -fdisable- */
+  OPT_fdisable_assertions = 522,             /* -fdisable-assertions */
+  OPT_fdisable_assertions_ = 523,            /* -fdisable-assertions= */
+  OPT_fdollar_ok = 524,                      /* -fdollar-ok */
+  OPT_fdollars_in_identifiers = 525,         /* -fdollars-in-identifiers */
+  OPT_fdse = 526,                            /* -fdse */
+  OPT_fdump_ = 527,                          /* -fdump- */
+  OPT_fdump_core = 528,                      /* -fdump-core */
+  OPT_fdump_final_insns = 529,               /* -fdump-final-insns */
+  OPT_fdump_final_insns_ = 530,              /* -fdump-final-insns= */
+  OPT_fdump_fortran_optimized = 531,         /* -fdump-fortran-optimized */
+  OPT_fdump_fortran_original = 532,          /* -fdump-fortran-original */
+  OPT_fdump_go_spec_ = 533,                  /* -fdump-go-spec= */
+  OPT_fdump_noaddr = 534,                    /* -fdump-noaddr */
+  OPT_fdump_parse_tree = 535,                /* -fdump-parse-tree */
+  OPT_fdump_passes = 536,                    /* -fdump-passes */
+  OPT_fdump_unnumbered = 537,                /* -fdump-unnumbered */
+  OPT_fdump_unnumbered_links = 538,          /* -fdump-unnumbered-links */
+  OPT_fdwarf2_cfi_asm = 539,                 /* -fdwarf2-cfi-asm */
+  OPT_fearly_inlining = 540,                 /* -fearly-inlining */
+  OPT_felide_constructors = 541,             /* -felide-constructors */
+  OPT_feliminate_dwarf2_dups = 542,          /* -feliminate-dwarf2-dups */
+  OPT_feliminate_unused_debug_symbols = 543, /* -feliminate-unused-debug-symbols */
+  OPT_feliminate_unused_debug_types = 544,   /* -feliminate-unused-debug-types */
+  OPT_femit_class_debug_always = 545,        /* -femit-class-debug-always */
+  OPT_femit_class_file = 546,                /* -femit-class-file */
+  OPT_femit_class_files = 547,               /* -femit-class-files */
+  OPT_femit_struct_debug_baseonly = 548,     /* -femit-struct-debug-baseonly */
+  OPT_femit_struct_debug_detailed_ = 549,    /* -femit-struct-debug-detailed= */
+  OPT_femit_struct_debug_reduced = 550,      /* -femit-struct-debug-reduced */
+  OPT_fenable_ = 551,                        /* -fenable- */
+  OPT_fenable_assertions = 552,              /* -fenable-assertions */
+  OPT_fenable_assertions_ = 553,             /* -fenable-assertions= */
+  OPT_fenable_icf_debug = 554,               /* -fenable-icf-debug */
+  OPT_fencoding_ = 555,                      /* -fencoding= */
+  OPT_fenforce_eh_specs = 556,               /* -fenforce-eh-specs */
+  /* OPT_fenum_int_equiv = 557, */           /* -fenum-int-equiv */
+  OPT_fexceptions = 558,                     /* -fexceptions */
+  OPT_fexcess_precision_ = 559,              /* -fexcess-precision= */
+  OPT_fexec_charset_ = 560,                  /* -fexec-charset= */
+  OPT_fexpensive_optimizations = 561,        /* -fexpensive-optimizations */
+  OPT_fextdirs_ = 562,                       /* -fextdirs= */
+  OPT_fextended_identifiers = 563,           /* -fextended-identifiers */
+  OPT_fexternal_blas = 564,                  /* -fexternal-blas */
+  /* OPT_fexternal_templates = 565, */       /* -fexternal-templates */
+  OPT_ff2c = 566,                            /* -ff2c */
+  OPT_ffast_math = 567,                      /* -ffast-math */
+  OPT_ffilelist_file = 568,                  /* -ffilelist-file */
+  OPT_ffinite_math_only = 569,               /* -ffinite-math-only */
+  OPT_ffixed_ = 570,                         /* -ffixed- */
+  OPT_ffixed_form = 571,                     /* -ffixed-form */
+  OPT_ffixed_line_length_ = 572,             /* -ffixed-line-length- */
+  OPT_ffixed_line_length_none = 573,         /* -ffixed-line-length-none */
+  OPT_ffloat_store = 574,                    /* -ffloat-store */
+  OPT_ffor_scope = 575,                      /* -ffor-scope */
+  /* OPT_fforce_addr = 576, */               /* -fforce-addr */
+  OPT_fforce_classes_archive_check = 577,    /* -fforce-classes-archive-check */
+  OPT_fforward_propagate = 578,              /* -fforward-propagate */
+  OPT_ffp_contract_ = 579,                   /* -ffp-contract= */
+  OPT_ffpe_trap_ = 580,                      /* -ffpe-trap= */
+  OPT_ffree_form = 581,                      /* -ffree-form */
+  OPT_ffree_line_length_ = 582,              /* -ffree-line-length- */
+  OPT_ffree_line_length_none = 583,          /* -ffree-line-length-none */
+  OPT_ffreestanding = 584,                   /* -ffreestanding */
+  OPT_ffriend_injection = 585,               /* -ffriend-injection */
+  OPT_ffunction_cse = 586,                   /* -ffunction-cse */
+  OPT_ffunction_sections = 587,              /* -ffunction-sections */
+  OPT_fgcse = 588,                           /* -fgcse */
+  OPT_fgcse_after_reload = 589,              /* -fgcse-after-reload */
+  OPT_fgcse_las = 590,                       /* -fgcse-las */
+  OPT_fgcse_lm = 591,                        /* -fgcse-lm */
+  OPT_fgcse_sm = 592,                        /* -fgcse-sm */
+  OPT_fgnu_keywords = 593,                   /* -fgnu-keywords */
+  OPT_fgnu_runtime = 594,                    /* -fgnu-runtime */
+  OPT_fgnu89_inline = 595,                   /* -fgnu89-inline */
+  OPT_fgo_dump_ = 596,                       /* -fgo-dump- */
+  OPT_fgo_prefix_ = 597,                     /* -fgo-prefix= */
+  OPT_fgraphite = 598,                       /* -fgraphite */
+  OPT_fgraphite_identity = 599,              /* -fgraphite-identity */
+  OPT_fguess_branch_probability = 600,       /* -fguess-branch-probability */
+  /* OPT_fguiding_decls = 601, */            /* -fguiding-decls */
+  /* OPT_fhandle_exceptions = 602, */        /* -fhandle-exceptions */
+  OPT_fhash_synchronization = 603,           /* -fhash-synchronization */
+  /* OPT_fhelp = 604, */                     /* -fhelp */
+  /* OPT_fhelp_ = 605, */                    /* -fhelp= */
+  /* OPT_fhonor_std = 606, */                /* -fhonor-std */
+  OPT_fhosted = 607,                         /* -fhosted */
+  /* OPT_fhuge_objects = 608, */             /* -fhuge-objects */
+  OPT_fident = 609,                          /* -fident */
+  OPT_fif_conversion = 610,                  /* -fif-conversion */
+  OPT_fif_conversion2 = 611,                 /* -fif-conversion2 */
+  OPT_fimplement_inlines = 612,              /* -fimplement-inlines */
+  OPT_fimplicit_inline_templates = 613,      /* -fimplicit-inline-templates */
+  OPT_fimplicit_none = 614,                  /* -fimplicit-none */
+  OPT_fimplicit_templates = 615,             /* -fimplicit-templates */
+  OPT_findirect_classes = 616,               /* -findirect-classes */
+  OPT_findirect_dispatch = 617,              /* -findirect-dispatch */
+  OPT_findirect_inlining = 618,              /* -findirect-inlining */
+  OPT_finhibit_size_directive = 619,         /* -finhibit-size-directive */
+  OPT_finit_character_ = 620,                /* -finit-character= */
+  OPT_finit_integer_ = 621,                  /* -finit-integer= */
+  OPT_finit_local_zero = 622,                /* -finit-local-zero */
+  OPT_finit_logical_ = 623,                  /* -finit-logical= */
+  OPT_finit_real_ = 624,                     /* -finit-real= */
+  OPT_finline = 625,                         /* -finline */
+  OPT_finline_functions = 626,               /* -finline-functions */
+  OPT_finline_functions_called_once = 627,   /* -finline-functions-called-once */
+  OPT_finline_hot_caller = 628,              /* -finline-hot-caller */
+  /* OPT_finline_limit_ = 629, */            /* -finline-limit- */
+  OPT_finline_limit_ = 630,                  /* -finline-limit= */
+  OPT_finline_small_functions = 631,         /* -finline-small-functions */
+  OPT_finput_charset_ = 632,                 /* -finput-charset= */
+  OPT_finstrument_functions = 633,           /* -finstrument-functions */
+  OPT_finstrument_functions_exclude_file_list_ = 634,/* -finstrument-functions-exclude-file-list= */
+  OPT_finstrument_functions_exclude_function_list_ = 635,/* -finstrument-functions-exclude-function-list= */
+  OPT_fintrinsic_modules_path = 636,         /* -fintrinsic-modules-path */
+  OPT_fipa_cp = 637,                         /* -fipa-cp */
+  OPT_fipa_cp_clone = 638,                   /* -fipa-cp-clone */
+  OPT_fipa_matrix_reorg = 639,               /* -fipa-matrix-reorg */
+  OPT_fipa_profile = 640,                    /* -fipa-profile */
+  OPT_fipa_pta = 641,                        /* -fipa-pta */
+  OPT_fipa_pure_const = 642,                 /* -fipa-pure-const */
+  OPT_fipa_reference = 643,                  /* -fipa-reference */
+  OPT_fipa_sra = 644,                        /* -fipa-sra */
+  OPT_fipa_struct_reorg = 645,               /* -fipa-struct-reorg */
+  OPT_fira_algorithm_ = 646,                 /* -fira-algorithm= */
+  OPT_fira_loop_pressure = 647,              /* -fira-loop-pressure */
+  OPT_fira_region_ = 648,                    /* -fira-region= */
+  OPT_fira_share_save_slots = 649,           /* -fira-share-save-slots */
+  OPT_fira_share_spill_slots = 650,          /* -fira-share-spill-slots */
+  OPT_fira_verbose_ = 651,                   /* -fira-verbose= */
+  OPT_fivopts = 652,                         /* -fivopts */
+  OPT_fjni = 653,                            /* -fjni */
+  OPT_fjump_tables = 654,                    /* -fjump-tables */
+  OPT_fkeep_inline_dllexport = 655,          /* -fkeep-inline-dllexport */
+  OPT_fkeep_inline_functions = 656,          /* -fkeep-inline-functions */
+  OPT_fkeep_static_consts = 657,             /* -fkeep-static-consts */
+  /* OPT_flabels_ok = 658, */                /* -flabels-ok */
+  OPT_flax_vector_conversions = 659,         /* -flax-vector-conversions */
+  OPT_fleading_underscore = 660,             /* -fleading-underscore */
+  OPT_floop_block = 661,                     /* -floop-block */
+  OPT_floop_flatten = 662,                   /* -floop-flatten */
+  OPT_floop_interchange = 663,               /* -floop-interchange */
+  /* OPT_floop_optimize = 664, */            /* -floop-optimize */
+  OPT_floop_parallelize_all = 665,           /* -floop-parallelize-all */
+  OPT_floop_strip_mine = 666,                /* -floop-strip-mine */
+  OPT_flto = 667,                            /* -flto */
+  OPT_flto_compression_level_ = 668,         /* -flto-compression-level= */
+  OPT_flto_partition_1to1 = 669,             /* -flto-partition=1to1 */
+  OPT_flto_partition_balanced = 670,         /* -flto-partition=balanced */
+  OPT_flto_partition_none = 671,             /* -flto-partition=none */
+  OPT_flto_report = 672,                     /* -flto-report */
+  OPT_flto_ = 673,                           /* -flto= */
+  OPT_fltrans = 674,                         /* -fltrans */
+  OPT_fltrans_output_list_ = 675,            /* -fltrans-output-list= */
+  OPT_fmain_ = 676,                          /* -fmain= */
+  OPT_fmath_errno = 677,                     /* -fmath-errno */
+  OPT_fmax_array_constructor_ = 678,         /* -fmax-array-constructor= */
+  OPT_fmax_errors_ = 679,                    /* -fmax-errors= */
+  OPT_fmax_identifier_length_ = 680,         /* -fmax-identifier-length= */
+  OPT_fmax_stack_var_size_ = 681,            /* -fmax-stack-var-size= */
+  OPT_fmax_subrecord_length_ = 682,          /* -fmax-subrecord-length= */
+  OPT_fmem_report = 683,                     /* -fmem-report */
+  OPT_fmerge_all_constants = 684,            /* -fmerge-all-constants */
+  OPT_fmerge_constants = 685,                /* -fmerge-constants */
+  OPT_fmerge_debug_strings = 686,            /* -fmerge-debug-strings */
+  OPT_fmessage_length_ = 687,                /* -fmessage-length= */
+  OPT_fmodule_private = 688,                 /* -fmodule-private */
+  OPT_fmodulo_sched = 689,                   /* -fmodulo-sched */
+  OPT_fmodulo_sched_allow_regmoves = 690,    /* -fmodulo-sched-allow-regmoves */
+  OPT_fmove_loop_invariants = 691,           /* -fmove-loop-invariants */
+  OPT_fms_extensions = 692,                  /* -fms-extensions */
+  OPT_fmudflap = 693,                        /* -fmudflap */
+  OPT_fmudflapir = 694,                      /* -fmudflapir */
+  OPT_fmudflapth = 695,                      /* -fmudflapth */
+  /* OPT_fname_mangling_version_ = 696, */   /* -fname-mangling-version- */
+  /* OPT_fnew_abi = 697, */                  /* -fnew-abi */
+  OPT_fnext_runtime = 698,                   /* -fnext-runtime */
+  OPT_fnil_receivers = 699,                  /* -fnil-receivers */
+  OPT_fnon_call_exceptions = 700,            /* -fnon-call-exceptions */
+  OPT_fnonansi_builtins = 701,               /* -fnonansi-builtins */
+  /* OPT_fnonnull_objects = 702, */          /* -fnonnull-objects */
+  OPT_fnothrow_opt = 703,                    /* -fnothrow-opt */
+  OPT_fobjc_abi_version_ = 704,              /* -fobjc-abi-version= */
+  OPT_fobjc_call_cxx_cdtors = 705,           /* -fobjc-call-cxx-cdtors */
+  OPT_fobjc_direct_dispatch = 706,           /* -fobjc-direct-dispatch */
+  OPT_fobjc_exceptions = 707,                /* -fobjc-exceptions */
+  OPT_fobjc_gc = 708,                        /* -fobjc-gc */
+  OPT_fobjc_nilcheck = 709,                  /* -fobjc-nilcheck */
+  OPT_fobjc_sjlj_exceptions = 710,           /* -fobjc-sjlj-exceptions */
+  OPT_fobjc_std_objc1 = 711,                 /* -fobjc-std=objc1 */
+  OPT_fomit_frame_pointer = 712,             /* -fomit-frame-pointer */
+  OPT_fopenmp = 713,                         /* -fopenmp */
+  OPT_foperator_names = 714,                 /* -foperator-names */
+  OPT_fopt_info = 715,                       /* -fopt-info */
+  OPT_fopt_info_ = 716,                      /* -fopt-info= */
+  OPT_foptimize_locality = 717,              /* -foptimize-locality */
+  OPT_foptimize_register_move = 718,         /* -foptimize-register-move */
+  OPT_foptimize_sibling_calls = 719,         /* -foptimize-sibling-calls */
+  OPT_foptimize_static_class_initialization = 720,/* -foptimize-static-class-initialization */
+  /* OPT_foptional_diags = 721, */           /* -foptional-diags */
+  OPT_foutput_class_dir_ = 722,              /* -foutput-class-dir= */
+  OPT_fpack_derived = 723,                   /* -fpack-derived */
+  OPT_fpack_struct = 724,                    /* -fpack-struct */
+  OPT_fpack_struct_ = 725,                   /* -fpack-struct= */
+  OPT_fpartial_inlining = 726,               /* -fpartial-inlining */
+  OPT_fpcc_struct_return = 727,              /* -fpcc-struct-return */
+  OPT_fpch_deps = 728,                       /* -fpch-deps */
+  OPT_fpch_preprocess = 729,                 /* -fpch-preprocess */
+  OPT_fpeel_loops = 730,                     /* -fpeel-loops */
+  OPT_fpeephole = 731,                       /* -fpeephole */
+  OPT_fpeephole2 = 732,                      /* -fpeephole2 */
+  OPT_fpermissive = 733,                     /* -fpermissive */
+  OPT_fpic = 734,                            /* -fpic */
+  OPT_fpie = 735,                            /* -fpie */
+  OPT_fplan9_extensions = 736,               /* -fplan9-extensions */
+  OPT_fplugin_arg_ = 737,                    /* -fplugin-arg- */
+  OPT_fplugin_ = 738,                        /* -fplugin= */
+  OPT_fpmu_profile_generate_ = 739,          /* -fpmu-profile-generate= */
+  OPT_fpmu_profile_use_ = 740,               /* -fpmu-profile-use= */
+  OPT_fpost_ipa_mem_report = 741,            /* -fpost-ipa-mem-report */
+  OPT_fpre_ipa_mem_report = 742,             /* -fpre-ipa-mem-report */
+  OPT_fpredictive_commoning = 743,           /* -fpredictive-commoning */
+  OPT_fprefetch_loop_arrays = 744,           /* -fprefetch-loop-arrays */
+  OPT_fpreprocessed = 745,                   /* -fpreprocessed */
+  OPT_fpretty_templates = 746,               /* -fpretty-templates */
+  OPT_fprofile = 747,                        /* -fprofile */
+  OPT_fprofile_arcs = 748,                   /* -fprofile-arcs */
+  OPT_fprofile_correction = 749,             /* -fprofile-correction */
+  OPT_fprofile_dir_ = 750,                   /* -fprofile-dir= */
+  OPT_fprofile_dump = 751,                   /* -fprofile-dump */
+  OPT_fprofile_generate = 752,               /* -fprofile-generate */
+  OPT_fprofile_generate_sampling = 753,      /* -fprofile-generate-sampling */
+  OPT_fprofile_generate_ = 754,              /* -fprofile-generate= */
+  OPT_fprofile_reusedist = 755,              /* -fprofile-reusedist */
+  OPT_fprofile_use = 756,                    /* -fprofile-use */
+  OPT_fprofile_use_ = 757,                   /* -fprofile-use= */
+  OPT_fprofile_values = 758,                 /* -fprofile-values */
+  OPT_fprotect_parens = 759,                 /* -fprotect-parens */
+  OPT_frandom_seed = 760,                    /* -frandom-seed */
+  OPT_frandom_seed_ = 761,                   /* -frandom-seed= */
+  OPT_frange_check = 762,                    /* -frange-check */
+  OPT_frealloc_lhs = 763,                    /* -frealloc-lhs */
+  OPT_freciprocal_math = 764,                /* -freciprocal-math */
+  OPT_frecord_gcc_switches = 765,            /* -frecord-gcc-switches */
+  OPT_frecord_gcc_switches_in_elf = 766,     /* -frecord-gcc-switches-in-elf */
+  OPT_frecord_marker_4 = 767,                /* -frecord-marker=4 */
+  OPT_frecord_marker_8 = 768,                /* -frecord-marker=8 */
+  OPT_frecursive = 769,                      /* -frecursive */
+  OPT_freduced_reflection = 770,             /* -freduced-reflection */
+  OPT_freg_struct_return = 771,              /* -freg-struct-return */
+  OPT_fregmove = 772,                        /* -fregmove */
+  OPT_frename_registers = 773,               /* -frename-registers */
+  OPT_freorder_blocks = 774,                 /* -freorder-blocks */
+  OPT_freorder_blocks_and_partition = 775,   /* -freorder-blocks-and-partition */
+  OPT_freorder_functions = 776,              /* -freorder-functions */
+  OPT_frepack_arrays = 777,                  /* -frepack-arrays */
+  OPT_freplace_objc_classes = 778,           /* -freplace-objc-classes */
+  OPT_frepo = 779,                           /* -frepo */
+  OPT_frequire_return_statement = 780,       /* -frequire-return-statement */
+  OPT_frerun_cse_after_loop = 781,           /* -frerun-cse-after-loop */
+  /* OPT_frerun_loop_opt = 782, */           /* -frerun-loop-opt */
+  OPT_freschedule_modulo_scheduled_loops = 783,/* -freschedule-modulo-scheduled-loops */
+  OPT_fresolution_ = 784,                    /* -fresolution= */
+  OPT_fripa = 785,                           /* -fripa */
+  OPT_fripa_disallow_asm_modules = 786,      /* -fripa-disallow-asm-modules */
+  OPT_fripa_disallow_opt_mismatch = 787,     /* -fripa-disallow-opt-mismatch */
+  OPT_fripa_no_promote_always_inline_func = 788,/* -fripa-no-promote-always-inline-func */
+  OPT_fripa_peel_size_limit = 789,           /* -fripa-peel-size-limit */
+  OPT_fripa_unroll_size_limit = 790,         /* -fripa-unroll-size-limit */
+  OPT_frounding_math = 791,                  /* -frounding-math */
+  OPT_frtti = 792,                           /* -frtti */
+  OPT_fsaw_java_file = 793,                  /* -fsaw-java-file */
+  OPT_fsched_critical_path_heuristic = 794,  /* -fsched-critical-path-heuristic */
+  OPT_fsched_dep_count_heuristic = 795,      /* -fsched-dep-count-heuristic */
+  OPT_fsched_group_heuristic = 796,          /* -fsched-group-heuristic */
+  OPT_fsched_interblock = 797,               /* -fsched-interblock */
+  OPT_fsched_last_insn_heuristic = 798,      /* -fsched-last-insn-heuristic */
+  OPT_fsched_pressure = 799,                 /* -fsched-pressure */
+  OPT_fsched_rank_heuristic = 800,           /* -fsched-rank-heuristic */
+  OPT_fsched_spec = 801,                     /* -fsched-spec */
+  OPT_fsched_spec_insn_heuristic = 802,      /* -fsched-spec-insn-heuristic */
+  OPT_fsched_spec_load = 803,                /* -fsched-spec-load */
+  OPT_fsched_spec_load_dangerous = 804,      /* -fsched-spec-load-dangerous */
+  OPT_fsched_stalled_insns = 805,            /* -fsched-stalled-insns */
+  OPT_fsched_stalled_insns_dep = 806,        /* -fsched-stalled-insns-dep */
+  OPT_fsched_stalled_insns_dep_ = 807,       /* -fsched-stalled-insns-dep= */
+  OPT_fsched_stalled_insns_ = 808,           /* -fsched-stalled-insns= */
+  OPT_fsched_verbose_ = 809,                 /* -fsched-verbose= */
+  OPT_fsched2_use_superblocks = 810,         /* -fsched2-use-superblocks */
+  /* OPT_fsched2_use_traces = 811, */        /* -fsched2-use-traces */
+  OPT_fschedule_insns = 812,                 /* -fschedule-insns */
+  OPT_fschedule_insns2 = 813,                /* -fschedule-insns2 */
+  OPT_fsecond_underscore = 814,              /* -fsecond-underscore */
+  OPT_fsection_anchors = 815,                /* -fsection-anchors */
+  /* OPT_fsee = 816, */                      /* -fsee */
+  OPT_fsel_sched_pipelining = 817,           /* -fsel-sched-pipelining */
+  OPT_fsel_sched_pipelining_outer_loops = 818,/* -fsel-sched-pipelining-outer-loops */
+  OPT_fsel_sched_reschedule_pipelined = 819, /* -fsel-sched-reschedule-pipelined */
+  OPT_fselective_scheduling = 820,           /* -fselective-scheduling */
+  OPT_fselective_scheduling2 = 821,          /* -fselective-scheduling2 */
+  OPT_fshort_double = 822,                   /* -fshort-double */
+  OPT_fshort_enums = 823,                    /* -fshort-enums */
+  OPT_fshort_wchar = 824,                    /* -fshort-wchar */
+  OPT_fshow_column = 825,                    /* -fshow-column */
+  OPT_fsign_zero = 826,                      /* -fsign-zero */
+  OPT_fsignaling_nans = 827,                 /* -fsignaling-nans */
+  OPT_fsigned_bitfields = 828,               /* -fsigned-bitfields */
+  OPT_fsigned_char = 829,                    /* -fsigned-char */
+  OPT_fsigned_zeros = 830,                   /* -fsigned-zeros */
+  OPT_fsingle_precision_constant = 831,      /* -fsingle-precision-constant */
+  OPT_fsized_delete = 832,                   /* -fsized-delete */
+  OPT_fsource_filename_ = 833,               /* -fsource-filename= */
+  OPT_fsource_ = 834,                        /* -fsource= */
+  OPT_fsplit_ivs_in_unroller = 835,          /* -fsplit-ivs-in-unroller */
+  OPT_fsplit_stack = 836,                    /* -fsplit-stack */
+  OPT_fsplit_wide_types = 837,               /* -fsplit-wide-types */
+  /* OPT_fsquangle = 838, */                 /* -fsquangle */
+  /* OPT_fstack_check = 839, */              /* -fstack-check */
+  OPT_fstack_check_ = 840,                   /* -fstack-check= */
+  OPT_fstack_limit = 841,                    /* -fstack-limit */
+  OPT_fstack_limit_register_ = 842,          /* -fstack-limit-register= */
+  OPT_fstack_limit_symbol_ = 843,            /* -fstack-limit-symbol= */
+  OPT_fstack_protector = 844,                /* -fstack-protector */
+  OPT_fstack_protector_all = 845,            /* -fstack-protector-all */
+  OPT_fstack_protector_strong = 846,         /* -fstack-protector-strong */
+  OPT_fstack_usage = 847,                    /* -fstack-usage */
+  OPT_fstats = 848,                          /* -fstats */
+  OPT_fstore_check = 849,                    /* -fstore-check */
+  /* OPT_fstrength_reduce = 850, */          /* -fstrength-reduce */
+  OPT_fstrict_aliasing = 851,                /* -fstrict-aliasing */
+  OPT_fstrict_enum_precision = 852,          /* -fstrict-enum-precision */
+  OPT_fstrict_enums = 853,                   /* -fstrict-enums */
+  OPT_fstrict_overflow = 854,                /* -fstrict-overflow */
+  /* OPT_fstrict_prototype = 855, */         /* -fstrict-prototype */
+  OPT_fstrict_volatile_bitfields = 856,      /* -fstrict-volatile-bitfields */
+  OPT_fsyntax_only = 857,                    /* -fsyntax-only */
+  OPT_ftabstop_ = 858,                       /* -ftabstop= */
+  /* OPT_ftarget_help = 859, */              /* -ftarget-help */
+  OPT_ftarget_ = 860,                        /* -ftarget= */
+  /* OPT_ftemplate_depth_ = 861, */          /* -ftemplate-depth- */
+  OPT_ftemplate_depth_ = 862,                /* -ftemplate-depth= */
+  OPT_ftest_coverage = 863,                  /* -ftest-coverage */
+  /* OPT_fthis_is_variable = 864, */         /* -fthis-is-variable */
+  OPT_fthread_jumps = 865,                   /* -fthread-jumps */
+  OPT_fthreadsafe_statics = 866,             /* -fthreadsafe-statics */
+  OPT_ftime_report = 867,                    /* -ftime-report */
+  OPT_ftls_model_ = 868,                     /* -ftls-model= */
+  OPT_ftoplevel_reorder = 869,               /* -ftoplevel-reorder */
+  OPT_ftracer = 870,                         /* -ftracer */
+  OPT_ftrapping_math = 871,                  /* -ftrapping-math */
+  OPT_ftrapv = 872,                          /* -ftrapv */
+  OPT_ftree_bit_ccp = 873,                   /* -ftree-bit-ccp */
+  OPT_ftree_builtin_call_dce = 874,          /* -ftree-builtin-call-dce */
+  OPT_ftree_ccp = 875,                       /* -ftree-ccp */
+  OPT_ftree_ch = 876,                        /* -ftree-ch */
+  OPT_ftree_copy_prop = 877,                 /* -ftree-copy-prop */
+  OPT_ftree_copyrename = 878,                /* -ftree-copyrename */
+  OPT_ftree_cselim = 879,                    /* -ftree-cselim */
+  OPT_ftree_dce = 880,                       /* -ftree-dce */
+  OPT_ftree_dominator_opts = 881,            /* -ftree-dominator-opts */
+  OPT_ftree_dse = 882,                       /* -ftree-dse */
+  OPT_ftree_forwprop = 883,                  /* -ftree-forwprop */
+  OPT_ftree_fre = 884,                       /* -ftree-fre */
+  OPT_ftree_loop_distribute_patterns = 885,  /* -ftree-loop-distribute-patterns */
+  OPT_ftree_loop_distribution = 886,         /* -ftree-loop-distribution */
+  OPT_ftree_loop_if_convert = 887,           /* -ftree-loop-if-convert */
+  OPT_ftree_loop_if_convert_stores = 888,    /* -ftree-loop-if-convert-stores */
+  OPT_ftree_loop_im = 889,                   /* -ftree-loop-im */
+  OPT_ftree_loop_ivcanon = 890,              /* -ftree-loop-ivcanon */
+  /* OPT_ftree_loop_linear = 891, */         /* -ftree-loop-linear */
+  OPT_ftree_loop_optimize = 892,             /* -ftree-loop-optimize */
+  OPT_ftree_lrs = 893,                       /* -ftree-lrs */
+  OPT_ftree_parallelize_loops_ = 894,        /* -ftree-parallelize-loops= */
+  OPT_ftree_phiprop = 895,                   /* -ftree-phiprop */
+  OPT_ftree_pre = 896,                       /* -ftree-pre */
+  OPT_ftree_pta = 897,                       /* -ftree-pta */
+  OPT_ftree_reassoc = 898,                   /* -ftree-reassoc */
+  /* OPT_ftree_salias = 899, */              /* -ftree-salias */
+  OPT_ftree_scev_cprop = 900,                /* -ftree-scev-cprop */
+  OPT_ftree_sink = 901,                      /* -ftree-sink */
+  OPT_ftree_slp_vectorize = 902,             /* -ftree-slp-vectorize */
+  OPT_ftree_sra = 903,                       /* -ftree-sra */
+  /* OPT_ftree_store_ccp = 904, */           /* -ftree-store-ccp */
+  /* OPT_ftree_store_copy_prop = 905, */     /* -ftree-store-copy-prop */
+  OPT_ftree_switch_conversion = 906,         /* -ftree-switch-conversion */
+  OPT_ftree_ter = 907,                       /* -ftree-ter */
+  OPT_ftree_vect_loop_version = 908,         /* -ftree-vect-loop-version */
+  OPT_ftree_vectorize = 909,                 /* -ftree-vectorize */
+  OPT_ftree_vectorizer_verbose_ = 910,       /* -ftree-vectorizer-verbose= */
+  OPT_ftree_vrp = 911,                       /* -ftree-vrp */
+  OPT_funderscoring = 912,                   /* -funderscoring */
+  OPT_funit_at_a_time = 913,                 /* -funit-at-a-time */
+  OPT_funroll_all_loops = 914,               /* -funroll-all-loops */
+  OPT_funroll_loops = 915,                   /* -funroll-loops */
+  OPT_funsafe_loop_optimizations = 916,      /* -funsafe-loop-optimizations */
+  OPT_funsafe_math_optimizations = 917,      /* -funsafe-math-optimizations */
+  OPT_funsigned_bitfields = 918,             /* -funsigned-bitfields */
+  OPT_funsigned_char = 919,                  /* -funsigned-char */
+  OPT_funswitch_loops = 920,                 /* -funswitch-loops */
+  OPT_funwind_tables = 921,                  /* -funwind-tables */
+  OPT_fuse_atomic_builtins = 922,            /* -fuse-atomic-builtins */
+  OPT_fuse_boehm_gc = 923,                   /* -fuse-boehm-gc */
+  OPT_fuse_cxa_atexit = 924,                 /* -fuse-cxa-atexit */
+  OPT_fuse_cxa_get_exception_ptr = 925,      /* -fuse-cxa-get-exception-ptr */
+  OPT_fuse_divide_subroutine = 926,          /* -fuse-divide-subroutine */
+  OPT_fuse_ld_ = 927,                        /* -fuse-ld= */
+  OPT_fuse_linker_plugin = 928,              /* -fuse-linker-plugin */
+  OPT_fvar_tracking = 929,                   /* -fvar-tracking */
+  OPT_fvar_tracking_assignments = 930,       /* -fvar-tracking-assignments */
+  OPT_fvar_tracking_assignments_toggle = 931,/* -fvar-tracking-assignments-toggle */
+  OPT_fvar_tracking_uninit = 932,            /* -fvar-tracking-uninit */
+  OPT_fvariable_expansion_in_unroller = 933, /* -fvariable-expansion-in-unroller */
+  OPT_fvect_cost_model = 934,                /* -fvect-cost-model */
+  OPT_fverbose_asm = 935,                    /* -fverbose-asm */
+  /* OPT_fversion = 936, */                  /* -fversion */
+  OPT_fvisibility_inlines_hidden = 937,      /* -fvisibility-inlines-hidden */
+  OPT_fvisibility_ms_compat = 938,           /* -fvisibility-ms-compat */
+  OPT_fvisibility_ = 939,                    /* -fvisibility= */
+  OPT_fvpt = 940,                            /* -fvpt */
+  /* OPT_fvtable_gc = 941, */                /* -fvtable-gc */
+  /* OPT_fvtable_thunks = 942, */            /* -fvtable-thunks */
+  OPT_fweak = 943,                           /* -fweak */
+  OPT_fweb = 944,                            /* -fweb */
+  OPT_fwhole_file = 945,                     /* -fwhole-file */
+  OPT_fwhole_program = 946,                  /* -fwhole-program */
+  OPT_fwide_exec_charset_ = 947,             /* -fwide-exec-charset= */
+  OPT_fworking_directory = 948,              /* -fworking-directory */
+  OPT_fwpa = 949,                            /* -fwpa */
+  OPT_fwrapv = 950,                          /* -fwrapv */
+  /* OPT_fxref = 951, */                     /* -fxref */
+  OPT_fzee = 952,                            /* -fzee */
+  OPT_fzero_initialized_in_bss = 953,        /* -fzero-initialized-in-bss */
+  OPT_fzero_link = 954,                      /* -fzero-link */
+  OPT_g = 955,                               /* -g */
+  OPT_gant = 956,                            /* -gant */
+  OPT_gcoff = 957,                           /* -gcoff */
+  OPT_gdwarf_ = 958,                         /* -gdwarf- */
+  OPT_gen_decls = 959,                       /* -gen-decls */
+  OPT_ggdb = 960,                            /* -ggdb */
+  OPT_gmlt = 961,                            /* -gmlt */
+  OPT_gnat = 962,                            /* -gnat */
+  OPT_gnatO = 963,                           /* -gnatO */
+  OPT_gno_strict_dwarf = 964,                /* -gno-strict-dwarf */
+  OPT_gstabs = 965,                          /* -gstabs */
+  OPT_gstabs_ = 966,                         /* -gstabs+ */
+  OPT_gstrict_dwarf = 967,                   /* -gstrict-dwarf */
+  OPT_gtoggle = 968,                         /* -gtoggle */
+  OPT_gvms = 969,                            /* -gvms */
+  OPT_gxcoff = 970,                          /* -gxcoff */
+  OPT_gxcoff_ = 971,                         /* -gxcoff+ */
+  OPT_h = 972,                               /* -h */
+  OPT_idirafter = 973,                       /* -idirafter */
+  OPT_imacros = 974,                         /* -imacros */
+  OPT_imultilib = 975,                       /* -imultilib */
+  OPT_include = 976,                         /* -include */
+  OPT_iplugindir_ = 977,                     /* -iplugindir= */
+  OPT_iprefix = 978,                         /* -iprefix */
+  OPT_iquote = 979,                          /* -iquote */
+  OPT_isysroot = 980,                        /* -isysroot */
+  OPT_isystem = 981,                         /* -isystem */
+  OPT_iwithprefix = 982,                     /* -iwithprefix */
+  OPT_iwithprefixbefore = 983,               /* -iwithprefixbefore */
+  OPT_k8 = 984,                              /* -k8 */
+  OPT_l = 985,                               /* -l */
+  OPT_lang_asm = 986,                        /* -lang-asm */
+  OPT_mabi_ = 987,                           /* -mabi= */
+  OPT_mabort_on_noreturn = 988,              /* -mabort-on-noreturn */
+  OPT_mandroid = 989,                        /* -mandroid */
+  OPT_mapcs = 990,                           /* -mapcs */
+  OPT_mapcs_float = 991,                     /* -mapcs-float */
+  OPT_mapcs_frame = 992,                     /* -mapcs-frame */
+  OPT_mapcs_reentrant = 993,                 /* -mapcs-reentrant */
+  OPT_mapcs_stack_check = 994,               /* -mapcs-stack-check */
+  OPT_march_ = 995,                          /* -march= */
+  OPT_marm = 996,                            /* -marm */
+  OPT_mbig_endian = 997,                     /* -mbig-endian */
+  OPT_mbionic = 998,                         /* -mbionic */
+  OPT_mcallee_super_interworking = 999,      /* -mcallee-super-interworking */
+  OPT_mcaller_super_interworking = 1000,     /* -mcaller-super-interworking */
+  OPT_mcirrus_fix_invalid_insns = 1001,      /* -mcirrus-fix-invalid-insns */
+  OPT_mcpu_ = 1002,                          /* -mcpu= */
+  OPT_mfix_cortex_m3_ldrd = 1003,            /* -mfix-cortex-m3-ldrd */
+  OPT_mfloat_abi_ = 1004,                    /* -mfloat-abi= */
+  OPT_mfp16_format_ = 1005,                  /* -mfp16-format= */
+  OPT_mfp_ = 1006,                           /* -mfp= */
+  OPT_mfpe = 1007,                           /* -mfpe */
+  OPT_mfpe_ = 1008,                          /* -mfpe= */
+  OPT_mfpu_ = 1009,                          /* -mfpu= */
+  OPT_mglibc = 1010,                         /* -mglibc */
+  OPT_mhard_float = 1011,                    /* -mhard-float */
+  OPT_mlittle_endian = 1012,                 /* -mlittle-endian */
+  OPT_mlong_calls = 1013,                    /* -mlong-calls */
+  OPT_mpic_register_ = 1014,                 /* -mpic-register= */
+  OPT_mpoke_function_name = 1015,            /* -mpoke-function-name */
+  OPT_msched_prolog = 1016,                  /* -msched-prolog */
+  OPT_msingle_pic_base = 1017,               /* -msingle-pic-base */
+  OPT_msoft_float = 1018,                    /* -msoft-float */
+  OPT_mstructure_size_boundary_ = 1019,      /* -mstructure-size-boundary= */
+  OPT_mthumb = 1020,                         /* -mthumb */
+  OPT_mthumb_interwork = 1021,               /* -mthumb-interwork */
+  OPT_mtp_ = 1022,                           /* -mtp= */
+  OPT_mtpcs_frame = 1023,                    /* -mtpcs-frame */
+  OPT_mtpcs_leaf_frame = 1024,               /* -mtpcs-leaf-frame */
+  OPT_mtune_ = 1025,                         /* -mtune= */
+  OPT_muclibc = 1026,                        /* -muclibc */
+  OPT_mvectorize_with_neon_quad = 1027,      /* -mvectorize-with-neon-quad */
+  OPT_mword_relocations = 1028,              /* -mword-relocations */
+  OPT_mwords_little_endian = 1029,           /* -mwords-little-endian */
+  OPT_n = 1030,                              /* -n */
+  OPT_no_canonical_prefixes = 1031,          /* -no-canonical-prefixes */
+  OPT_no_integrated_cpp = 1032,              /* -no-integrated-cpp */
+  OPT_nocpp = 1033,                          /* -nocpp */
+  OPT_nodefaultlibs = 1034,                  /* -nodefaultlibs */
+  OPT_nostartfiles = 1035,                   /* -nostartfiles */
+  OPT_nostdinc = 1036,                       /* -nostdinc */
+  OPT_nostdinc__ = 1037,                     /* -nostdinc++ */
+  OPT_nostdlib = 1038,                       /* -nostdlib */
+  OPT_o = 1039,                              /* -o */
+  OPT_p = 1040,                              /* -p */
+  OPT_pass_exit_codes = 1041,                /* -pass-exit-codes */
+  OPT_pedantic = 1042,                       /* -pedantic */
+  OPT_pedantic_errors = 1043,                /* -pedantic-errors */
+  OPT_pg = 1044,                             /* -pg */
+  OPT_pie = 1045,                            /* -pie */
+  OPT_pipe = 1046,                           /* -pipe */
+  OPT_posix = 1047,                          /* -posix */
+  OPT_print_file_name_ = 1048,               /* -print-file-name= */
+  OPT_print_libgcc_file_name = 1049,         /* -print-libgcc-file-name */
+  OPT_print_multi_directory = 1050,          /* -print-multi-directory */
+  OPT_print_multi_lib = 1051,                /* -print-multi-lib */
+  OPT_print_multi_os_directory = 1052,       /* -print-multi-os-directory */
+  OPT_print_objc_runtime_info = 1053,        /* -print-objc-runtime-info */
+  OPT_print_prog_name_ = 1054,               /* -print-prog-name= */
+  OPT_print_search_dirs = 1055,              /* -print-search-dirs */
+  OPT_print_sysroot = 1056,                  /* -print-sysroot */
+  OPT_print_sysroot_headers_suffix = 1057,   /* -print-sysroot-headers-suffix */
+  OPT_profile = 1058,                        /* -profile */
+  OPT_pthread = 1059,                        /* -pthread */
+  OPT_quiet = 1060,                          /* -quiet */
+  OPT_r = 1061,                              /* -r */
+  OPT_rdynamic = 1062,                       /* -rdynamic */
+  OPT_remap = 1063,                          /* -remap */
+  OPT_s = 1064,                              /* -s */
+  OPT_s_bc_abi = 1065,                       /* -s-bc-abi */
+  OPT_save_temps = 1066,                     /* -save-temps */
+  OPT_save_temps_ = 1067,                    /* -save-temps= */
+  OPT_shared = 1068,                         /* -shared */
+  OPT_shared_libgcc = 1069,                  /* -shared-libgcc */
+  /* OPT_specs = 1070, */                    /* -specs */
+  OPT_specs_ = 1071,                         /* -specs= */
+  OPT_static = 1072,                         /* -static */
+  OPT_static_libgcc = 1073,                  /* -static-libgcc */
+  OPT_static_libgcj = 1074,                  /* -static-libgcj */
+  OPT_static_libgfortran = 1075,             /* -static-libgfortran */
+  OPT_static_libgo = 1076,                   /* -static-libgo */
+  OPT_static_libstdc__ = 1077,               /* -static-libstdc++ */
+  /* OPT_std_c__03 = 1078, */                /* -std=c++03 */
+  /* OPT_std_c__0x = 1079, */                /* -std=c++0x */
+  OPT_std_c__11 = 1080,                      /* -std=c++11 */
+  OPT_std_c__98 = 1081,                      /* -std=c++98 */
+  OPT_std_c1x = 1082,                        /* -std=c1x */
+  /* OPT_std_c89 = 1083, */                  /* -std=c89 */
+  OPT_std_c90 = 1084,                        /* -std=c90 */
+  OPT_std_c99 = 1085,                        /* -std=c99 */
+  /* OPT_std_c9x = 1086, */                  /* -std=c9x */
+  OPT_std_f2003 = 1087,                      /* -std=f2003 */
+  OPT_std_f2008 = 1088,                      /* -std=f2008 */
+  OPT_std_f95 = 1089,                        /* -std=f95 */
+  OPT_std_gnu = 1090,                        /* -std=gnu */
+  /* OPT_std_gnu__03 = 1091, */              /* -std=gnu++03 */
+  /* OPT_std_gnu__0x = 1092, */              /* -std=gnu++0x */
+  OPT_std_gnu__11 = 1093,                    /* -std=gnu++11 */
+  OPT_std_gnu__98 = 1094,                    /* -std=gnu++98 */
+  OPT_std_gnu1x = 1095,                      /* -std=gnu1x */
+  /* OPT_std_gnu89 = 1096, */                /* -std=gnu89 */
+  OPT_std_gnu90 = 1097,                      /* -std=gnu90 */
+  OPT_std_gnu99 = 1098,                      /* -std=gnu99 */
+  /* OPT_std_gnu9x = 1099, */                /* -std=gnu9x */
+  /* OPT_std_iso9899_1990 = 1100, */         /* -std=iso9899:1990 */
+  OPT_std_iso9899_199409 = 1101,             /* -std=iso9899:199409 */
+  /* OPT_std_iso9899_1999 = 1102, */         /* -std=iso9899:1999 */
+  /* OPT_std_iso9899_199x = 1103, */         /* -std=iso9899:199x */
+  OPT_std_legacy = 1104,                     /* -std=legacy */
+  OPT_symbolic = 1105,                       /* -symbolic */
+  OPT_t = 1106,                              /* -t */
+  OPT_time = 1107,                           /* -time */
+  OPT_time_ = 1108,                          /* -time= */
+  OPT_tno_android_cc = 1109,                 /* -tno-android-cc */
+  OPT_tno_android_ld = 1110,                 /* -tno-android-ld */
+  OPT_traditional = 1111,                    /* -traditional */
+  OPT_traditional_cpp = 1112,                /* -traditional-cpp */
+  OPT_trigraphs = 1113,                      /* -trigraphs */
+  OPT_u = 1114,                              /* -u */
+  OPT_undef = 1115,                          /* -undef */
+  OPT_v = 1116,                              /* -v */
+  OPT_version = 1117,                        /* -version */
+  OPT_w = 1118,                              /* -w */
+  OPT_wrapper = 1119,                        /* -wrapper */
+  OPT_x = 1120,                              /* -x */
+  OPT_z = 1121,                              /* -z */
   N_OPTS,
   OPT_SPECIAL_unknown,
   OPT_SPECIAL_ignore,
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/opts.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/opts.h
index 58624aa..379ae2d 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/opts.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/opts.h
@@ -381,4 +381,5 @@
 extern void set_struct_debug_option (struct gcc_options *opts,
 				     location_t loc,
 				     const char *value);
+extern void write_opts_to_asm (void);
 #endif
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/output.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/output.h
index c668d35..7031b08 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/output.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/output.h
@@ -443,6 +443,7 @@
 #define SECTION_COMMON   0x800000	/* contains common data */
 #define SECTION_RELRO	 0x1000000	/* data is readonly after relocation processing */
 #define SECTION_MACH_DEP 0x2000000	/* subsequent bits reserved for target */
+#define SECTION_EXCLUDE  0x4000000      /* discarded by the linker */
 
 /* This SECTION_STYLE is used for unnamed sections that we can switch
    to using a special assembler directive.  */
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/params.def b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/params.def
index 0c6a2e2..168fb5f 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/params.def
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/params.def
@@ -340,6 +340,21 @@
 	 "max-completely-peel-loop-nest-depth",
 	 "The maximum depth of a loop nest we completely peel",
 	 8, 0, 0)
+/* The minimum profile count of basic blocks to look at when estimating
+ * the code size footprint of the call graph in a dynamic IPA compile. */
+DEFPARAM(PARAM_CODESIZE_HOTNESS_THRESHOLD,
+	"codesize-hotness-threshold",
+	"Minimum profile count of basic blocks counted towards dynamic IPA "
+	"code size footprint estimate",
+	10000, 0, 0)
+/* The maximum code size estimate under which loop unrolling and peeling
+ * is allowed in a dynamic IPA compile. This currently applies to loops with
+ * non-constant iteration counts and no floating point computations. */
+DEFPARAM(PARAM_UNROLLPEEL_CODESIZE_THRESHOLD,
+	"unrollpeel-codesize-threshold",
+	"Maximum dynamic IPA code size footprint estimate for loop unrolling "
+	"and peeling",
+	10000, 0, 0)
 
 /* The maximum number of insns of an unswitched loop.  */
 DEFPARAM(PARAM_MAX_UNSWITCH_INSNS,
@@ -382,7 +397,7 @@
 DEFPARAM(HOT_BB_COUNT_FRACTION,
 	 "hot-bb-count-fraction",
 	 "Select fraction of the maximal count of repetitions of basic block in program given basic block needs to have to be considered hot",
-	 10000, 0, 0)
+	 40000, 0, 0)
 DEFPARAM(HOT_BB_FREQUENCY_FRACTION,
 	 "hot-bb-frequency-fraction",
 	 "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot",
@@ -1009,12 +1024,12 @@
           "while doing multiversioning",
 	  2, 0, 5)
 
-/* Only output those call graph edges in .note.callgraph.text sections
+/* Only output those call graph edges in .gnu.callgraph.text sections
    whose count is greater than this value. */
 DEFPARAM (PARAM_NOTE_CGRAPH_SECTION_EDGE_THRESHOLD,
 	  "note-cgraph-section-edge-threshold",
 	  "minimum call graph edge count for inclusion in "
-          ".note.callgraph.text section",
+          ".gnu.callgraph.text section",
 	  0, 0, 0)
 
 DEFPARAM (PARAM_PMU_PROFILE_N_ADDRESS,
@@ -1022,6 +1037,11 @@
 	  "While doing PMU profiling symbolize this many top addresses.",
 	  50, 1, 10000)
 
+DEFPARAM (PARAM_MAX_FUNCTION_SIZE_FOR_AUTO_CLONING,
+	  "autoclone-function-size-limit",
+	  "Do not auto clone functions beyond this size.",
+	  450, 0, 100000)
+
 /*
 Local variables:
 mode:c
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/plugin-api.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/plugin-api.h
index 956df00..df00393 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/plugin-api.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/plugin-api.h
@@ -93,6 +93,14 @@
   int resolution;
 };
 
+/* An object's section.  */
+
+struct ld_plugin_section
+{
+  const void* handle;
+  unsigned int shndx;
+};
+
 /* Whether the symbol is a definition, reference, or common, weak or not.  */
 
 enum ld_plugin_symbol_kind
@@ -203,6 +211,10 @@
 (*ld_plugin_get_input_file) (const void *handle,
                              struct ld_plugin_input_file *file);
 
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_view) (const void *handle, const void **viewp);
+
 /* The linker's interface for releasing the input file.  */
 
 typedef
@@ -240,6 +252,65 @@
 enum ld_plugin_status
 (*ld_plugin_message) (int level, const char *format, ...);
 
+/* The linker's interface for retrieving the number of sections in an object.
+   The handle is obtained in the claim_file handler.  This interface should
+   only be invoked in the claim_file handler.   This function sets *COUNT to
+   the number of sections in the object.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_section_count) (const void* handle, unsigned int *count);
+
+/* The linker's interface for retrieving the section type of a specific
+   section in an object.  This interface should only be invoked in the
+   claim_file handler.  This function sets *TYPE to an ELF SHT_xxx value.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_section_type) (const struct ld_plugin_section section,
+                                     unsigned int *type);
+
+/* The linker's interface for retrieving the name of a specific section in
+   an object. This interface should only be invoked in the claim_file handler.
+   This function sets *SECTION_NAME_PTR to a null-terminated buffer allocated
+   by malloc.  The plugin must free *SECTION_NAME_PTR.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_section_name) (const struct ld_plugin_section section,
+                                     char **section_name_ptr);
+
+/* The linker's interface for retrieving the contents of a specific section
+   in an object.  This interface should only be invoked in the claim_file
+   handler.  This function sets *SECTION_CONTENTS to point to a buffer that is
+   valid until clam_file handler returns.  It sets *LEN to the size of the
+   buffer.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_section_contents) (const struct ld_plugin_section section,
+                                         const unsigned char **section_contents,
+                                         size_t* len);
+
+/* The linker's interface for specifying the desired order of sections.
+   The sections should be specifed using the array SECTION_LIST in the
+   order in which they should appear in the final layout.  NUM_SECTIONS
+   specifies the number of entries in each array.  This should be invoked
+   in the all_symbols_read handler.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_update_section_order) (const struct ld_plugin_section *section_list,
+				   unsigned int num_sections);
+
+/* The linker's interface for specifying that reordering of sections is
+   desired so that the linker can prepare for it.  This should be invoked
+   before update_section_order, preferably in the claim_file handler.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_allow_section_ordering) (void);
+
 enum ld_plugin_level
 {
   LDPL_INFO,
@@ -269,7 +340,14 @@
   LDPT_ADD_INPUT_LIBRARY,
   LDPT_OUTPUT_NAME,
   LDPT_SET_EXTRA_LIBRARY_PATH,
-  LDPT_GNU_LD_VERSION
+  LDPT_GNU_LD_VERSION,
+  LDPT_GET_VIEW,
+  LDPT_GET_INPUT_SECTION_COUNT,
+  LDPT_GET_INPUT_SECTION_TYPE,
+  LDPT_GET_INPUT_SECTION_NAME,
+  LDPT_GET_INPUT_SECTION_CONTENTS,
+  LDPT_UPDATE_SECTION_ORDER,
+  LDPT_ALLOW_SECTION_ORDERING
 };
 
 /* The plugin transfer vector.  */
@@ -289,9 +367,16 @@
     ld_plugin_add_input_file tv_add_input_file;
     ld_plugin_message tv_message;
     ld_plugin_get_input_file tv_get_input_file;
+    ld_plugin_get_view tv_get_view;
     ld_plugin_release_input_file tv_release_input_file;
     ld_plugin_add_input_library tv_add_input_library;
     ld_plugin_set_extra_library_path tv_set_extra_library_path;
+    ld_plugin_get_input_section_count tv_get_input_section_count;
+    ld_plugin_get_input_section_type tv_get_input_section_type;
+    ld_plugin_get_input_section_name tv_get_input_section_name;
+    ld_plugin_get_input_section_contents tv_get_input_section_contents;
+    ld_plugin_update_section_order tv_update_section_order;
+    ld_plugin_allow_section_ordering tv_allow_section_ordering;
   } tv_u;
 };
 
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/plugin-version.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/plugin-version.h
index c2a1b07..b52b195 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/plugin-version.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/plugin-version.h
@@ -1,7 +1,7 @@
 #include "configargs.h"
 
 static char basever[] = "4.6.x-google";
-static char datestamp[] = "20110718";
+static char datestamp[] = "20120106";
 static char devphase[] = "prerelease";
 static char revision[] = "";
 
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/predict.def b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/predict.def
index 4b3e87a..89d0787 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/predict.def
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/predict.def
@@ -116,3 +116,7 @@
 
 /* Branches to a mudflap bounds check are extremely unlikely.  */
 DEF_PREDICTOR (PRED_MUDFLAP, "mudflap check", PROB_VERY_LIKELY, 0)
+
+/* Branches to compare induction variable to a loop bound is
+   extremely likely.  */
+DEF_PREDICTOR (PRED_LOOP_IV_COMPARE, "loop iv compare", PROB_VERY_LIKELY, 0)
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/target.def b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/target.def
index 7cc5b00..756caf3 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/target.def
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/target.def
@@ -1271,6 +1271,18 @@
  tree, (tree fndecl, int n_args, tree *argp, bool ignore),
  hook_tree_tree_int_treep_bool_null)
 
+/* Returns true if unaligned vector loads/stores are slow.  */
+DEFHOOK
+(slow_unaligned_vector_memop,
+ "",
+ bool, (void), NULL)
+
+/* Target hook to check if this function should be versioned.  */
+DEFHOOK
+(mversion_function,
+ "",
+ int, (tree fndecl, tree *optimization_node_chain, tree *cond_func_decl), NULL)
+
 /* Returns a code for a target-specific builtin that implements
    reciprocal of the function, or NULL_TREE if not available.  */
 DEFHOOK
@@ -2783,7 +2795,7 @@
  "True if the @code{.debug_pubtypes} and @code{.debug_pubnames} sections\
  should be emitted.  These sections are not used on most platforms, and\
  in particular GDB does not use them.",
- bool, false)
+ bool, true)
 
 DEFHOOKPOD
 (delay_sched2, "True if sched2 is not to be run at its normal place.  \
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/tm-preds.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/tm-preds.h
index c3a9152..203cb8a 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/tm-preds.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/tm-preds.h
@@ -1,5 +1,5 @@
 /* Generated automatically by the program 'build/genpreds'
-   from the machine description file '/usr/local/google/home/android/v15release/./src/build/../gcc/gcc-4.6/gcc/config/arm/arm.md'.  */
+   from the machine description file '/tmp/android-17841/src/build/../gcc/gcc-4.6/gcc/config/arm/arm.md'.  */
 
 #ifndef GCC_TM_PREDS_H
 #define GCC_TM_PREDS_H
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/tree-pass.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/tree-pass.h
index b5e987e..08ef8f7 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/tree-pass.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/tree-pass.h
@@ -449,6 +449,7 @@
 extern struct gimple_opt_pass pass_feedback_split_functions;
 extern struct gimple_opt_pass pass_threadsafe_analyze;
 extern struct gimple_opt_pass pass_tree_convert_builtin_dispatch;
+extern struct gimple_opt_pass pass_auto_clone;
 
 /* IPA Passes */
 extern struct simple_ipa_opt_pass pass_ipa_lower_emutls;
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/tree.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/tree.h
index e4469be..1ec0c06 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/tree.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/tree.h
@@ -5155,6 +5155,7 @@
 
 
 /* In builtins.c */
+extern bool avoid_folding_inline_builtin (tree);
 extern tree fold_call_expr (location_t, tree, bool);
 extern tree fold_builtin_fputs (location_t, tree, tree, bool, bool, tree);
 extern tree fold_builtin_strcpy (location_t, tree, tree, tree, tree);
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/libgcc/config/arm/bpabi-lib.h b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/libgcc/config/arm/bpabi-lib.h
index 49a28c3..fc0e595 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/libgcc/config/arm/bpabi-lib.h
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/libgcc/config/arm/bpabi-lib.h
@@ -20,17 +20,10 @@
    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
-#if defined (__thumb__)
-#define RENAME_LIBRARY_SET ".thumb_set"
-#else
-#define RENAME_LIBRARY_SET ".set"
-#endif
-
 /* Make __aeabi_AEABI_NAME an alias for __GCC_NAME.  */
 #define RENAME_LIBRARY(GCC_NAME, AEABI_NAME)		\
-  __asm__ (".globl\t__aeabi_" #AEABI_NAME "\n"		\
-	   RENAME_LIBRARY_SET "\t__aeabi_" #AEABI_NAME 	\
-	     ", __" #GCC_NAME "\n");
+  typeof (__##GCC_NAME) __aeabi_##AEABI_NAME \
+    __attribute__((alias ("__" #GCC_NAME)));
 
 /* Give some libgcc functions an additional __aeabi name.  */
 #ifdef L_muldi3
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtbegin.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtbegin.o
index d6781f2..208478f 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtbegin.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtbegin.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtbeginS.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtbeginS.o
index b025065..45767da 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtbeginS.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtbeginT.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtbeginT.o
index d6781f2..208478f 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtbeginT.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtend.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtend.o
index 21321f9..0b08c4e 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtend.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtend.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtendS.o b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtendS.o
index 21321f9..0b08c4e 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtendS.o
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/crtendS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/libgcc.a b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/libgcc.a
index 670b17a..c0b8180 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/libgcc.a
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/libgcc.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/libgcov.a b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/libgcov.a
index 5a9a362..791f79a 100644
--- a/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/libgcov.a
+++ b/lib/gcc/arm-linux-androideabi/4.6.x-google/thumb/libgcov.a
Binary files differ
diff --git a/lib/libarm-elf-linux-sim.a b/lib/libarm-elf-linux-sim.a
index f06a9b9..e19fd3f 100644
--- a/lib/libarm-elf-linux-sim.a
+++ b/lib/libarm-elf-linux-sim.a
Binary files differ
diff --git a/lib/libbfd.a b/lib/libbfd.a
index 240a1cf..6723925 100644
--- a/lib/libbfd.a
+++ b/lib/libbfd.a
Binary files differ
diff --git a/lib/libiberty.a b/lib/libiberty.a
index 012bac0..f9f1220 100644
--- a/lib/libiberty.a
+++ b/lib/libiberty.a
Binary files differ
diff --git a/lib/libintl.a b/lib/libintl.a
index c25d0a5..50ad277 100644
--- a/lib/libintl.a
+++ b/lib/libintl.a
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.6.x-google/cc1 b/libexec/gcc/arm-linux-androideabi/4.6.x-google/cc1
index c132750..2fb7328 100755
--- a/libexec/gcc/arm-linux-androideabi/4.6.x-google/cc1
+++ b/libexec/gcc/arm-linux-androideabi/4.6.x-google/cc1
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.6.x-google/cc1plus b/libexec/gcc/arm-linux-androideabi/4.6.x-google/cc1plus
index a1ac4c1..53a30de 100755
--- a/libexec/gcc/arm-linux-androideabi/4.6.x-google/cc1plus
+++ b/libexec/gcc/arm-linux-androideabi/4.6.x-google/cc1plus
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.6.x-google/collect2 b/libexec/gcc/arm-linux-androideabi/4.6.x-google/collect2
index c418686..c9ef3ae 100755
--- a/libexec/gcc/arm-linux-androideabi/4.6.x-google/collect2
+++ b/libexec/gcc/arm-linux-androideabi/4.6.x-google/collect2
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.6.x-google/install-tools/fixincl b/libexec/gcc/arm-linux-androideabi/4.6.x-google/install-tools/fixincl
index a62b962..46086f2 100755
--- a/libexec/gcc/arm-linux-androideabi/4.6.x-google/install-tools/fixincl
+++ b/libexec/gcc/arm-linux-androideabi/4.6.x-google/install-tools/fixincl
Binary files differ
diff --git a/arm-linux-androideabi/lib/armv7-a/libsupc++.la b/libexec/gcc/arm-linux-androideabi/4.6.x-google/libfunction_reordering_plugin.la
similarity index 64%
rename from arm-linux-androideabi/lib/armv7-a/libsupc++.la
rename to libexec/gcc/arm-linux-androideabi/4.6.x-google/libfunction_reordering_plugin.la
index 456167a..d5ccd57 100755
--- a/arm-linux-androideabi/lib/armv7-a/libsupc++.la
+++ b/libexec/gcc/arm-linux-androideabi/4.6.x-google/libfunction_reordering_plugin.la
@@ -1,17 +1,17 @@
-# libsupc++.la - a libtool library file
+# libfunction_reordering_plugin.la - a libtool library file
 # Generated by libtool (GNU libtool 1.3134 2009-11-29) 2.2.7a
 #
 # Please DO NOT delete this file!
 # It is necessary for linking the library.
 
 # The name that we can dlopen(3).
-dlname=''
+dlname='libfunction_reordering_plugin.so.0'
 
 # Names of this library.
-library_names=''
+library_names='libfunction_reordering_plugin.so.0.0.0 libfunction_reordering_plugin.so.0 libfunction_reordering_plugin.so'
 
 # The name of the static archive.
-old_library='libsupc++.a'
+old_library=''
 
 # Linker flags that can not go in dependency_libs.
 inherited_linker_flags=''
@@ -22,7 +22,7 @@
 # Names of additional weak libraries provided by this library
 weak_library_names=''
 
-# Version information for libsupc++.
+# Version information for libfunction_reordering_plugin.
 current=0
 age=0
 revision=0
@@ -31,11 +31,11 @@
 installed=yes
 
 # Should we warn about portability when linking against -modules?
-shouldnotlink=no
+shouldnotlink=yes
 
 # Files to dlopen/dlpreopen
 dlopen=''
 dlpreopen=''
 
 # Directory that this library needs to be installed in:
-libdir='/usr/local/arm-linux-androideabi/lib/armv7-a'
+libdir='/usr/local/libexec/gcc/arm-linux-androideabi/4.6.x-google'
diff --git a/libexec/gcc/arm-linux-androideabi/4.6.x-google/libfunction_reordering_plugin.so b/libexec/gcc/arm-linux-androideabi/4.6.x-google/libfunction_reordering_plugin.so
new file mode 120000
index 0000000..6818e7a
--- /dev/null
+++ b/libexec/gcc/arm-linux-androideabi/4.6.x-google/libfunction_reordering_plugin.so
@@ -0,0 +1 @@
+libfunction_reordering_plugin.so.0.0.0
\ No newline at end of file
diff --git a/libexec/gcc/arm-linux-androideabi/4.6.x-google/libfunction_reordering_plugin.so.0 b/libexec/gcc/arm-linux-androideabi/4.6.x-google/libfunction_reordering_plugin.so.0
new file mode 120000
index 0000000..6818e7a
--- /dev/null
+++ b/libexec/gcc/arm-linux-androideabi/4.6.x-google/libfunction_reordering_plugin.so.0
@@ -0,0 +1 @@
+libfunction_reordering_plugin.so.0.0.0
\ No newline at end of file
diff --git a/libexec/gcc/arm-linux-androideabi/4.6.x-google/libfunction_reordering_plugin.so.0.0.0 b/libexec/gcc/arm-linux-androideabi/4.6.x-google/libfunction_reordering_plugin.so.0.0.0
new file mode 100755
index 0000000..1266c7b
--- /dev/null
+++ b/libexec/gcc/arm-linux-androideabi/4.6.x-google/libfunction_reordering_plugin.so.0.0.0
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.6.x-google/liblto_plugin.so.0.0.0 b/libexec/gcc/arm-linux-androideabi/4.6.x-google/liblto_plugin.so.0.0.0
index 9f74212..e0d1d20 100755
--- a/libexec/gcc/arm-linux-androideabi/4.6.x-google/liblto_plugin.so.0.0.0
+++ b/libexec/gcc/arm-linux-androideabi/4.6.x-google/liblto_plugin.so.0.0.0
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.6.x-google/lto-wrapper b/libexec/gcc/arm-linux-androideabi/4.6.x-google/lto-wrapper
index 905ba29..26c2be0 100755
--- a/libexec/gcc/arm-linux-androideabi/4.6.x-google/lto-wrapper
+++ b/libexec/gcc/arm-linux-androideabi/4.6.x-google/lto-wrapper
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.6.x-google/lto1 b/libexec/gcc/arm-linux-androideabi/4.6.x-google/lto1
index 1bcd997..fbf0696 100755
--- a/libexec/gcc/arm-linux-androideabi/4.6.x-google/lto1
+++ b/libexec/gcc/arm-linux-androideabi/4.6.x-google/lto1
Binary files differ
diff --git a/share/gcc-4.6.x-google/python/libstdcxx/__init__.py b/share/gcc-4.6.x-google/python/libstdcxx/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/share/gcc-4.6.x-google/python/libstdcxx/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/share/gcc-4.6.x-google/python/libstdcxx/v6/__init__.py b/share/gcc-4.6.x-google/python/libstdcxx/v6/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/share/gcc-4.6.x-google/python/libstdcxx/v6/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/share/gcc-4.6.x-google/python/libstdcxx/v6/printers.py b/share/gcc-4.6.x-google/python/libstdcxx/v6/printers.py
deleted file mode 100644
index fb999bf..0000000
--- a/share/gcc-4.6.x-google/python/libstdcxx/v6/printers.py
+++ /dev/null
@@ -1,802 +0,0 @@
-# Pretty-printers for libstc++.
-
-# Copyright (C) 2008, 2009, 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 program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-import gdb
-import itertools
-import re
-
-class StdPointerPrinter:
-    "Print a smart pointer of some kind"
-
-    def __init__ (self, typename, val):
-        self.typename = typename
-        self.val = val
-
-    def to_string (self):
-        if self.val['_M_refcount']['_M_pi'] == 0:
-            return '%s (empty) %s' % (self.typename, self.val['_M_ptr'])
-        return '%s (count %d) %s' % (self.typename,
-                                     self.val['_M_refcount']['_M_pi']['_M_use_count'],
-                                     self.val['_M_ptr'])
-
-class UniquePointerPrinter:
-    "Print a unique_ptr"
-
-    def __init__ (self, val):
-        self.val = val
-
-    def to_string (self):
-        return self.val['_M_t']
-
-class StdListPrinter:
-    "Print a std::list"
-
-    class _iterator:
-        def __init__(self, nodetype, head):
-            self.nodetype = nodetype
-            self.base = head['_M_next']
-            self.head = head.address
-            self.count = 0
-
-        def __iter__(self):
-            return self
-
-        def next(self):
-            if self.base == self.head:
-                raise StopIteration
-            elt = self.base.cast(self.nodetype).dereference()
-            self.base = elt['_M_next']
-            count = self.count
-            self.count = self.count + 1
-            return ('[%d]' % count, elt['_M_data'])
-
-    def __init__(self, typename, val):
-        self.typename = typename
-        self.val = val
-
-    def children(self):
-        itype = self.val.type.template_argument(0)
-        # If the inferior program is compiled with -D_GLIBCXX_DEBUG
-        # some of the internal implementation details change.
-        if self.typename == "std::list":
-            nodetype = gdb.lookup_type('std::_List_node<%s>' % itype).pointer()
-        elif self.typename == "std::__debug::list":
-            nodetype = gdb.lookup_type('std::__norm::_List_node<%s>' % itype).pointer()
-        else:
-            raise ValueError, "Cannot cast list node for list printer."
-        return self._iterator(nodetype, self.val['_M_impl']['_M_node'])
-
-    def to_string(self):
-        if self.val['_M_impl']['_M_node'].address == self.val['_M_impl']['_M_node']['_M_next']:
-            return 'empty %s' % (self.typename)
-        return '%s' % (self.typename)
-
-class StdListIteratorPrinter:
-    "Print std::list::iterator"
-
-    def __init__(self, typename, val):
-        self.val = val
-        self.typename = typename
-
-    def to_string(self):
-        itype = self.val.type.template_argument(0)
-        # If the inferior program is compiled with -D_GLIBCXX_DEBUG
-        # some of the internal implementation details change.
-        if self.typename == "std::_List_iterator" or self.typename == "std::_List_const_iterator":
-            nodetype = gdb.lookup_type('std::_List_node<%s>' % itype).pointer()
-        elif self.typename == "std::__norm::_List_iterator" or self.typename == "std::__norm::_List_const_iterator":
-            nodetype = gdb.lookup_type('std::__norm::_List_node<%s>' % itype).pointer()
-        else:
-            raise ValueError, "Cannot cast list node for list iterator printer."
-        return self.val['_M_node'].cast(nodetype).dereference()['_M_data']
-
-class StdSlistPrinter:
-    "Print a __gnu_cxx::slist"
-
-    class _iterator:
-        def __init__(self, nodetype, head):
-            self.nodetype = nodetype
-            self.base = head['_M_head']['_M_next']
-            self.count = 0
-
-        def __iter__(self):
-            return self
-
-        def next(self):
-            if self.base == 0:
-                raise StopIteration
-            elt = self.base.cast(self.nodetype).dereference()
-            self.base = elt['_M_next']
-            count = self.count
-            self.count = self.count + 1
-            return ('[%d]' % count, elt['_M_data'])
-
-    def __init__(self, val):
-        self.val = val
-
-    def children(self):
-        itype = self.val.type.template_argument(0)
-        nodetype = gdb.lookup_type('__gnu_cxx::_Slist_node<%s>' % itype).pointer()
-        return self._iterator(nodetype, self.val)
-
-    def to_string(self):
-        if self.val['_M_head']['_M_next'] == 0:
-            return 'empty __gnu_cxx::slist'
-        return '__gnu_cxx::slist'
-
-class StdSlistIteratorPrinter:
-    "Print __gnu_cxx::slist::iterator"
-
-    def __init__(self, val):
-        self.val = val
-
-    def to_string(self):
-        itype = self.val.type.template_argument(0)
-        nodetype = gdb.lookup_type('__gnu_cxx::_Slist_node<%s>' % itype).pointer()
-        return self.val['_M_node'].cast(nodetype).dereference()['_M_data']
-
-class StdVectorPrinter:
-    "Print a std::vector"
-
-    class _iterator:
-        def __init__ (self, start, finish, bitvec):
-            self.bitvec = bitvec
-            if bitvec:
-                self.item   = start['_M_p']
-                self.so     = start['_M_offset']
-                self.finish = finish['_M_p']
-                self.fo     = finish['_M_offset']
-                itype = self.item.dereference().type
-                self.isize = 8 * itype.sizeof
-            else:
-                self.item = start
-                self.finish = finish
-            self.count = 0
-
-        def __iter__(self):
-            return self
-
-        def next(self):
-            count = self.count
-            self.count = self.count + 1
-            if self.bitvec:
-                if self.item == self.finish and self.so >= self.fo:
-                    raise StopIteration
-                elt = self.item.dereference()
-                if elt & (1 << self.so):
-                    obit = 1
-                else:
-                    obit = 0
-                self.so = self.so + 1
-                if self.so >= self.isize:
-                    self.item = self.item + 1
-                    self.so = 0
-                return ('[%d]' % count, obit)
-            else:
-                if self.item == self.finish:
-                    raise StopIteration
-                elt = self.item.dereference()
-                self.item = self.item + 1
-                return ('[%d]' % count, elt)
-
-    def __init__(self, typename, val):
-        self.typename = typename
-        self.val = val
-        self.is_bool = val.type.template_argument(0).code  == gdb.TYPE_CODE_BOOL
-
-    def children(self):
-        return self._iterator(self.val['_M_impl']['_M_start'],
-                              self.val['_M_impl']['_M_finish'],
-                              self.is_bool)
-
-    def to_string(self):
-        start = self.val['_M_impl']['_M_start']
-        finish = self.val['_M_impl']['_M_finish']
-        end = self.val['_M_impl']['_M_end_of_storage']
-        if self.is_bool:
-            start = self.val['_M_impl']['_M_start']['_M_p']
-            so    = self.val['_M_impl']['_M_start']['_M_offset']
-            finish = self.val['_M_impl']['_M_finish']['_M_p']
-            fo     = self.val['_M_impl']['_M_finish']['_M_offset']
-            itype = start.dereference().type
-            bl = 8 * itype.sizeof
-            length   = (bl - so) + bl * ((finish - start) - 1) + fo
-            capacity = bl * (end - start)
-            return ('%s<bool> of length %d, capacity %d'
-                    % (self.typename, int (length), int (capacity)))
-        else:
-            return ('%s of length %d, capacity %d'
-                    % (self.typename, int (finish - start), int (end - start)))
-
-    def display_hint(self):
-        return 'array'
-
-class StdVectorIteratorPrinter:
-    "Print std::vector::iterator"
-
-    def __init__(self, val):
-        self.val = val
-
-    def to_string(self):
-        return self.val['_M_current'].dereference()
-
-class StdTuplePrinter:
-    "Print a std::tuple"
-
-    class _iterator:
-        def __init__ (self, head):
-            self.head = head
-
-            # Set the base class as the initial head of the
-            # tuple.
-            nodes = self.head.type.fields ()
-            if len (nodes) != 1:
-                raise ValueError, "Top of tuple tree does not consist of a single node."
-
-            # Set the actual head to the first pair.
-            self.head  = self.head.cast (nodes[0].type)
-            self.count = 0
-
-        def __iter__ (self):
-            return self
-
-        def next (self):
-            nodes = self.head.type.fields ()
-            # Check for further recursions in the inheritance tree.
-            if len (nodes) == 0:
-                raise StopIteration
-            # Check that this iteration has an expected structure.
-            if len (nodes) != 2:
-                raise ValueError, "Cannot parse more than 2 nodes in a tuple tree."
-
-            # - Left node is the next recursion parent.
-            # - Right node is the actual class contained in the tuple.
-
-            # Process right node.
-            impl = self.head.cast (nodes[1].type)
-
-            # Process left node and set it as head.
-            self.head  = self.head.cast (nodes[0].type)
-            self.count = self.count + 1
-
-            # Finally, check the implementation.  If it is
-            # wrapped in _M_head_impl return that, otherwise return
-            # the value "as is".
-            fields = impl.type.fields ()
-            if len (fields) < 1 or fields[0].name != "_M_head_impl":
-                return ('[%d]' % self.count, impl)
-            else:
-                return ('[%d]' % self.count, impl['_M_head_impl'])
-
-    def __init__ (self, typename, val):
-        self.typename = typename
-        self.val = val;
-
-    def children (self):
-        return self._iterator (self.val)
-
-    def to_string (self):
-        return '%s containing' % (self.typename)
-
-class StdStackOrQueuePrinter:
-    "Print a std::stack or std::queue"
-
-    def __init__ (self, typename, val):
-        self.typename = typename
-        self.visualizer = gdb.default_visualizer(val['c'])
-
-    def children (self):
-        return self.visualizer.children()
-
-    def to_string (self):
-        return '%s wrapping: %s' % (self.typename,
-                                    self.visualizer.to_string())
-
-    def display_hint (self):
-        if hasattr (self.visualizer, 'display_hint'):
-            return self.visualizer.display_hint ()
-        return None
-
-class RbtreeIterator:
-    def __init__(self, rbtree):
-        self.size = rbtree['_M_t']['_M_impl']['_M_node_count']
-        self.node = rbtree['_M_t']['_M_impl']['_M_header']['_M_left']
-        self.count = 0
-
-    def __iter__(self):
-        return self
-
-    def __len__(self):
-        return int (self.size)
-
-    def next(self):
-        if self.count == self.size:
-            raise StopIteration
-        result = self.node
-        self.count = self.count + 1
-        if self.count < self.size:
-            # Compute the next node.
-            node = self.node
-            if node.dereference()['_M_right']:
-                node = node.dereference()['_M_right']
-                while node.dereference()['_M_left']:
-                    node = node.dereference()['_M_left']
-            else:
-                parent = node.dereference()['_M_parent']
-                while node == parent.dereference()['_M_right']:
-                    node = parent
-                    parent = parent.dereference()['_M_parent']
-                if node.dereference()['_M_right'] != parent:
-                    node = parent
-            self.node = node
-        return result
-
-# This is a pretty printer for std::_Rb_tree_iterator (which is
-# std::map::iterator), and has nothing to do with the RbtreeIterator
-# class above.
-class StdRbtreeIteratorPrinter:
-    "Print std::map::iterator"
-
-    def __init__ (self, val):
-        self.val = val
-
-    def to_string (self):
-        valuetype = self.val.type.template_argument(0)
-        nodetype = gdb.lookup_type('std::_Rb_tree_node < %s >' % valuetype)
-        nodetype = nodetype.pointer()
-        return self.val.cast(nodetype).dereference()['_M_value_field']
-
-class StdDebugIteratorPrinter:
-    "Print a debug enabled version of an iterator"
-
-    def __init__ (self, val):
-        self.val = val
-
-    # Just strip away the encapsulating __gnu_debug::_Safe_iterator
-    # and return the wrapped iterator value.
-    def to_string (self):
-        itype = self.val.type.template_argument(0)
-        return self.val['_M_current'].cast(itype)
-
-class StdMapPrinter:
-    "Print a std::map or std::multimap"
-
-    # Turn an RbtreeIterator into a pretty-print iterator.
-    class _iter:
-        def __init__(self, rbiter, type):
-            self.rbiter = rbiter
-            self.count = 0
-            self.type = type
-
-        def __iter__(self):
-            return self
-
-        def next(self):
-            if self.count % 2 == 0:
-                n = self.rbiter.next()
-                n = n.cast(self.type).dereference()['_M_value_field']
-                self.pair = n
-                item = n['first']
-            else:
-                item = self.pair['second']
-            result = ('[%d]' % self.count, item)
-            self.count = self.count + 1
-            return result
-
-    def __init__ (self, typename, val):
-        self.typename = typename
-        self.val = val
-
-    def to_string (self):
-        return '%s with %d elements' % (self.typename,
-                                        len (RbtreeIterator (self.val)))
-
-    def children (self):
-        keytype = self.val.type.template_argument(0).const()
-        valuetype = self.val.type.template_argument(1)
-        nodetype = gdb.lookup_type('std::_Rb_tree_node< std::pair< %s, %s > >' % (keytype, valuetype))
-        nodetype = nodetype.pointer()
-        return self._iter (RbtreeIterator (self.val), nodetype)
-
-    def display_hint (self):
-        return 'map'
-
-class StdSetPrinter:
-    "Print a std::set or std::multiset"
-
-    # Turn an RbtreeIterator into a pretty-print iterator.
-    class _iter:
-        def __init__(self, rbiter, type):
-            self.rbiter = rbiter
-            self.count = 0
-            self.type = type
-
-        def __iter__(self):
-            return self
-
-        def next(self):
-            item = self.rbiter.next()
-            item = item.cast(self.type).dereference()['_M_value_field']
-            # FIXME: this is weird ... what to do?
-            # Maybe a 'set' display hint?
-            result = ('[%d]' % self.count, item)
-            self.count = self.count + 1
-            return result
-
-    def __init__ (self, typename, val):
-        self.typename = typename
-        self.val = val
-
-    def to_string (self):
-        return '%s with %d elements' % (self.typename,
-                                        len (RbtreeIterator (self.val)))
-
-    def children (self):
-        keytype = self.val.type.template_argument(0)
-        nodetype = gdb.lookup_type('std::_Rb_tree_node< %s >' % keytype).pointer()
-        return self._iter (RbtreeIterator (self.val), nodetype)
-
-class StdBitsetPrinter:
-    "Print a std::bitset"
-
-    def __init__(self, typename, val):
-        self.typename = typename
-        self.val = val
-
-    def to_string (self):
-        # If template_argument handled values, we could print the
-        # size.  Or we could use a regexp on the type.
-        return '%s' % (self.typename)
-
-    def children (self):
-        words = self.val['_M_w']
-        wtype = words.type
-
-        # The _M_w member can be either an unsigned long, or an
-        # array.  This depends on the template specialization used.
-        # If it is a single long, convert to a single element list.
-        if wtype.code == gdb.TYPE_CODE_ARRAY:
-            tsize = wtype.target ().sizeof
-        else:
-            words = [words]
-            tsize = wtype.sizeof 
-
-        nwords = wtype.sizeof / tsize
-        result = []
-        byte = 0
-        while byte < nwords:
-            w = words[byte]
-            bit = 0
-            while w != 0:
-                if (w & 1) != 0:
-                    # Another spot where we could use 'set'?
-                    result.append(('[%d]' % (byte * tsize * 8 + bit), 1))
-                bit = bit + 1
-                w = w >> 1
-            byte = byte + 1
-        return result
-
-class StdDequePrinter:
-    "Print a std::deque"
-
-    class _iter:
-        def __init__(self, node, start, end, last, buffer_size):
-            self.node = node
-            self.p = start
-            self.end = end
-            self.last = last
-            self.buffer_size = buffer_size
-            self.count = 0
-
-        def __iter__(self):
-            return self
-
-        def next(self):
-            if self.p == self.last:
-                raise StopIteration
-
-            result = ('[%d]' % self.count, self.p.dereference())
-            self.count = self.count + 1
-
-            # Advance the 'cur' pointer.
-            self.p = self.p + 1
-            if self.p == self.end:
-                # If we got to the end of this bucket, move to the
-                # next bucket.
-                self.node = self.node + 1
-                self.p = self.node[0]
-                self.end = self.p + self.buffer_size
-
-            return result
-
-    def __init__(self, typename, val):
-        self.typename = typename
-        self.val = val
-        self.elttype = val.type.template_argument(0)
-        size = self.elttype.sizeof
-        if size < 512:
-            self.buffer_size = int (512 / size)
-        else:
-            self.buffer_size = 1
-
-    def to_string(self):
-        start = self.val['_M_impl']['_M_start']
-        end = self.val['_M_impl']['_M_finish']
-
-        delta_n = end['_M_node'] - start['_M_node'] - 1
-        delta_s = start['_M_last'] - start['_M_cur']
-        delta_e = end['_M_cur'] - end['_M_first']
-
-        size = self.buffer_size * delta_n + delta_s + delta_e
-
-        return '%s with %d elements' % (self.typename, long (size))
-
-    def children(self):
-        start = self.val['_M_impl']['_M_start']
-        end = self.val['_M_impl']['_M_finish']
-        return self._iter(start['_M_node'], start['_M_cur'], start['_M_last'],
-                          end['_M_cur'], self.buffer_size)
-
-    def display_hint (self):
-        return 'array'
-
-class StdDequeIteratorPrinter:
-    "Print std::deque::iterator"
-
-    def __init__(self, val):
-        self.val = val
-
-    def to_string(self):
-        return self.val['_M_cur'].dereference()
-
-class StdStringPrinter:
-    "Print a std::basic_string of some kind"
-
-    def __init__(self, val):
-        self.val = val
-
-    def to_string(self):
-        # Make sure &string works, too.
-        type = self.val.type
-        if type.code == gdb.TYPE_CODE_REF:
-            type = type.target ()
-
-        # Calculate the length of the string so that to_string returns
-        # the string according to length, not according to first null
-        # encountered.
-        ptr = self.val ['_M_dataplus']['_M_p']
-        realtype = type.unqualified ().strip_typedefs ()
-        reptype = gdb.lookup_type (str (realtype) + '::_Rep').pointer ()
-        header = ptr.cast(reptype) - 1
-        len = header.dereference ()['_M_length']
-        if hasattr(ptr, "lazy_string"):
-            return ptr.lazy_string (length = len)
-        return ptr.string (length = len)
-
-    def display_hint (self):
-        return 'string'
-
-class Tr1HashtableIterator:
-    def __init__ (self, hash):
-        self.count = 0
-        self.n_buckets = hash['_M_element_count']
-        if self.n_buckets == 0:
-            self.node = False
-        else:
-            self.bucket = hash['_M_buckets']
-            self.node = self.bucket[0]
-            self.update ()
-
-    def __iter__ (self):
-        return self
-
-    def update (self):
-        # If we advanced off the end of the chain, move to the next
-        # bucket.
-        while self.node == 0:
-            self.bucket = self.bucket + 1
-            self.node = self.bucket[0]
-
-       # If we advanced off the end of the bucket array, then
-       # we're done.
-        if self.count == self.n_buckets:
-            self.node = False
-        else:
-            self.count = self.count + 1
-
-    def next (self):
-        if not self.node:
-            raise StopIteration
-        result = self.node.dereference()['_M_v']
-        self.node = self.node.dereference()['_M_next']
-        self.update ()
-        return result
-
-class Tr1UnorderedSetPrinter:
-    "Print a tr1::unordered_set"
-
-    def __init__ (self, typename, val):
-        self.typename = typename
-        self.val = val
-
-    def to_string (self):
-        return '%s with %d elements' % (self.typename, self.val['_M_element_count'])
-
-    @staticmethod
-    def format_count (i):
-        return '[%d]' % i
-
-    def children (self):
-        counter = itertools.imap (self.format_count, itertools.count())
-        return itertools.izip (counter, Tr1HashtableIterator (self.val))
-
-class Tr1UnorderedMapPrinter:
-    "Print a tr1::unordered_map"
-
-    def __init__ (self, typename, val):
-        self.typename = typename
-        self.val = val
-
-    def to_string (self):
-        return '%s with %d elements' % (self.typename, self.val['_M_element_count'])
-
-    @staticmethod
-    def flatten (list):
-        for elt in list:
-            for i in elt:
-                yield i
-
-    @staticmethod
-    def format_one (elt):
-        return (elt['first'], elt['second'])
-
-    @staticmethod
-    def format_count (i):
-        return '[%d]' % i
-
-    def children (self):
-        counter = itertools.imap (self.format_count, itertools.count())
-        # Map over the hash table and flatten the result.
-        data = self.flatten (itertools.imap (self.format_one, Tr1HashtableIterator (self.val)))
-        # Zip the two iterators together.
-        return itertools.izip (counter, data)
-
-    def display_hint (self):
-        return 'map'
-
-def register_libstdcxx_printers (obj):
-    "Register libstdc++ pretty-printers with objfile Obj."
-
-    if obj == None:
-        obj = gdb
-
-    obj.pretty_printers.append (lookup_function)
-
-def lookup_function (val):
-    "Look-up and return a pretty-printer that can print val."
-
-    # Get the type.
-    type = val.type
-
-    # If it points to a reference, get the reference.
-    if type.code == gdb.TYPE_CODE_REF:
-        type = type.target ()
-
-    # Get the unqualified type, stripped of typedefs.
-    type = type.unqualified ().strip_typedefs ()
-
-    # Get the type name.    
-    typename = type.tag
-    if typename == None:
-        return None
-
-    # Iterate over local dictionary of types to determine
-    # if a printer is registered for that type.  Return an
-    # instantiation of the printer if found.
-    for function in pretty_printers_dict:
-        if function.search (typename):
-            return pretty_printers_dict[function] (val)
-        
-    # Cannot find a pretty printer.  Return None.
-    return None
-
-def build_libstdcxx_dictionary ():
-    # libstdc++ objects requiring pretty-printing.
-    # In order from:
-    # http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01847.html
-    pretty_printers_dict[re.compile('^std::basic_string<.*>$')] = lambda val: StdStringPrinter(val)
-    pretty_printers_dict[re.compile('^std::bitset<.*>$')] = lambda val: StdBitsetPrinter("std::bitset", val)
-    pretty_printers_dict[re.compile('^std::deque<.*>$')] = lambda val: StdDequePrinter("std::deque", val)
-    pretty_printers_dict[re.compile('^std::list<.*>$')] = lambda val: StdListPrinter("std::list", val)
-    pretty_printers_dict[re.compile('^std::map<.*>$')] = lambda val: StdMapPrinter("std::map", val)
-    pretty_printers_dict[re.compile('^std::multimap<.*>$')] = lambda val: StdMapPrinter("std::multimap", val)
-    pretty_printers_dict[re.compile('^std::multiset<.*>$')] = lambda val: StdSetPrinter("std::multiset", val)
-    pretty_printers_dict[re.compile('^std::priority_queue<.*>$')] = lambda val: StdStackOrQueuePrinter("std::priority_queue", val)
-    pretty_printers_dict[re.compile('^std::queue<.*>$')] = lambda val: StdStackOrQueuePrinter("std::queue", val)
-    pretty_printers_dict[re.compile('^std::tuple<.*>$')] = lambda val: StdTuplePrinter("std::tuple", val)
-    pretty_printers_dict[re.compile('^std::set<.*>$')] = lambda val: StdSetPrinter("std::set", val)
-    pretty_printers_dict[re.compile('^std::stack<.*>$')] = lambda val: StdStackOrQueuePrinter("std::stack", val)
-    pretty_printers_dict[re.compile('^std::unique_ptr<.*>$')] = UniquePointerPrinter
-    pretty_printers_dict[re.compile('^std::vector<.*>$')] = lambda val: StdVectorPrinter("std::vector", val)
-    # vector<bool>
-
-    # Printer registrations for classes compiled with -D_GLIBCXX_DEBUG.
-    pretty_printers_dict[re.compile('^std::__debug::bitset<.*>$')] = lambda val: StdBitsetPrinter("std::__debug::bitset", val)
-    pretty_printers_dict[re.compile('^std::__debug::deque<.*>$')] = lambda val: StdDequePrinter("std::__debug::deque", val)
-    pretty_printers_dict[re.compile('^std::__debug::list<.*>$')] = lambda val: StdListPrinter("std::__debug::list", val)
-    pretty_printers_dict[re.compile('^std::__debug::map<.*>$')] = lambda val: StdMapPrinter("std::__debug::map", val)
-    pretty_printers_dict[re.compile('^std::__debug::multimap<.*>$')] = lambda val: StdMapPrinter("std::__debug::multimap", val)
-    pretty_printers_dict[re.compile('^std::__debug::multiset<.*>$')] = lambda val: StdSetPrinter("std::__debug::multiset", val)
-    pretty_printers_dict[re.compile('^std::__debug::priority_queue<.*>$')] = lambda val: StdStackOrQueuePrinter("std::__debug::priority_queue", val)
-    pretty_printers_dict[re.compile('^std::__debug::queue<.*>$')] = lambda val: StdStackOrQueuePrinter("std::__debug::queue", val)
-    pretty_printers_dict[re.compile('^std::__debug::set<.*>$')] = lambda val: StdSetPrinter("std::__debug::set", val)
-    pretty_printers_dict[re.compile('^std::__debug::stack<.*>$')] = lambda val: StdStackOrQueuePrinter("std::__debug::stack", val)
-    pretty_printers_dict[re.compile('^std::__debug::unique_ptr<.*>$')] = UniquePointerPrinter
-    pretty_printers_dict[re.compile('^std::__debug::vector<.*>$')] = lambda val: StdVectorPrinter("std::__debug::vector", val)
-
-    # These are the TR1 and C++0x printers.
-    # For array - the default GDB pretty-printer seems reasonable.
-    pretty_printers_dict[re.compile('^std::shared_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::shared_ptr', val)
-    pretty_printers_dict[re.compile('^std::weak_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::weak_ptr', val)
-    pretty_printers_dict[re.compile('^std::unordered_map<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::unordered_map', val)
-    pretty_printers_dict[re.compile('^std::unordered_set<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::unordered_set', val)
-    pretty_printers_dict[re.compile('^std::unordered_multimap<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::unordered_multimap', val)
-    pretty_printers_dict[re.compile('^std::unordered_multiset<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::unordered_multiset', val)
-
-    pretty_printers_dict[re.compile('^std::tr1::shared_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::tr1::shared_ptr', val)
-    pretty_printers_dict[re.compile('^std::tr1::weak_ptr<.*>$')] = lambda val: StdPointerPrinter ('std::tr1::weak_ptr', val)
-    pretty_printers_dict[re.compile('^std::tr1::unordered_map<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::tr1::unordered_map', val)
-    pretty_printers_dict[re.compile('^std::tr1::unordered_set<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::tr1::unordered_set', val)
-    pretty_printers_dict[re.compile('^std::tr1::unordered_multimap<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::tr1::unordered_multimap', val)
-    pretty_printers_dict[re.compile('^std::tr1::unordered_multiset<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::tr1::unordered_multiset', val)
-
-    # These are the C++0x printer registrations for -D_GLIBCXX_DEBUG cases.
-    # The tr1 namespace printers do not seem to have any debug
-    # equivalents, so do no register them.
-    pretty_printers_dict[re.compile('^std::__debug::unordered_map<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::__debug::unordered_map', val)
-    pretty_printers_dict[re.compile('^std::__debug::unordered_set<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::__debug::unordered_set', val)
-    pretty_printers_dict[re.compile('^std::__debug::unordered_multimap<.*>$')] = lambda val: Tr1UnorderedMapPrinter ('std::__debug::unordered_multimap',  val)
-    pretty_printers_dict[re.compile('^std::__debug::unordered_multiset<.*>$')] = lambda val: Tr1UnorderedSetPrinter ('std::__debug:unordered_multiset', val)
-
-
-    # Extensions.
-    pretty_printers_dict[re.compile('^__gnu_cxx::slist<.*>$')] = StdSlistPrinter
-
-    if True:
-        # These shouldn't be necessary, if GDB "print *i" worked.
-        # But it often doesn't, so here they are.
-        pretty_printers_dict[re.compile('^std::_List_iterator<.*>$')] = lambda val: StdListIteratorPrinter("std::_List_iterator",val)
-        pretty_printers_dict[re.compile('^std::_List_const_iterator<.*>$')] = lambda val: StdListIteratorPrinter("std::_List_const_iterator",val)
-        pretty_printers_dict[re.compile('^std::_Rb_tree_iterator<.*>$')] = lambda val: StdRbtreeIteratorPrinter(val)
-        pretty_printers_dict[re.compile('^std::_Rb_tree_const_iterator<.*>$')] = lambda val: StdRbtreeIteratorPrinter(val)
-        pretty_printers_dict[re.compile('^std::_Deque_iterator<.*>$')] = lambda val: StdDequeIteratorPrinter(val)
-        pretty_printers_dict[re.compile('^std::_Deque_const_iterator<.*>$')] = lambda val: StdDequeIteratorPrinter(val)
-        pretty_printers_dict[re.compile('^__gnu_cxx::__normal_iterator<.*>$')] = lambda val: StdVectorIteratorPrinter(val)
-        pretty_printers_dict[re.compile('^__gnu_cxx::_Slist_iterator<.*>$')] = lambda val: StdSlistIteratorPrinter(val)
-
-        # Debug (compiled with -D_GLIBCXX_DEBUG) printer registrations.
-        # The Rb_tree debug iterator when unwrapped from the encapsulating __gnu_debug::_Safe_iterator
-        # does not have the __norm namespace. Just use the existing printer registration for that.
-        pretty_printers_dict[re.compile('^__gnu_debug::_Safe_iterator<.*>$')] = lambda val: StdDebugIteratorPrinter(val)
-        pretty_printers_dict[re.compile('^std::__norm::_List_iterator<.*>$')] = lambda val: StdListIteratorPrinter ("std::__norm::_List_iterator",val)
-        pretty_printers_dict[re.compile('^std::__norm::_List_const_iterator<.*>$')] = lambda val: StdListIteratorPrinter ("std::__norm::_List_const_iterator",val)
-        pretty_printers_dict[re.compile('^std::__norm::_Deque_const_iterator<.*>$')] = lambda val: StdDequeIteratorPrinter(val)
-        pretty_printers_dict[re.compile('^std::__norm::_Deque_iterator<.*>$')] = lambda val: StdDequeIteratorPrinter(val)
-
-pretty_printers_dict = {}
-
-build_libstdcxx_dictionary ()
diff --git a/share/info/annotate.info b/share/info/annotate.info
index 92ed721..c0cef3b 100644
--- a/share/info/annotate.info
+++ b/share/info/annotate.info
@@ -1,5 +1,5 @@
 This is annotate.info, produced by makeinfo version 4.13 from
-/usr/local/google/home/android/v15release/./src/build/../gdb/gdb-7.1.x/gdb/doc/annotate.texinfo.
+/tmp/android-17841/src/build/../gdb/gdb-7.1.x/gdb/doc/annotate.texinfo.
 
 INFO-DIR-SECTION Software development
 START-INFO-DIR-ENTRY
@@ -1118,21 +1118,21 @@
 
 
 Tag Table:
-Node: Top1360
-Node: Annotations Overview2530
-Node: Limitations4329
-Node: Migrating to GDB/MI6914
-Node: Server Prefix7297
-Node: Value Annotations7943
-Node: Frame Annotations11113
-Node: Displays15012
-Node: Prompting16043
-Node: Errors17546
-Node: Breakpoint Info18436
-Node: Invalidation19661
-Node: Annotations for Running20140
-Node: Source Annotations21653
-Node: Multi-threaded Apps22599
-Node: GNU Free Documentation License23208
+Node: Top1335
+Node: Annotations Overview2505
+Node: Limitations4304
+Node: Migrating to GDB/MI6889
+Node: Server Prefix7272
+Node: Value Annotations7918
+Node: Frame Annotations11088
+Node: Displays14987
+Node: Prompting16018
+Node: Errors17521
+Node: Breakpoint Info18411
+Node: Invalidation19636
+Node: Annotations for Running20115
+Node: Source Annotations21628
+Node: Multi-threaded Apps22574
+Node: GNU Free Documentation License23183
 
 End Tag Table
diff --git a/share/info/as.info b/share/info/as.info
index 2ea6695..0181e64 100644
--- a/share/info/as.info
+++ b/share/info/as.info
Binary files differ
diff --git a/share/info/bfd.info b/share/info/bfd.info
index d7cb400..e5d55d6 100644
--- a/share/info/bfd.info
+++ b/share/info/bfd.info
Binary files differ
diff --git a/share/info/binutils.info b/share/info/binutils.info
index 3e08817..71aa42d 100644
--- a/share/info/binutils.info
+++ b/share/info/binutils.info
Binary files differ
diff --git a/share/info/configure.info b/share/info/configure.info
index dc971f0..ca04153 100644
--- a/share/info/configure.info
+++ b/share/info/configure.info
Binary files differ
diff --git a/share/info/cpp.info b/share/info/cpp.info
index 6bc0024..e793b94 100644
--- a/share/info/cpp.info
+++ b/share/info/cpp.info
Binary files differ
diff --git a/share/info/cppinternals.info b/share/info/cppinternals.info
index d74b478..b93cc97 100644
--- a/share/info/cppinternals.info
+++ b/share/info/cppinternals.info
Binary files differ
diff --git a/share/info/gcc.info b/share/info/gcc.info
index 499ca16..39c323f 100644
--- a/share/info/gcc.info
+++ b/share/info/gcc.info
Binary files differ
diff --git a/share/info/gccinstall.info b/share/info/gccinstall.info
index 7689a0e..9a1f758 100644
--- a/share/info/gccinstall.info
+++ b/share/info/gccinstall.info
Binary files differ
diff --git a/share/info/gccint.info b/share/info/gccint.info
index 03605f3..81c4715 100644
--- a/share/info/gccint.info
+++ b/share/info/gccint.info
Binary files differ
diff --git a/share/info/gdb.info b/share/info/gdb.info
index 4f86150..ecdb21c 100644
--- a/share/info/gdb.info
+++ b/share/info/gdb.info
Binary files differ
diff --git a/share/info/gdbint.info b/share/info/gdbint.info
index 8e6c216..b2ef4dd 100644
--- a/share/info/gdbint.info
+++ b/share/info/gdbint.info
Binary files differ
diff --git a/share/info/gprof.info b/share/info/gprof.info
index d13f42a..71e0d9c 100644
--- a/share/info/gprof.info
+++ b/share/info/gprof.info
@@ -1,5 +1,5 @@
 This is gprof.info, produced by makeinfo version 4.13 from
-/usr/local/google/home/android/v15release/./src/build/../binutils/binutils-2.21/gprof/gprof.texi.
+/tmp/android-17841/src/build/../binutils/binutils-2.21/gprof/gprof.texi.
 
 INFO-DIR-SECTION Software development
 START-INFO-DIR-ENTRY
@@ -2441,35 +2441,35 @@
 
 
 Tag Table:
-Node: Top864
-Node: Introduction2187
-Node: Compiling4679
-Node: Executing8735
-Node: Invoking11523
-Node: Output Options12938
-Node: Analysis Options20027
-Node: Miscellaneous Options23725
-Node: Deprecated Options24980
-Node: Symspecs27049
-Node: Output28875
-Node: Flat Profile29915
-Node: Call Graph34868
-Node: Primary38100
-Node: Callers40688
-Node: Subroutines42805
-Node: Cycles44646
-Node: Line-by-line51423
-Node: Annotated Source55496
-Node: Inaccuracy58495
-Node: Sampling Error58753
-Node: Assumptions61657
-Node: How do I?63127
-Node: Incompatibilities64681
-Node: Details66175
-Node: Implementation66568
-Node: File Format72465
-Node: Internals76755
-Node: Debugging85250
-Node: GNU Free Documentation License86851
+Node: Top839
+Node: Introduction2162
+Node: Compiling4654
+Node: Executing8710
+Node: Invoking11498
+Node: Output Options12913
+Node: Analysis Options20002
+Node: Miscellaneous Options23700
+Node: Deprecated Options24955
+Node: Symspecs27024
+Node: Output28850
+Node: Flat Profile29890
+Node: Call Graph34843
+Node: Primary38075
+Node: Callers40663
+Node: Subroutines42780
+Node: Cycles44621
+Node: Line-by-line51398
+Node: Annotated Source55471
+Node: Inaccuracy58470
+Node: Sampling Error58728
+Node: Assumptions61632
+Node: How do I?63102
+Node: Incompatibilities64656
+Node: Details66150
+Node: Implementation66543
+Node: File Format72440
+Node: Internals76730
+Node: Debugging85225
+Node: GNU Free Documentation License86826
 
 End Tag Table
diff --git a/share/info/ld.info b/share/info/ld.info
index 05de89f..5c78161 100644
--- a/share/info/ld.info
+++ b/share/info/ld.info
Binary files differ
diff --git a/share/info/stabs.info b/share/info/stabs.info
index 895cb02..917b107 100644
--- a/share/info/stabs.info
+++ b/share/info/stabs.info
Binary files differ
diff --git a/share/info/standards.info b/share/info/standards.info
index 7692ed1..cd0e623 100644
--- a/share/info/standards.info
+++ b/share/info/standards.info
Binary files differ
diff --git a/share/man/man1/arm-linux-androideabi-cpp.1 b/share/man/man1/arm-linux-androideabi-cpp.1
index d1b0710..ebf82ad 100644
--- a/share/man/man1/arm-linux-androideabi-cpp.1
+++ b/share/man/man1/arm-linux-androideabi-cpp.1
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "CPP 1"
-.TH CPP 1 "2011-07-18" "gcc-4.6.x-google" "GNU"
+.TH CPP 1 "2012-01-06" "gcc-4.6.x-google" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/share/man/man1/arm-linux-androideabi-g++.1 b/share/man/man1/arm-linux-androideabi-g++.1
index 24f424c..6405bee 100644
--- a/share/man/man1/arm-linux-androideabi-g++.1
+++ b/share/man/man1/arm-linux-androideabi-g++.1
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GCC 1"
-.TH GCC 1 "2011-07-18" "gcc-4.6.x-google" "GNU"
+.TH GCC 1 "2012-01-06" "gcc-4.6.x-google" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -408,10 +408,12 @@
 \&\-fpmu\-profile\-generate=\fR\fIpmuoption\fR 
 \&\fB\-fpmu\-profile\-use=\fR\fIpmuoption\fR 
 \&\fB\-freciprocal\-math \-fregmove \-frename\-registers \-freorder\-blocks 
+\&\-frecord\-gcc\-switches\-in\-elf
 \&\-freorder\-blocks\-and\-partition \-freorder\-functions 
 \&\-frerun\-cse\-after\-loop \-freschedule\-modulo\-scheduled\-loops 
 \&\-fripa \-fripa\-disallow\-asm\-modules \-fripa\-disallow\-opt\-mismatch 
-\&\-fripa\-no\-promote\-always\-inline\-func \-fripa\-verbose \-frounding\-math 
+\&\-fripa\-no\-promote\-always\-inline\-func \-fripa\-verbose 
+\&\-fripa\-peel\-size\-limit \-fripa\-unroll\-size\-limit \-frounding\-math 
 \&\-fsched2\-use\-superblocks \-fsched\-pressure 
 \&\-fsched\-spec\-load \-fsched\-spec\-load\-dangerous 
 \&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB] \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] 
@@ -423,8 +425,8 @@
 \&\-fsel\-sched\-pipelining \-fsel\-sched\-pipelining\-outer\-loops 
 \&\-fsignaling\-nans \-fsingle\-precision\-constant \-fsplit\-ivs\-in\-unroller 
 \&\-fsplit\-wide\-types \-fstack\-protector \-fstack\-protector\-all 
-\&\-fstrict\-aliasing \-fstrict\-overflow \-fthread\-jumps \-ftracer 
-\&\-ftree\-bit\-ccp 
+\&\-fstack\-protector\-strong \-fstrict\-aliasing \-fstrict\-overflow 
+\&\-fthread\-jumps \-ftracer \-ftree\-bit\-ccp 
 \&\-ftree\-builtin\-call\-dce \-ftree\-ccp \-ftree\-ch \-ftree\-copy\-prop 
 \&\-ftree\-copyrename \-ftree\-dce \-ftree\-dominator\-opts \-ftree\-dse 
 \&\-ftree\-forwprop \-ftree\-fre \-ftree\-loop\-if\-convert 
@@ -901,7 +903,8 @@
 \&\-mlittle\-endian 
 \&\-mstack\-bias  \-mno\-stack\-bias 
 \&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
-\&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis\fR
+\&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis 
+\&\-mfix\-at697f\fR
 .Sp
 \&\fI\s-1SPU\s0 Options\fR
 \&\fB\-mwarn\-reloc \-merror\-reloc 
@@ -7061,8 +7064,8 @@
 bodies are read from these \s-1ELF\s0 sections and instantiated as if they
 had been part of the same translation unit.
 .Sp
-To use the link-timer optimizer, \fB\-flto\fR needs to be specified at
-compile time and during the final link.  For example,
+To use the link-time optimizer, \fB\-flto\fR needs to be specified at
+compile time and during the final link.  For example:
 .Sp
 .Vb 3
 \&        gcc \-c \-O2 \-flto foo.c
@@ -7070,25 +7073,25 @@
 \&        gcc \-o myprog \-flto \-O2 foo.o bar.o
 .Ve
 .Sp
-The first two invocations to \s-1GCC\s0 will save a bytecode representation
+The first two invocations to \s-1GCC\s0 save a bytecode representation
 of \s-1GIMPLE\s0 into special \s-1ELF\s0 sections inside \fIfoo.o\fR and
-\&\fIbar.o\fR.  The final invocation will read the \s-1GIMPLE\s0 bytecode from
-\&\fIfoo.o\fR and \fIbar.o\fR, merge the two files into a single
-internal image, and compile the result as usual.  Since both
+\&\fIbar.o\fR.  The final invocation reads the \s-1GIMPLE\s0 bytecode from
+\&\fIfoo.o\fR and \fIbar.o\fR, merges the two files into a single
+internal image, and compiles the result as usual.  Since both
 \&\fIfoo.o\fR and \fIbar.o\fR are merged into a single image, this
-causes all the inter-procedural analyses and optimizations in \s-1GCC\s0 to
+causes all the interprocedural analyses and optimizations in \s-1GCC\s0 to
 work across the two files as if they were a single one.  This means,
-for example, that the inliner will be able to inline functions in
+for example, that the inliner is able to inline functions in
 \&\fIbar.o\fR into functions in \fIfoo.o\fR and vice-versa.
 .Sp
-Another (simpler) way to enable link-time optimization is,
+Another (simpler) way to enable link-time optimization is:
 .Sp
 .Vb 1
 \&        gcc \-o myprog \-flto \-O2 foo.c bar.c
 .Ve
 .Sp
-The above will generate bytecode for \fIfoo.c\fR and \fIbar.c\fR,
-merge them together into a single \s-1GIMPLE\s0 representation and optimize
+The above generates bytecode for \fIfoo.c\fR and \fIbar.c\fR,
+merges them together into a single \s-1GIMPLE\s0 representation and optimizes
 them as usual to produce \fImyprog\fR.
 .Sp
 The only important thing to keep in mind is that to enable link-time
@@ -7098,30 +7101,22 @@
 To make whole program optimization effective, it is necessary to make
 certain whole program assumptions.  The compiler needs to know
 what functions and variables can be accessed by libraries and runtime
-outside of the link time optimized unit.  When supported by the linker,
-the linker plugin (see \fB\-fuse\-linker\-plugin\fR) passes to the
-compiler information about used and externally visible symbols.  When
+outside of the link-time optimized unit.  When supported by the linker,
+the linker plugin (see \fB\-fuse\-linker\-plugin\fR) passes information
+to the compiler about used and externally visible symbols.  When
 the linker plugin is not available, \fB\-fwhole\-program\fR should be
-used to allow the compiler to make these assumptions, which will lead
+used to allow the compiler to make these assumptions, which leads
 to more aggressive optimization decisions.
 .Sp
 Note that when a file is compiled with \fB\-flto\fR, the generated
-object file will be larger than a regular object file because it will
-contain \s-1GIMPLE\s0 bytecodes and the usual final code.  This means that
-object files with \s-1LTO\s0 information can be linked as a normal object
-file.  So, in the previous example, if the final link is done with
-.Sp
-.Vb 1
-\&        gcc \-o myprog foo.o bar.o
-.Ve
-.Sp
-The only difference will be that no inter-procedural optimizations
-will be applied to produce \fImyprog\fR.  The two object files
-\&\fIfoo.o\fR and \fIbar.o\fR will be simply sent to the regular
-linker.
+object file is larger than a regular object file because it 
+contains \s-1GIMPLE\s0 bytecodes and the usual final code.  This means that
+object files with \s-1LTO\s0 information can be linked as normal object
+files; if \fB\-flto\fR is not passed to the linker, no
+interprocedural optimizations are applied.
 .Sp
 Additionally, the optimization flags used to compile individual files
-are not necessarily related to those used at link-time.  For instance,
+are not necessarily related to those used at link time.  For instance,
 .Sp
 .Vb 3
 \&        gcc \-c \-O0 \-flto foo.c
@@ -7129,37 +7124,42 @@
 \&        gcc \-o myprog \-flto \-O3 foo.o bar.o
 .Ve
 .Sp
-This will produce individual object files with unoptimized assembler
-code, but the resulting binary \fImyprog\fR will be optimized at
-\&\fB\-O3\fR.  Now, if the final binary is generated without
-\&\fB\-flto\fR, then \fImyprog\fR will not be optimized.
+This produces individual object files with unoptimized assembler
+code, but the resulting binary \fImyprog\fR is optimized at
+\&\fB\-O3\fR.  If, instead, the final binary is generated without
+\&\fB\-flto\fR, then \fImyprog\fR is not optimized.
 .Sp
-When producing the final binary with \fB\-flto\fR, \s-1GCC\s0 will only
-apply link-time optimizations to those files that contain bytecode.
+When producing the final binary with \fB\-flto\fR, \s-1GCC\s0 only
+applies link-time optimizations to those files that contain bytecode.
 Therefore, you can mix and match object files and libraries with
-\&\s-1GIMPLE\s0 bytecodes and final object code.  \s-1GCC\s0 will automatically select
+\&\s-1GIMPLE\s0 bytecodes and final object code.  \s-1GCC\s0 automatically selects
 which files to optimize in \s-1LTO\s0 mode and which files to link without
 further processing.
 .Sp
-There are some code generation flags that \s-1GCC\s0 will preserve when
+There are some code generation flags that \s-1GCC\s0 preserves when
 generating bytecodes, as they need to be used during the final link
 stage.  Currently, the following options are saved into the \s-1GIMPLE\s0
 bytecode files: \fB\-fPIC\fR, \fB\-fcommon\fR and all the
 \&\fB\-m\fR target flags.
 .Sp
-At link time, these options are read-in and reapplied.  Note that the
-current implementation makes no attempt at recognizing conflicting
-values for these options.  If two or more files have a conflicting
-value (e.g., one file is compiled with \fB\-fPIC\fR and another
-isn't), the compiler will simply use the last value read from the
-bytecode files.  It is recommended, then, that all the files
-participating in the same link be compiled with the same options.
+At link time, these options are read in and reapplied.  Note that the
+current implementation makes no attempt to recognize conflicting
+values for these options.  If different files have conflicting option
+values (e.g., one file is compiled with \fB\-fPIC\fR and another
+isn't), the compiler simply uses the last value read from the
+bytecode files.  It is recommended, then, that you compile all the files
+participating in the same link with the same options.
+.Sp
+If \s-1LTO\s0 encounters objects with C linkage declared with incompatible
+types in separate translation units to be linked together (undefined
+behavior according to \s-1ISO\s0 C99 6.2.7), a non-fatal diagnostic may be
+issued.  The behavior is still undefined at runtime.
 .Sp
 Another feature of \s-1LTO\s0 is that it is possible to apply interprocedural
 optimizations on files written in different languages.  This requires
-some support in the language front end.  Currently, the C, \*(C+ and
+support in the language front end.  Currently, the C, \*(C+ and
 Fortran front ends are capable of emitting \s-1GIMPLE\s0 bytecodes, so
-something like this should work
+something like this should work:
 .Sp
 .Vb 4
 \&        gcc \-c \-flto foo.c
@@ -7171,49 +7171,43 @@
 Notice that the final link is done with \fBg++\fR to get the \*(C+
 runtime libraries and \fB\-lgfortran\fR is added to get the Fortran
 runtime libraries.  In general, when mixing languages in \s-1LTO\s0 mode, you
-should use the same link command used when mixing languages in a
-regular (non-LTO) compilation.  This means that if your build process
-was mixing languages before, all you need to add is \fB\-flto\fR to
+should use the same link command options as when mixing languages in a
+regular (non-LTO) compilation; all you need to add is \fB\-flto\fR to
 all the compile and link commands.
 .Sp
-If \s-1LTO\s0 encounters objects with C linkage declared with incompatible
-types in separate translation units to be linked together (undefined
-behavior according to \s-1ISO\s0 C99 6.2.7), a non-fatal diagnostic may be
-issued.  The behavior is still undefined at runtime.
-.Sp
 If object files containing \s-1GIMPLE\s0 bytecode are stored in a library archive, say
 \&\fIlibfoo.a\fR, it is possible to extract and use them in an \s-1LTO\s0 link if you
-are using a linker with linker plugin support.  To enable this feature, use
-the flag \fB\-fuse\-linker\-plugin\fR at link-time:
+are using a linker with plugin support.  To enable this feature, use
+the flag \fB\-fuse\-linker\-plugin\fR at link time:
 .Sp
 .Vb 1
 \&        gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo
 .Ve
 .Sp
-With the linker plugin enabled, the linker will extract the needed
-\&\s-1GIMPLE\s0 files from \fIlibfoo.a\fR and pass them on to the running \s-1GCC\s0
+With the linker plugin enabled, the linker extracts the needed
+\&\s-1GIMPLE\s0 files from \fIlibfoo.a\fR and passes them on to the running \s-1GCC\s0
 to make them part of the aggregated \s-1GIMPLE\s0 image to be optimized.
 .Sp
-If you are not using a linker with linker plugin support and/or do not 
-enable linker plugin then the objects inside \fIlibfoo.a\fR
-will be extracted and linked as usual, but they will not participate
+If you are not using a linker with plugin support and/or do not
+enable the linker plugin, then the objects inside \fIlibfoo.a\fR
+are extracted and linked as usual, but they do not participate
 in the \s-1LTO\s0 optimization process.
 .Sp
-Link time optimizations do not require the presence of the whole program to
+Link-time optimizations do not require the presence of the whole program to
 operate.  If the program does not require any symbols to be exported, it is
-possible to combine \fB\-flto\fR and with \fB\-fwhole\-program\fR to allow
+possible to combine \fB\-flto\fR and \fB\-fwhole\-program\fR to allow
 the interprocedural optimizers to use more aggressive assumptions which may
 lead to improved optimization opportunities. 
 Use of \fB\-fwhole\-program\fR is not needed when linker plugin is
 active (see \fB\-fuse\-linker\-plugin\fR).
 .Sp
-Regarding portability: the current implementation of \s-1LTO\s0 makes no
-attempt at generating bytecode that can be ported between different
+The current implementation of \s-1LTO\s0 makes no
+attempt to generate bytecode that is portable between different
 types of hosts.  The bytecode files are versioned and there is a
 strict version check, so bytecode files generated in one version of
 \&\s-1GCC\s0 will not work with an older/newer version of \s-1GCC\s0.
 .Sp
-Link time optimization does not play well with generating debugging
+Link-time optimization does not work well with generation of debugging
 information.  Combining \fB\-flto\fR with
 \&\fB\-g\fR is currently experimental and expected to produce wrong
 results.
@@ -7227,14 +7221,14 @@
 You can also specify \fB\-flto=jobserver\fR to use \s-1GNU\s0 make's 
 job server mode to determine the number of parallel jobs. This 
 is useful when the Makefile calling \s-1GCC\s0 is already executing in parallel.
-The parent Makefile will need a \fB+\fR prepended to the command recipe
-for this to work. This will likely only work if \fB\s-1MAKE\s0\fR is 
+You must prepend a \fB+\fR to the command recipe in the parent Makefile
+for this to work.  This option likely only works if \fB\s-1MAKE\s0\fR is
 \&\s-1GNU\s0 make.
 .Sp
 This option is disabled by default.
 .IP "\fB\-flto\-partition=\fR\fIalg\fR" 4
 .IX Item "-flto-partition=alg"
-Specify the partitioning algorithm used by the link time optimizer.
+Specify the partitioning algorithm used by the link-time optimizer.
 The value is either \f(CW\*(C`1to1\*(C'\fR to specify a partitioning mirroring
 the original source files or \f(CW\*(C`balanced\*(C'\fR to specify partitioning
 into equally sized chunks (whenever possible).  Specifying \f(CW\*(C`none\*(C'\fR
@@ -7251,27 +7245,29 @@
 .IP "\fB\-flto\-report\fR" 4
 .IX Item "-flto-report"
 Prints a report with internal details on the workings of the link-time
-optimizer.  The contents of this report vary from version to version,
-it is meant to be useful to \s-1GCC\s0 developers when processing object
+optimizer.  The contents of this report vary from version to version.
+It is meant to be useful to \s-1GCC\s0 developers when processing object
 files in \s-1LTO\s0 mode (via \fB\-flto\fR).
 .Sp
 Disabled by default.
 .IP "\fB\-fuse\-linker\-plugin\fR" 4
 .IX Item "-fuse-linker-plugin"
-Enables the use of linker plugin during link time optimization.  This option
-relies on the linker plugin support in linker that is available in gold
+Enables the use of a linker plugin during link-time optimization.  This
+option relies on the linker plugin support in linker that is available in gold
 or in \s-1GNU\s0 ld 2.21 or newer.
 .Sp
-This option enables the extraction of object files with \s-1GIMPLE\s0 bytecode out of
-library archives. This improves the quality of optimization by exposing more
-code the the link time optimizer.  This information specify what symbols 
-can be accessed externally (by non-LTO object or during dynamic linking).
-Resulting code quality improvements on binaries (and shared libraries that do
-use hidden visibility) is similar to \f(CW\*(C`\-fwhole\-program\*(C'\fR.  See
-\&\fB\-flto\fR for a description on the effect of this flag and how to use it.
+This option enables the extraction of object files with \s-1GIMPLE\s0 bytecode out
+of library archives. This improves the quality of optimization by exposing
+more code to the link-time optimizer.  This information specifies what
+symbols can be accessed externally (by non-LTO object or during dynamic
+linking).  Resulting code quality improvements on binaries (and shared
+libraries that use hidden visibility) are similar to \f(CW\*(C`\-fwhole\-program\*(C'\fR.
+See \fB\-flto\fR for a description of the effect of this flag and how to
+use it.
 .Sp
-Enabled by default when \s-1LTO\s0 support in \s-1GCC\s0 is enabled and \s-1GCC\s0 was compiled
-with a linker supporting plugins (\s-1GNU\s0 ld 2.21 or newer or gold).
+This option is enabled by default when \s-1LTO\s0 support in \s-1GCC\s0 is enabled
+and \s-1GCC\s0 was configured for use with
+a linker supporting plugins (\s-1GNU\s0 ld 2.21 or newer or gold).
 .IP "\fB\-fcompare\-elim\fR" 4
 .IX Item "-fcompare-elim"
 After register allocation and post-register allocation instruction splitting,
@@ -7406,6 +7402,18 @@
 .IX Item "-fripa-verbose"
 Enable printing of verbose information about dynamic inter-procedural optimizations.
 This is used in conjunction with the \fB\-fripa\fR.
+.IP "\fB\-fripa\-peel\-size\-limit\fR" 4
+.IX Item "-fripa-peel-size-limit"
+Limit loop peeling of non-const non-FP loops in a \s-1LIPO\s0 compilation under estimates
+of a large code footprint. Enabled by default under \fB\-fripa\fR. Code size
+estimation and thresholds are controlled by the \fBcodesize-hotness-threshold\fR
+and \fBunrollpeel-codesize-threshold\fR parameters.
+.IP "\fB\-fripa\-unroll\-size\-limit\fR" 4
+.IX Item "-fripa-unroll-size-limit"
+Limit loop unrolling of non-const non-FP loops in a \s-1LIPO\s0 compilation under estimates
+of a large code footprint. Enabled by default under \fB\-fripa\fR. Code size
+estimation and thresholds are controlled by the \fBcodesize-hotness-threshold\fR
+and \fBunrollpeel-codesize-threshold\fR parameters.
 .IP "\fB\-fcallgraph\-profiles\-sections\fR" 4
 .IX Item "-fcallgraph-profiles-sections"
 Emit call graph edge profile counts in .note.callgraph.text sections. This is
@@ -7414,6 +7422,10 @@
 number of times it is called. The params variable
 \&\*(L"note-cgraph-section-edge-threshold\*(R" can be used to only list edges above a
 certain threshold.
+.IP "\fB\-frecord\-gcc\-switches\-in\-elf\fR" 4
+.IX Item "-frecord-gcc-switches-in-elf"
+Record the command line options in the .gnu.switches.text elf section for sample
+based \s-1LIPO\s0 to do module grouping.
 .PP
 The following options control compiler behavior regarding floating
 point arithmetic.  These options trade off between speed and
@@ -7765,6 +7777,11 @@
 .IP "\fB\-fstack\-protector\-all\fR" 4
 .IX Item "-fstack-protector-all"
 Like \fB\-fstack\-protector\fR except that all functions are protected.
+.IP "\fB\-fstack\-protector\-strong\fR" 4
+.IX Item "-fstack-protector-strong"
+Like \fB\-fstack\-protector\fR but includes additional functions to be
+protected \- those that have local array definitions, or have references to
+local frame addresses.
 .IP "\fB\-fsection\-anchors\fR" 4
 .IX Item "-fsection-anchors"
 Try to reduce the number of symbolic address calculations by using
@@ -8088,6 +8105,13 @@
 .IP "\fBmax-completely-peel-loop-nest-depth\fR" 4
 .IX Item "max-completely-peel-loop-nest-depth"
 The maximum depth of a loop nest suitable for complete peeling.
+.IP "\fBcodesize-hotness-threshold\fR" 4
+.IX Item "codesize-hotness-threshold"
+The minimum profile count of basic blocks to look at when estimating
+the code size footprint of the call graph in a \s-1LIPO\s0 compile.
+.IP "\fBunrollpeel-codesize-threshold\fR" 4
+.IX Item "unrollpeel-codesize-threshold"
+Maximum \s-1LIPO\s0 code size footprint estimate for loop unrolling and peeling.
 .IP "\fBmax-unswitch-insns\fR" 4
 .IX Item "max-unswitch-insns"
 The maximum number of insns of an unswitched loop.
@@ -10028,6 +10052,123 @@
 comply to the C standards, but it will provide you with smaller code
 size.
 .PP
+\f(CW\*(C`EIND\*(C'\fR and Devices with more than 128k Bytes of Flash
+.IX Subsection "EIND and Devices with more than 128k Bytes of Flash"
+.PP
+Pointers in the implementation are 16 bits wide.
+The address of a function or label is represented as word address so
+that indirect jumps and calls can address any code address in the
+range of 64k words.
+.PP
+In order to faciliate indirect jump on devices with more than 128k
+bytes of program memory space, there is a special function register called
+\&\f(CW\*(C`EIND\*(C'\fR that serves as most significant part of the target address
+when \f(CW\*(C`EICALL\*(C'\fR or \f(CW\*(C`EIJMP\*(C'\fR instructions are used.
+.PP
+Indirect jumps and calls on these devices are handled as follows and
+are subject to some limitations:
+.IP "\(bu" 4
+The compiler never sets \f(CW\*(C`EIND\*(C'\fR.
+.IP "\(bu" 4
+The startup code from libgcc never sets \f(CW\*(C`EIND\*(C'\fR.
+Notice that startup code is a blend of code from libgcc and avr-libc.
+For the impact of avr-libc on \f(CW\*(C`EIND\*(C'\fR, see the
+avr-libc\ user\ manual (\f(CW\*(C`http://nongnu.org/avr\-libc/user\-manual\*(C'\fR).
+.IP "\(bu" 4
+The compiler uses \f(CW\*(C`EIND\*(C'\fR implicitely in \f(CW\*(C`EICALL\*(C'\fR/\f(CW\*(C`EIJMP\*(C'\fR
+instructions or might read \f(CW\*(C`EIND\*(C'\fR directly.
+.IP "\(bu" 4
+The compiler assumes that \f(CW\*(C`EIND\*(C'\fR never changes during the startup
+code or run of the application. In particular, \f(CW\*(C`EIND\*(C'\fR is not
+saved/restored in function or interrupt service routine
+prologue/epilogue.
+.IP "\(bu" 4
+It is legitimate for user-specific startup code to set up \f(CW\*(C`EIND\*(C'\fR
+early, for example by means of initialization code located in
+section \f(CW\*(C`.init3\*(C'\fR, and thus prior to general startup code that
+initializes \s-1RAM\s0 and calls constructors.
+.IP "\(bu" 4
+For indirect calls to functions and computed goto, the linker will
+generate \fIstubs\fR. Stubs are jump pads sometimes also called
+\&\fItrampolines\fR. Thus, the indirect call/jump will jump to such a stub.
+The stub contains a direct jump to the desired address.
+.IP "\(bu" 4
+Stubs will be generated automatically by the linker if
+the following two conditions are met:
+.RS 4
+.ie n .IP "\-<The address of a label is taken by means of the ""gs"" modifier>" 4
+.el .IP "\-<The address of a label is taken by means of the \f(CWgs\fR modifier>" 4
+.IX Item "-<The address of a label is taken by means of the gs modifier>"
+(short for \fIgenerate stubs\fR) like so:
+.Sp
+.Vb 2
+\&        LDI r24, lo8(gs(<func>))
+\&        LDI r25, hi8(gs(<func>))
+.Ve
+.IP "\-<The final location of that label is in a code segment>" 4
+.IX Item "-<The final location of that label is in a code segment>"
+\&\fIoutside\fR the segment where the stubs are located.
+.RE
+.RS 4
+.RE
+.IP "\(bu" 4
+The compiler will emit such \f(CW\*(C`gs\*(C'\fR modifiers for code labels in the
+following situations:
+.RS 4
+.IP "\-<Taking address of a function or code label.>" 4
+.IX Item "-<Taking address of a function or code label.>"
+.PD 0
+.IP "\-<Computed goto.>" 4
+.IX Item "-<Computed goto.>"
+.IP "\-<If prologue-save function is used, see \fB\-mcall\-prologues\fR>" 4
+.IX Item "-<If prologue-save function is used, see -mcall-prologues>"
+.PD
+command line option.
+.IP "\-<Switch/case dispatch tables. If you do not want such dispatch>" 4
+.IX Item "-<Switch/case dispatch tables. If you do not want such dispatch>"
+tables you can specify the \fB\-fno\-jump\-tables\fR command line option.
+.IP "\-<C and \*(C+ constructors/destructors called during startup/shutdown.>" 4
+.IX Item "-<C and  constructors/destructors called during startup/shutdown.>"
+.PD 0
+.ie n .IP "\-<If the tools hit a ""gs()"" modifier explained above.>" 4
+.el .IP "\-<If the tools hit a \f(CWgs()\fR modifier explained above.>" 4
+.IX Item "-<If the tools hit a gs() modifier explained above.>"
+.RE
+.RS 4
+.RE
+.IP "\(bu" 4
+.PD
+The default linker script is arranged for code with \f(CW\*(C`EIND = 0\*(C'\fR.
+If code is supposed to work for a setup with \f(CW\*(C`EIND != 0\*(C'\fR, a custom
+linker script has to be used in order to place the sections whose
+name start with \f(CW\*(C`.trampolines\*(C'\fR into the segment where \f(CW\*(C`EIND\*(C'\fR
+points to.
+.IP "\(bu" 4
+Jumping to non-symbolic addresses like so is \fInot\fR supported:
+.Sp
+.Vb 5
+\&        int main (void)
+\&        {
+\&            /* Call function at word address 0x2 */
+\&            return ((int(*)(void)) 0x2)();
+\&        }
+.Ve
+.Sp
+Instead, a stub has to be set up:
+.Sp
+.Vb 3
+\&        int main (void)
+\&        {
+\&            extern int func_4 (void);
+\&        
+\&            /* Call function at byte address 0x4 */
+\&            return func_4();
+\&        }
+.Ve
+.Sp
+and the application be linked with \f(CW\*(C`\-Wl,\-\-defsym,func_4=0x4\*(C'\fR.
+Alternatively, \f(CW\*(C`func_4\*(C'\fR can be defined in the linker script.
+.PP
 \fIBlackfin Options\fR
 .IX Subsection "Blackfin Options"
 .IP "\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR]" 4
@@ -11557,6 +11698,11 @@
 .IX Item "corei7-avx"
 Intel Core i7 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1AVX\s0, \s-1AES\s0 and \s-1PCLMUL\s0 instruction set support.
+.IP "\fIcore-avx-i\fR" 4
+.IX Item "core-avx-i"
+Intel Core \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
+\&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1AVX\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1FSGSBASE\s0, \s-1RDRND\s0 and F16C instruction
+set support.
 .IP "\fIatom\fR" 4
 .IX Item "atom"
 Intel Atom \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0 and \s-1SSSE3\s0
@@ -16428,6 +16574,10 @@
 .PD
 With \fB\-mvis\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
 Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
+.IP "\fB\-mfix\-at697f\fR" 4
+.IX Item "-mfix-at697f"
+Enable the documented workaround for the single erratum of the Atmel \s-1AT697F\s0
+processor (which corresponds to erratum #13 of the \s-1AT697E\s0 processor).
 .PP
 These \fB\-m\fR options are supported in addition to the above
 on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
diff --git a/share/man/man1/arm-linux-androideabi-gcc.1 b/share/man/man1/arm-linux-androideabi-gcc.1
index 24f424c..6405bee 100644
--- a/share/man/man1/arm-linux-androideabi-gcc.1
+++ b/share/man/man1/arm-linux-androideabi-gcc.1
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GCC 1"
-.TH GCC 1 "2011-07-18" "gcc-4.6.x-google" "GNU"
+.TH GCC 1 "2012-01-06" "gcc-4.6.x-google" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -408,10 +408,12 @@
 \&\-fpmu\-profile\-generate=\fR\fIpmuoption\fR 
 \&\fB\-fpmu\-profile\-use=\fR\fIpmuoption\fR 
 \&\fB\-freciprocal\-math \-fregmove \-frename\-registers \-freorder\-blocks 
+\&\-frecord\-gcc\-switches\-in\-elf
 \&\-freorder\-blocks\-and\-partition \-freorder\-functions 
 \&\-frerun\-cse\-after\-loop \-freschedule\-modulo\-scheduled\-loops 
 \&\-fripa \-fripa\-disallow\-asm\-modules \-fripa\-disallow\-opt\-mismatch 
-\&\-fripa\-no\-promote\-always\-inline\-func \-fripa\-verbose \-frounding\-math 
+\&\-fripa\-no\-promote\-always\-inline\-func \-fripa\-verbose 
+\&\-fripa\-peel\-size\-limit \-fripa\-unroll\-size\-limit \-frounding\-math 
 \&\-fsched2\-use\-superblocks \-fsched\-pressure 
 \&\-fsched\-spec\-load \-fsched\-spec\-load\-dangerous 
 \&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB] \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] 
@@ -423,8 +425,8 @@
 \&\-fsel\-sched\-pipelining \-fsel\-sched\-pipelining\-outer\-loops 
 \&\-fsignaling\-nans \-fsingle\-precision\-constant \-fsplit\-ivs\-in\-unroller 
 \&\-fsplit\-wide\-types \-fstack\-protector \-fstack\-protector\-all 
-\&\-fstrict\-aliasing \-fstrict\-overflow \-fthread\-jumps \-ftracer 
-\&\-ftree\-bit\-ccp 
+\&\-fstack\-protector\-strong \-fstrict\-aliasing \-fstrict\-overflow 
+\&\-fthread\-jumps \-ftracer \-ftree\-bit\-ccp 
 \&\-ftree\-builtin\-call\-dce \-ftree\-ccp \-ftree\-ch \-ftree\-copy\-prop 
 \&\-ftree\-copyrename \-ftree\-dce \-ftree\-dominator\-opts \-ftree\-dse 
 \&\-ftree\-forwprop \-ftree\-fre \-ftree\-loop\-if\-convert 
@@ -901,7 +903,8 @@
 \&\-mlittle\-endian 
 \&\-mstack\-bias  \-mno\-stack\-bias 
 \&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
-\&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis\fR
+\&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis 
+\&\-mfix\-at697f\fR
 .Sp
 \&\fI\s-1SPU\s0 Options\fR
 \&\fB\-mwarn\-reloc \-merror\-reloc 
@@ -7061,8 +7064,8 @@
 bodies are read from these \s-1ELF\s0 sections and instantiated as if they
 had been part of the same translation unit.
 .Sp
-To use the link-timer optimizer, \fB\-flto\fR needs to be specified at
-compile time and during the final link.  For example,
+To use the link-time optimizer, \fB\-flto\fR needs to be specified at
+compile time and during the final link.  For example:
 .Sp
 .Vb 3
 \&        gcc \-c \-O2 \-flto foo.c
@@ -7070,25 +7073,25 @@
 \&        gcc \-o myprog \-flto \-O2 foo.o bar.o
 .Ve
 .Sp
-The first two invocations to \s-1GCC\s0 will save a bytecode representation
+The first two invocations to \s-1GCC\s0 save a bytecode representation
 of \s-1GIMPLE\s0 into special \s-1ELF\s0 sections inside \fIfoo.o\fR and
-\&\fIbar.o\fR.  The final invocation will read the \s-1GIMPLE\s0 bytecode from
-\&\fIfoo.o\fR and \fIbar.o\fR, merge the two files into a single
-internal image, and compile the result as usual.  Since both
+\&\fIbar.o\fR.  The final invocation reads the \s-1GIMPLE\s0 bytecode from
+\&\fIfoo.o\fR and \fIbar.o\fR, merges the two files into a single
+internal image, and compiles the result as usual.  Since both
 \&\fIfoo.o\fR and \fIbar.o\fR are merged into a single image, this
-causes all the inter-procedural analyses and optimizations in \s-1GCC\s0 to
+causes all the interprocedural analyses and optimizations in \s-1GCC\s0 to
 work across the two files as if they were a single one.  This means,
-for example, that the inliner will be able to inline functions in
+for example, that the inliner is able to inline functions in
 \&\fIbar.o\fR into functions in \fIfoo.o\fR and vice-versa.
 .Sp
-Another (simpler) way to enable link-time optimization is,
+Another (simpler) way to enable link-time optimization is:
 .Sp
 .Vb 1
 \&        gcc \-o myprog \-flto \-O2 foo.c bar.c
 .Ve
 .Sp
-The above will generate bytecode for \fIfoo.c\fR and \fIbar.c\fR,
-merge them together into a single \s-1GIMPLE\s0 representation and optimize
+The above generates bytecode for \fIfoo.c\fR and \fIbar.c\fR,
+merges them together into a single \s-1GIMPLE\s0 representation and optimizes
 them as usual to produce \fImyprog\fR.
 .Sp
 The only important thing to keep in mind is that to enable link-time
@@ -7098,30 +7101,22 @@
 To make whole program optimization effective, it is necessary to make
 certain whole program assumptions.  The compiler needs to know
 what functions and variables can be accessed by libraries and runtime
-outside of the link time optimized unit.  When supported by the linker,
-the linker plugin (see \fB\-fuse\-linker\-plugin\fR) passes to the
-compiler information about used and externally visible symbols.  When
+outside of the link-time optimized unit.  When supported by the linker,
+the linker plugin (see \fB\-fuse\-linker\-plugin\fR) passes information
+to the compiler about used and externally visible symbols.  When
 the linker plugin is not available, \fB\-fwhole\-program\fR should be
-used to allow the compiler to make these assumptions, which will lead
+used to allow the compiler to make these assumptions, which leads
 to more aggressive optimization decisions.
 .Sp
 Note that when a file is compiled with \fB\-flto\fR, the generated
-object file will be larger than a regular object file because it will
-contain \s-1GIMPLE\s0 bytecodes and the usual final code.  This means that
-object files with \s-1LTO\s0 information can be linked as a normal object
-file.  So, in the previous example, if the final link is done with
-.Sp
-.Vb 1
-\&        gcc \-o myprog foo.o bar.o
-.Ve
-.Sp
-The only difference will be that no inter-procedural optimizations
-will be applied to produce \fImyprog\fR.  The two object files
-\&\fIfoo.o\fR and \fIbar.o\fR will be simply sent to the regular
-linker.
+object file is larger than a regular object file because it 
+contains \s-1GIMPLE\s0 bytecodes and the usual final code.  This means that
+object files with \s-1LTO\s0 information can be linked as normal object
+files; if \fB\-flto\fR is not passed to the linker, no
+interprocedural optimizations are applied.
 .Sp
 Additionally, the optimization flags used to compile individual files
-are not necessarily related to those used at link-time.  For instance,
+are not necessarily related to those used at link time.  For instance,
 .Sp
 .Vb 3
 \&        gcc \-c \-O0 \-flto foo.c
@@ -7129,37 +7124,42 @@
 \&        gcc \-o myprog \-flto \-O3 foo.o bar.o
 .Ve
 .Sp
-This will produce individual object files with unoptimized assembler
-code, but the resulting binary \fImyprog\fR will be optimized at
-\&\fB\-O3\fR.  Now, if the final binary is generated without
-\&\fB\-flto\fR, then \fImyprog\fR will not be optimized.
+This produces individual object files with unoptimized assembler
+code, but the resulting binary \fImyprog\fR is optimized at
+\&\fB\-O3\fR.  If, instead, the final binary is generated without
+\&\fB\-flto\fR, then \fImyprog\fR is not optimized.
 .Sp
-When producing the final binary with \fB\-flto\fR, \s-1GCC\s0 will only
-apply link-time optimizations to those files that contain bytecode.
+When producing the final binary with \fB\-flto\fR, \s-1GCC\s0 only
+applies link-time optimizations to those files that contain bytecode.
 Therefore, you can mix and match object files and libraries with
-\&\s-1GIMPLE\s0 bytecodes and final object code.  \s-1GCC\s0 will automatically select
+\&\s-1GIMPLE\s0 bytecodes and final object code.  \s-1GCC\s0 automatically selects
 which files to optimize in \s-1LTO\s0 mode and which files to link without
 further processing.
 .Sp
-There are some code generation flags that \s-1GCC\s0 will preserve when
+There are some code generation flags that \s-1GCC\s0 preserves when
 generating bytecodes, as they need to be used during the final link
 stage.  Currently, the following options are saved into the \s-1GIMPLE\s0
 bytecode files: \fB\-fPIC\fR, \fB\-fcommon\fR and all the
 \&\fB\-m\fR target flags.
 .Sp
-At link time, these options are read-in and reapplied.  Note that the
-current implementation makes no attempt at recognizing conflicting
-values for these options.  If two or more files have a conflicting
-value (e.g., one file is compiled with \fB\-fPIC\fR and another
-isn't), the compiler will simply use the last value read from the
-bytecode files.  It is recommended, then, that all the files
-participating in the same link be compiled with the same options.
+At link time, these options are read in and reapplied.  Note that the
+current implementation makes no attempt to recognize conflicting
+values for these options.  If different files have conflicting option
+values (e.g., one file is compiled with \fB\-fPIC\fR and another
+isn't), the compiler simply uses the last value read from the
+bytecode files.  It is recommended, then, that you compile all the files
+participating in the same link with the same options.
+.Sp
+If \s-1LTO\s0 encounters objects with C linkage declared with incompatible
+types in separate translation units to be linked together (undefined
+behavior according to \s-1ISO\s0 C99 6.2.7), a non-fatal diagnostic may be
+issued.  The behavior is still undefined at runtime.
 .Sp
 Another feature of \s-1LTO\s0 is that it is possible to apply interprocedural
 optimizations on files written in different languages.  This requires
-some support in the language front end.  Currently, the C, \*(C+ and
+support in the language front end.  Currently, the C, \*(C+ and
 Fortran front ends are capable of emitting \s-1GIMPLE\s0 bytecodes, so
-something like this should work
+something like this should work:
 .Sp
 .Vb 4
 \&        gcc \-c \-flto foo.c
@@ -7171,49 +7171,43 @@
 Notice that the final link is done with \fBg++\fR to get the \*(C+
 runtime libraries and \fB\-lgfortran\fR is added to get the Fortran
 runtime libraries.  In general, when mixing languages in \s-1LTO\s0 mode, you
-should use the same link command used when mixing languages in a
-regular (non-LTO) compilation.  This means that if your build process
-was mixing languages before, all you need to add is \fB\-flto\fR to
+should use the same link command options as when mixing languages in a
+regular (non-LTO) compilation; all you need to add is \fB\-flto\fR to
 all the compile and link commands.
 .Sp
-If \s-1LTO\s0 encounters objects with C linkage declared with incompatible
-types in separate translation units to be linked together (undefined
-behavior according to \s-1ISO\s0 C99 6.2.7), a non-fatal diagnostic may be
-issued.  The behavior is still undefined at runtime.
-.Sp
 If object files containing \s-1GIMPLE\s0 bytecode are stored in a library archive, say
 \&\fIlibfoo.a\fR, it is possible to extract and use them in an \s-1LTO\s0 link if you
-are using a linker with linker plugin support.  To enable this feature, use
-the flag \fB\-fuse\-linker\-plugin\fR at link-time:
+are using a linker with plugin support.  To enable this feature, use
+the flag \fB\-fuse\-linker\-plugin\fR at link time:
 .Sp
 .Vb 1
 \&        gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo
 .Ve
 .Sp
-With the linker plugin enabled, the linker will extract the needed
-\&\s-1GIMPLE\s0 files from \fIlibfoo.a\fR and pass them on to the running \s-1GCC\s0
+With the linker plugin enabled, the linker extracts the needed
+\&\s-1GIMPLE\s0 files from \fIlibfoo.a\fR and passes them on to the running \s-1GCC\s0
 to make them part of the aggregated \s-1GIMPLE\s0 image to be optimized.
 .Sp
-If you are not using a linker with linker plugin support and/or do not 
-enable linker plugin then the objects inside \fIlibfoo.a\fR
-will be extracted and linked as usual, but they will not participate
+If you are not using a linker with plugin support and/or do not
+enable the linker plugin, then the objects inside \fIlibfoo.a\fR
+are extracted and linked as usual, but they do not participate
 in the \s-1LTO\s0 optimization process.
 .Sp
-Link time optimizations do not require the presence of the whole program to
+Link-time optimizations do not require the presence of the whole program to
 operate.  If the program does not require any symbols to be exported, it is
-possible to combine \fB\-flto\fR and with \fB\-fwhole\-program\fR to allow
+possible to combine \fB\-flto\fR and \fB\-fwhole\-program\fR to allow
 the interprocedural optimizers to use more aggressive assumptions which may
 lead to improved optimization opportunities. 
 Use of \fB\-fwhole\-program\fR is not needed when linker plugin is
 active (see \fB\-fuse\-linker\-plugin\fR).
 .Sp
-Regarding portability: the current implementation of \s-1LTO\s0 makes no
-attempt at generating bytecode that can be ported between different
+The current implementation of \s-1LTO\s0 makes no
+attempt to generate bytecode that is portable between different
 types of hosts.  The bytecode files are versioned and there is a
 strict version check, so bytecode files generated in one version of
 \&\s-1GCC\s0 will not work with an older/newer version of \s-1GCC\s0.
 .Sp
-Link time optimization does not play well with generating debugging
+Link-time optimization does not work well with generation of debugging
 information.  Combining \fB\-flto\fR with
 \&\fB\-g\fR is currently experimental and expected to produce wrong
 results.
@@ -7227,14 +7221,14 @@
 You can also specify \fB\-flto=jobserver\fR to use \s-1GNU\s0 make's 
 job server mode to determine the number of parallel jobs. This 
 is useful when the Makefile calling \s-1GCC\s0 is already executing in parallel.
-The parent Makefile will need a \fB+\fR prepended to the command recipe
-for this to work. This will likely only work if \fB\s-1MAKE\s0\fR is 
+You must prepend a \fB+\fR to the command recipe in the parent Makefile
+for this to work.  This option likely only works if \fB\s-1MAKE\s0\fR is
 \&\s-1GNU\s0 make.
 .Sp
 This option is disabled by default.
 .IP "\fB\-flto\-partition=\fR\fIalg\fR" 4
 .IX Item "-flto-partition=alg"
-Specify the partitioning algorithm used by the link time optimizer.
+Specify the partitioning algorithm used by the link-time optimizer.
 The value is either \f(CW\*(C`1to1\*(C'\fR to specify a partitioning mirroring
 the original source files or \f(CW\*(C`balanced\*(C'\fR to specify partitioning
 into equally sized chunks (whenever possible).  Specifying \f(CW\*(C`none\*(C'\fR
@@ -7251,27 +7245,29 @@
 .IP "\fB\-flto\-report\fR" 4
 .IX Item "-flto-report"
 Prints a report with internal details on the workings of the link-time
-optimizer.  The contents of this report vary from version to version,
-it is meant to be useful to \s-1GCC\s0 developers when processing object
+optimizer.  The contents of this report vary from version to version.
+It is meant to be useful to \s-1GCC\s0 developers when processing object
 files in \s-1LTO\s0 mode (via \fB\-flto\fR).
 .Sp
 Disabled by default.
 .IP "\fB\-fuse\-linker\-plugin\fR" 4
 .IX Item "-fuse-linker-plugin"
-Enables the use of linker plugin during link time optimization.  This option
-relies on the linker plugin support in linker that is available in gold
+Enables the use of a linker plugin during link-time optimization.  This
+option relies on the linker plugin support in linker that is available in gold
 or in \s-1GNU\s0 ld 2.21 or newer.
 .Sp
-This option enables the extraction of object files with \s-1GIMPLE\s0 bytecode out of
-library archives. This improves the quality of optimization by exposing more
-code the the link time optimizer.  This information specify what symbols 
-can be accessed externally (by non-LTO object or during dynamic linking).
-Resulting code quality improvements on binaries (and shared libraries that do
-use hidden visibility) is similar to \f(CW\*(C`\-fwhole\-program\*(C'\fR.  See
-\&\fB\-flto\fR for a description on the effect of this flag and how to use it.
+This option enables the extraction of object files with \s-1GIMPLE\s0 bytecode out
+of library archives. This improves the quality of optimization by exposing
+more code to the link-time optimizer.  This information specifies what
+symbols can be accessed externally (by non-LTO object or during dynamic
+linking).  Resulting code quality improvements on binaries (and shared
+libraries that use hidden visibility) are similar to \f(CW\*(C`\-fwhole\-program\*(C'\fR.
+See \fB\-flto\fR for a description of the effect of this flag and how to
+use it.
 .Sp
-Enabled by default when \s-1LTO\s0 support in \s-1GCC\s0 is enabled and \s-1GCC\s0 was compiled
-with a linker supporting plugins (\s-1GNU\s0 ld 2.21 or newer or gold).
+This option is enabled by default when \s-1LTO\s0 support in \s-1GCC\s0 is enabled
+and \s-1GCC\s0 was configured for use with
+a linker supporting plugins (\s-1GNU\s0 ld 2.21 or newer or gold).
 .IP "\fB\-fcompare\-elim\fR" 4
 .IX Item "-fcompare-elim"
 After register allocation and post-register allocation instruction splitting,
@@ -7406,6 +7402,18 @@
 .IX Item "-fripa-verbose"
 Enable printing of verbose information about dynamic inter-procedural optimizations.
 This is used in conjunction with the \fB\-fripa\fR.
+.IP "\fB\-fripa\-peel\-size\-limit\fR" 4
+.IX Item "-fripa-peel-size-limit"
+Limit loop peeling of non-const non-FP loops in a \s-1LIPO\s0 compilation under estimates
+of a large code footprint. Enabled by default under \fB\-fripa\fR. Code size
+estimation and thresholds are controlled by the \fBcodesize-hotness-threshold\fR
+and \fBunrollpeel-codesize-threshold\fR parameters.
+.IP "\fB\-fripa\-unroll\-size\-limit\fR" 4
+.IX Item "-fripa-unroll-size-limit"
+Limit loop unrolling of non-const non-FP loops in a \s-1LIPO\s0 compilation under estimates
+of a large code footprint. Enabled by default under \fB\-fripa\fR. Code size
+estimation and thresholds are controlled by the \fBcodesize-hotness-threshold\fR
+and \fBunrollpeel-codesize-threshold\fR parameters.
 .IP "\fB\-fcallgraph\-profiles\-sections\fR" 4
 .IX Item "-fcallgraph-profiles-sections"
 Emit call graph edge profile counts in .note.callgraph.text sections. This is
@@ -7414,6 +7422,10 @@
 number of times it is called. The params variable
 \&\*(L"note-cgraph-section-edge-threshold\*(R" can be used to only list edges above a
 certain threshold.
+.IP "\fB\-frecord\-gcc\-switches\-in\-elf\fR" 4
+.IX Item "-frecord-gcc-switches-in-elf"
+Record the command line options in the .gnu.switches.text elf section for sample
+based \s-1LIPO\s0 to do module grouping.
 .PP
 The following options control compiler behavior regarding floating
 point arithmetic.  These options trade off between speed and
@@ -7765,6 +7777,11 @@
 .IP "\fB\-fstack\-protector\-all\fR" 4
 .IX Item "-fstack-protector-all"
 Like \fB\-fstack\-protector\fR except that all functions are protected.
+.IP "\fB\-fstack\-protector\-strong\fR" 4
+.IX Item "-fstack-protector-strong"
+Like \fB\-fstack\-protector\fR but includes additional functions to be
+protected \- those that have local array definitions, or have references to
+local frame addresses.
 .IP "\fB\-fsection\-anchors\fR" 4
 .IX Item "-fsection-anchors"
 Try to reduce the number of symbolic address calculations by using
@@ -8088,6 +8105,13 @@
 .IP "\fBmax-completely-peel-loop-nest-depth\fR" 4
 .IX Item "max-completely-peel-loop-nest-depth"
 The maximum depth of a loop nest suitable for complete peeling.
+.IP "\fBcodesize-hotness-threshold\fR" 4
+.IX Item "codesize-hotness-threshold"
+The minimum profile count of basic blocks to look at when estimating
+the code size footprint of the call graph in a \s-1LIPO\s0 compile.
+.IP "\fBunrollpeel-codesize-threshold\fR" 4
+.IX Item "unrollpeel-codesize-threshold"
+Maximum \s-1LIPO\s0 code size footprint estimate for loop unrolling and peeling.
 .IP "\fBmax-unswitch-insns\fR" 4
 .IX Item "max-unswitch-insns"
 The maximum number of insns of an unswitched loop.
@@ -10028,6 +10052,123 @@
 comply to the C standards, but it will provide you with smaller code
 size.
 .PP
+\f(CW\*(C`EIND\*(C'\fR and Devices with more than 128k Bytes of Flash
+.IX Subsection "EIND and Devices with more than 128k Bytes of Flash"
+.PP
+Pointers in the implementation are 16 bits wide.
+The address of a function or label is represented as word address so
+that indirect jumps and calls can address any code address in the
+range of 64k words.
+.PP
+In order to faciliate indirect jump on devices with more than 128k
+bytes of program memory space, there is a special function register called
+\&\f(CW\*(C`EIND\*(C'\fR that serves as most significant part of the target address
+when \f(CW\*(C`EICALL\*(C'\fR or \f(CW\*(C`EIJMP\*(C'\fR instructions are used.
+.PP
+Indirect jumps and calls on these devices are handled as follows and
+are subject to some limitations:
+.IP "\(bu" 4
+The compiler never sets \f(CW\*(C`EIND\*(C'\fR.
+.IP "\(bu" 4
+The startup code from libgcc never sets \f(CW\*(C`EIND\*(C'\fR.
+Notice that startup code is a blend of code from libgcc and avr-libc.
+For the impact of avr-libc on \f(CW\*(C`EIND\*(C'\fR, see the
+avr-libc\ user\ manual (\f(CW\*(C`http://nongnu.org/avr\-libc/user\-manual\*(C'\fR).
+.IP "\(bu" 4
+The compiler uses \f(CW\*(C`EIND\*(C'\fR implicitely in \f(CW\*(C`EICALL\*(C'\fR/\f(CW\*(C`EIJMP\*(C'\fR
+instructions or might read \f(CW\*(C`EIND\*(C'\fR directly.
+.IP "\(bu" 4
+The compiler assumes that \f(CW\*(C`EIND\*(C'\fR never changes during the startup
+code or run of the application. In particular, \f(CW\*(C`EIND\*(C'\fR is not
+saved/restored in function or interrupt service routine
+prologue/epilogue.
+.IP "\(bu" 4
+It is legitimate for user-specific startup code to set up \f(CW\*(C`EIND\*(C'\fR
+early, for example by means of initialization code located in
+section \f(CW\*(C`.init3\*(C'\fR, and thus prior to general startup code that
+initializes \s-1RAM\s0 and calls constructors.
+.IP "\(bu" 4
+For indirect calls to functions and computed goto, the linker will
+generate \fIstubs\fR. Stubs are jump pads sometimes also called
+\&\fItrampolines\fR. Thus, the indirect call/jump will jump to such a stub.
+The stub contains a direct jump to the desired address.
+.IP "\(bu" 4
+Stubs will be generated automatically by the linker if
+the following two conditions are met:
+.RS 4
+.ie n .IP "\-<The address of a label is taken by means of the ""gs"" modifier>" 4
+.el .IP "\-<The address of a label is taken by means of the \f(CWgs\fR modifier>" 4
+.IX Item "-<The address of a label is taken by means of the gs modifier>"
+(short for \fIgenerate stubs\fR) like so:
+.Sp
+.Vb 2
+\&        LDI r24, lo8(gs(<func>))
+\&        LDI r25, hi8(gs(<func>))
+.Ve
+.IP "\-<The final location of that label is in a code segment>" 4
+.IX Item "-<The final location of that label is in a code segment>"
+\&\fIoutside\fR the segment where the stubs are located.
+.RE
+.RS 4
+.RE
+.IP "\(bu" 4
+The compiler will emit such \f(CW\*(C`gs\*(C'\fR modifiers for code labels in the
+following situations:
+.RS 4
+.IP "\-<Taking address of a function or code label.>" 4
+.IX Item "-<Taking address of a function or code label.>"
+.PD 0
+.IP "\-<Computed goto.>" 4
+.IX Item "-<Computed goto.>"
+.IP "\-<If prologue-save function is used, see \fB\-mcall\-prologues\fR>" 4
+.IX Item "-<If prologue-save function is used, see -mcall-prologues>"
+.PD
+command line option.
+.IP "\-<Switch/case dispatch tables. If you do not want such dispatch>" 4
+.IX Item "-<Switch/case dispatch tables. If you do not want such dispatch>"
+tables you can specify the \fB\-fno\-jump\-tables\fR command line option.
+.IP "\-<C and \*(C+ constructors/destructors called during startup/shutdown.>" 4
+.IX Item "-<C and  constructors/destructors called during startup/shutdown.>"
+.PD 0
+.ie n .IP "\-<If the tools hit a ""gs()"" modifier explained above.>" 4
+.el .IP "\-<If the tools hit a \f(CWgs()\fR modifier explained above.>" 4
+.IX Item "-<If the tools hit a gs() modifier explained above.>"
+.RE
+.RS 4
+.RE
+.IP "\(bu" 4
+.PD
+The default linker script is arranged for code with \f(CW\*(C`EIND = 0\*(C'\fR.
+If code is supposed to work for a setup with \f(CW\*(C`EIND != 0\*(C'\fR, a custom
+linker script has to be used in order to place the sections whose
+name start with \f(CW\*(C`.trampolines\*(C'\fR into the segment where \f(CW\*(C`EIND\*(C'\fR
+points to.
+.IP "\(bu" 4
+Jumping to non-symbolic addresses like so is \fInot\fR supported:
+.Sp
+.Vb 5
+\&        int main (void)
+\&        {
+\&            /* Call function at word address 0x2 */
+\&            return ((int(*)(void)) 0x2)();
+\&        }
+.Ve
+.Sp
+Instead, a stub has to be set up:
+.Sp
+.Vb 3
+\&        int main (void)
+\&        {
+\&            extern int func_4 (void);
+\&        
+\&            /* Call function at byte address 0x4 */
+\&            return func_4();
+\&        }
+.Ve
+.Sp
+and the application be linked with \f(CW\*(C`\-Wl,\-\-defsym,func_4=0x4\*(C'\fR.
+Alternatively, \f(CW\*(C`func_4\*(C'\fR can be defined in the linker script.
+.PP
 \fIBlackfin Options\fR
 .IX Subsection "Blackfin Options"
 .IP "\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR]" 4
@@ -11557,6 +11698,11 @@
 .IX Item "corei7-avx"
 Intel Core i7 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1AVX\s0, \s-1AES\s0 and \s-1PCLMUL\s0 instruction set support.
+.IP "\fIcore-avx-i\fR" 4
+.IX Item "core-avx-i"
+Intel Core \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
+\&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1AVX\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1FSGSBASE\s0, \s-1RDRND\s0 and F16C instruction
+set support.
 .IP "\fIatom\fR" 4
 .IX Item "atom"
 Intel Atom \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0 and \s-1SSSE3\s0
@@ -16428,6 +16574,10 @@
 .PD
 With \fB\-mvis\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
 Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
+.IP "\fB\-mfix\-at697f\fR" 4
+.IX Item "-mfix-at697f"
+Enable the documented workaround for the single erratum of the Atmel \s-1AT697F\s0
+processor (which corresponds to erratum #13 of the \s-1AT697E\s0 processor).
 .PP
 These \fB\-m\fR options are supported in addition to the above
 on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
diff --git a/share/man/man1/arm-linux-androideabi-gcov.1 b/share/man/man1/arm-linux-androideabi-gcov.1
index 59b37af..810d015 100644
--- a/share/man/man1/arm-linux-androideabi-gcov.1
+++ b/share/man/man1/arm-linux-androideabi-gcov.1
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GCOV 1"
-.TH GCOV 1 "2011-07-18" "gcc-4.6.x-google" "GNU"
+.TH GCOV 1 "2012-01-06" "gcc-4.6.x-google" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/share/man/man7/fsf-funding.7 b/share/man/man7/fsf-funding.7
index 627c7f1..403cc28 100644
--- a/share/man/man7/fsf-funding.7
+++ b/share/man/man7/fsf-funding.7
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "FSF-FUNDING 7"
-.TH FSF-FUNDING 7 "2011-07-18" "gcc-4.6.x-google" "GNU"
+.TH FSF-FUNDING 7 "2012-01-06" "gcc-4.6.x-google" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/share/man/man7/gfdl.7 b/share/man/man7/gfdl.7
index c25dec0..ef5759d 100644
--- a/share/man/man7/gfdl.7
+++ b/share/man/man7/gfdl.7
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GFDL 7"
-.TH GFDL 7 "2011-07-18" "gcc-4.6.x-google" "GNU"
+.TH GFDL 7 "2012-01-06" "gcc-4.6.x-google" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/share/man/man7/gpl.7 b/share/man/man7/gpl.7
index 9ce8bfc..740571d 100644
--- a/share/man/man7/gpl.7
+++ b/share/man/man7/gpl.7
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GPL 7"
-.TH GPL 7 "2011-07-18" "gcc-4.6.x-google" "GNU"
+.TH GPL 7 "2012-01-06" "gcc-4.6.x-google" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
