diff --git a/NOTICE b/NOTICE
deleted file mode 120000
index d24842f..0000000
--- a/NOTICE
+++ /dev/null
@@ -1 +0,0 @@
-COPYING
\ No newline at end of file
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..623b625
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/SOURCES b/SOURCES
deleted file mode 100644
index 4093864..0000000
--- a/SOURCES
+++ /dev/null
@@ -1,21 +0,0 @@
-toolchain/build.git                    f8db3f1d0824da5315df3415814ba76108157796 Static link ld.gold by mingw to avoid dependencies on libwinpthread-1.dll
-toolchain/gmp.git                      e6b9669dafc6a5f83c80b4b4176359b78bccdc90 Add gmp-5.0.5.tar.bz2
-toolchain/mpfr.git                     bfcf1bfa38469208aaad8873cd4c68781061d90f add mpfr-3.1.1.tar.bz2
-toolchain/mpc.git                      835d16e92eed875638a8b5d552034c3b1aae045b add mpc-1.0.1.tar.gz
-toolchain/cloog.git                    98972d5434ffcb4d11d2c81a46600e9a1cda9110 MinGW-w64 build fix (lacks ffs declaration)
-toolchain/isl.git                      b05d4572958c5d497da793f3317084bab90c3033 add isl-0.11.1.tar.bz2 needed by GCC 4.8 with graphite
-toolchain/ppl.git                      8ba1875b4c5341d902321761022a6d2a0b5b19a4 add ppl-1.0.tar.bz2
-toolchain/expat.git                    40172a0ae9d40a068f1e1a48ffcf6a1ccf765ed5 expat package for building gdb-7.3
-toolchain/binutils.git                 c39479f4ab4d372b518957871e1f205a03e7c3d6 Fix darwin build
-toolchain/gcc.git                      00eea35e8107e50c4a5f569385646ae09f4e47fc Fix bug where force_const_mem may return NULL_RTX.
-toolchain/gdb.git                      d54e4b7af5c45d4bcde6f65e5dc44c821739740f Misc gdb-7.7 fixes for Android
-toolchain/python.git                   0d4194853e08d3244931523470331c00dfb94863 Fix python build inc_dirs[] and lib_dirs[] for linux/darwin
-toolchain/perl.git                     1121daca35c6c692602621eab28d4de19f0b347d Add -Dcc_as_ld to configure
-toolchain/mclinker.git                 d20e247caf801ae6418e4226a19dd98719a7af75 Fix comparison between signed and unsigned integer expressions [-Werror=sign-compare].
-toolchain/yasm.git                     87c09baff80ca5bbe938392d8f320e621707f317 test commit
-toolchain/clang.git (release_36)       e30a03d356dfe6676108b25101af26ed231c064e Add NEON support to x86_64
-toolchain/llvm.git (release_36)        9e3f281960602294536cbe521c60e350b026d99a [X86] Always return the sret parameter in eax/rax, even on 32-bit
-toolchain/compiler-rt.git (release_36) e55135c14b0b8a5b5e77849f7ca8145009e7e635 Remove invalid const qualifier for r0, since it is written by svc.
-toolchain/clang.git (release_35)       a492fd6f6fb31fae2061071380220ad7ed4bb70d Add NEON support to x86_64
-toolchain/llvm.git (release_35)        a3ebbc54575b8a9ca280cb3587bb90bddd34352c Merge "[3.5] writable .gcc_except_table for mips[64]" into release_35
-toolchain/compiler-rt.git (release_35) 69e1e46d2b03c4a8d573120d8f202f4367930eb1 Do not define CRT_HAS_128BIT for MIPS64
diff --git a/bin/mips64el-linux-android-addr2line b/bin/mips64el-linux-android-addr2line
index 76e0b4c..c84925f 100755
--- a/bin/mips64el-linux-android-addr2line
+++ b/bin/mips64el-linux-android-addr2line
Binary files differ
diff --git a/bin/mips64el-linux-android-ar b/bin/mips64el-linux-android-ar
index 33c07b8..f09f01e 100755
--- a/bin/mips64el-linux-android-ar
+++ b/bin/mips64el-linux-android-ar
Binary files differ
diff --git a/bin/mips64el-linux-android-as b/bin/mips64el-linux-android-as
index d1670bf..acad067 100755
--- a/bin/mips64el-linux-android-as
+++ b/bin/mips64el-linux-android-as
Binary files differ
diff --git a/bin/mips64el-linux-android-c++filt b/bin/mips64el-linux-android-c++filt
index 22ef6e1..04e3a97 100755
--- a/bin/mips64el-linux-android-c++filt
+++ b/bin/mips64el-linux-android-c++filt
Binary files differ
diff --git a/bin/mips64el-linux-android-cpp b/bin/mips64el-linux-android-cpp
index e796e3c..808f59a 100755
--- a/bin/mips64el-linux-android-cpp
+++ b/bin/mips64el-linux-android-cpp
Binary files differ
diff --git a/bin/mips64el-linux-android-elfedit b/bin/mips64el-linux-android-elfedit
index 9bc3f22..6457c4e 100755
--- a/bin/mips64el-linux-android-elfedit
+++ b/bin/mips64el-linux-android-elfedit
Binary files differ
diff --git a/bin/mips64el-linux-android-g++ b/bin/mips64el-linux-android-g++
index ec784c4..de657c2 100755
--- a/bin/mips64el-linux-android-g++
+++ b/bin/mips64el-linux-android-g++
Binary files differ
diff --git a/bin/mips64el-linux-android-gcc b/bin/mips64el-linux-android-gcc
index 7356c64..b6ce32b 100755
--- a/bin/mips64el-linux-android-gcc
+++ b/bin/mips64el-linux-android-gcc
Binary files differ
diff --git a/bin/mips64el-linux-android-gcc-ar b/bin/mips64el-linux-android-gcc-ar
index 9173a7e..13361b1 100755
--- a/bin/mips64el-linux-android-gcc-ar
+++ b/bin/mips64el-linux-android-gcc-ar
Binary files differ
diff --git a/bin/mips64el-linux-android-gcc-nm b/bin/mips64el-linux-android-gcc-nm
index 71d6c2a..d392d21 100755
--- a/bin/mips64el-linux-android-gcc-nm
+++ b/bin/mips64el-linux-android-gcc-nm
Binary files differ
diff --git a/bin/mips64el-linux-android-gcc-ranlib b/bin/mips64el-linux-android-gcc-ranlib
index 382ed70..fb2084a 100755
--- a/bin/mips64el-linux-android-gcc-ranlib
+++ b/bin/mips64el-linux-android-gcc-ranlib
Binary files differ
diff --git a/bin/mips64el-linux-android-gcov b/bin/mips64el-linux-android-gcov
index 349e4ee..3bb8cc9 100755
--- a/bin/mips64el-linux-android-gcov
+++ b/bin/mips64el-linux-android-gcov
Binary files differ
diff --git a/bin/mips64el-linux-android-gcov-tool b/bin/mips64el-linux-android-gcov-tool
index 0d7b806..5d9671a 100755
--- a/bin/mips64el-linux-android-gcov-tool
+++ b/bin/mips64el-linux-android-gcov-tool
Binary files differ
diff --git a/bin/mips64el-linux-android-gdb b/bin/mips64el-linux-android-gdb
deleted file mode 100755
index 346fd65..0000000
--- a/bin/mips64el-linux-android-gdb
+++ /dev/null
Binary files differ
diff --git a/bin/mips64el-linux-android-gprof b/bin/mips64el-linux-android-gprof
index 906f4e5..12b96fa 100755
--- a/bin/mips64el-linux-android-gprof
+++ b/bin/mips64el-linux-android-gprof
Binary files differ
diff --git a/bin/mips64el-linux-android-ld.bfd b/bin/mips64el-linux-android-ld.bfd
index a61c498..b3c137b 100755
--- a/bin/mips64el-linux-android-ld.bfd
+++ b/bin/mips64el-linux-android-ld.bfd
Binary files differ
diff --git a/bin/mips64el-linux-android-ld.mcld b/bin/mips64el-linux-android-ld.mcld
deleted file mode 100755
index 4df6dde..0000000
--- a/bin/mips64el-linux-android-ld.mcld
+++ /dev/null
Binary files differ
diff --git a/bin/mips64el-linux-android-nm b/bin/mips64el-linux-android-nm
index f645d5f..c19436d 100755
--- a/bin/mips64el-linux-android-nm
+++ b/bin/mips64el-linux-android-nm
Binary files differ
diff --git a/bin/mips64el-linux-android-objcopy b/bin/mips64el-linux-android-objcopy
index 3a979b3..ef481aa 100755
--- a/bin/mips64el-linux-android-objcopy
+++ b/bin/mips64el-linux-android-objcopy
Binary files differ
diff --git a/bin/mips64el-linux-android-objdump b/bin/mips64el-linux-android-objdump
index 336e42b..2e9b547 100755
--- a/bin/mips64el-linux-android-objdump
+++ b/bin/mips64el-linux-android-objdump
Binary files differ
diff --git a/bin/mips64el-linux-android-ranlib b/bin/mips64el-linux-android-ranlib
index 66faaee..7729dd1 100755
--- a/bin/mips64el-linux-android-ranlib
+++ b/bin/mips64el-linux-android-ranlib
Binary files differ
diff --git a/bin/mips64el-linux-android-readelf b/bin/mips64el-linux-android-readelf
index 27d4b2f..0ee5a5e 100755
--- a/bin/mips64el-linux-android-readelf
+++ b/bin/mips64el-linux-android-readelf
Binary files differ
diff --git a/bin/mips64el-linux-android-size b/bin/mips64el-linux-android-size
index 18d75f9..cd42a1f 100755
--- a/bin/mips64el-linux-android-size
+++ b/bin/mips64el-linux-android-size
Binary files differ
diff --git a/bin/mips64el-linux-android-strings b/bin/mips64el-linux-android-strings
index c227329..68b59fe 100755
--- a/bin/mips64el-linux-android-strings
+++ b/bin/mips64el-linux-android-strings
Binary files differ
diff --git a/bin/mips64el-linux-android-strip b/bin/mips64el-linux-android-strip
index 2232691..6818ddb 100755
--- a/bin/mips64el-linux-android-strip
+++ b/bin/mips64el-linux-android-strip
Binary files differ
diff --git a/include/gdb/jit-reader.h b/include/gdb/jit-reader.h
deleted file mode 100644
index e9599a2..0000000
--- a/include/gdb/jit-reader.h
+++ /dev/null
@@ -1,346 +0,0 @@
-/* JIT declarations for GDB, the GNU Debugger.
-
-   Copyright (C) 2011-2014 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef GDB_JIT_READER_H
-#define GDB_JIT_READER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Versioning information.  See gdb_reader_funcs.  */
-
-#define GDB_READER_INTERFACE_VERSION 1
-
-/* Readers must be released under a GPL compatible license.  To
-   declare that the reader is indeed released under a GPL compatible
-   license, invoke the macro GDB_DECLARE_GPL_COMPATIBLE in a source
-   file.  */
-
-#ifdef __cplusplus
-#define GDB_DECLARE_GPL_COMPATIBLE_READER       \
-  extern "C" {                                  \
-  extern int plugin_is_GPL_compatible (void);   \
-  extern int plugin_is_GPL_compatible (void)    \
-  {                                             \
-    return 0;                                   \
-  }                                             \
-  }
-
-#else
-
-#define GDB_DECLARE_GPL_COMPATIBLE_READER       \
-  extern int plugin_is_GPL_compatible (void);   \
-  extern int plugin_is_GPL_compatible (void)    \
-  {                                             \
-    return 0;                                   \
-  }
-
-#endif
-
-/* Represents an address on the target system.  */
-
-typedef unsigned long GDB_CORE_ADDR;
-
-/* Return status codes.  */
-
-enum gdb_status {
-  GDB_FAIL = 0,
-  GDB_SUCCESS = 1
-};
-
-struct gdb_object;
-struct gdb_symtab;
-struct gdb_block;
-struct gdb_symbol_callbacks;
-
-/* An array of these are used to represent a map from code addresses to line
-   numbers in the source file.  */
-
-struct gdb_line_mapping
-{
-  int line;
-  GDB_CORE_ADDR pc;
-};
-
-/* Create a new GDB code object.  Each code object can have one or
-   more symbol tables, each representing a compiled source file.  */
-
-typedef struct gdb_object *(gdb_object_open) (struct gdb_symbol_callbacks *cb);
-
-/* The callback used to create new symbol table.  CB is the
-   gdb_symbol_callbacks which the structure is part of.  FILE_NAME is
-   an (optionally NULL) file name to associate with this new symbol
-   table.
-
-   Returns a new instance to gdb_symtab that can later be passed to
-   gdb_block_new, gdb_symtab_add_line_mapping and gdb_symtab_close.  */
-
-typedef struct gdb_symtab *(gdb_symtab_open) (struct gdb_symbol_callbacks *cb,
-                                              struct gdb_object *obj,
-                                              const char *file_name);
-
-/* Creates a new block in a given symbol table.  A symbol table is a
-   forest of blocks, each block representing an code address range and
-   a corresponding (optionally NULL) NAME.  In case the block
-   corresponds to a function, the NAME passed should be the name of
-   the function.
-
-   If the new block to be created is a child of (i.e. is nested in)
-   another block, the parent block can be passed in PARENT.  SYMTAB is
-   the symbol table the new block is to belong in.  BEGIN, END is the
-   code address range the block corresponds to.
-
-   Returns a new instance of gdb_block, which, as of now, has no use.
-   Note that the gdb_block returned must not be freed by the
-   caller.  */
-
-typedef struct gdb_block *(gdb_block_open) (struct gdb_symbol_callbacks *cb,
-                                            struct gdb_symtab *symtab,
-                                            struct gdb_block *parent,
-                                            GDB_CORE_ADDR begin,
-                                            GDB_CORE_ADDR end,
-                                            const char *name);
-
-/* Adds a PC to line number mapping for the symbol table SYMTAB.
-   NLINES is the number of elements in LINES, each element
-   corresponding to one (PC, line) pair.  */
-
-typedef void (gdb_symtab_add_line_mapping) (struct gdb_symbol_callbacks *cb,
-                                            struct gdb_symtab *symtab,
-                                            int nlines,
-                                            struct gdb_line_mapping *lines);
-
-/* Close the symtab SYMTAB.  This signals to GDB that no more blocks
-   will be opened on this symtab.  */
-
-typedef void (gdb_symtab_close) (struct gdb_symbol_callbacks *cb,
-                                 struct gdb_symtab *symtab);
-
-
-/* Closes the gdb_object OBJ and adds the emitted information into
-   GDB's internal structures.  Once this is done, the debug
-   information will be picked up and used; this will usually be the
-   last operation in gdb_read_debug_info.  */
-
-typedef void (gdb_object_close) (struct gdb_symbol_callbacks *cb,
-                                 struct gdb_object *obj);
-
-/* Reads LEN bytes from TARGET_MEM in the target's virtual address
-   space into GDB_BUF.
-
-   Returns GDB_FAIL on failure, and GDB_SUCCESS on success.  */
-
-typedef enum gdb_status (gdb_target_read) (GDB_CORE_ADDR target_mem,
-                                           void *gdb_buf, int len);
-
-/* The list of callbacks that are passed to read.  These callbacks are
-   to be used to construct the symbol table.  The functions have been
-   described above.  */
-
-struct gdb_symbol_callbacks
-{
-  gdb_object_open *object_open;
-  gdb_symtab_open *symtab_open;
-  gdb_block_open *block_open;
-  gdb_symtab_close *symtab_close;
-  gdb_object_close *object_close;
-
-  gdb_symtab_add_line_mapping *line_mapping_add;
-  gdb_target_read *target_read;
-
-  /* For internal use by GDB.  */
-  void *priv_data;
-};
-
-/* Forward declaration.  */
-
-struct gdb_reg_value;
-
-/* A function of this type is used to free a gdb_reg_value.  See the
-   comment on `free' in struct gdb_reg_value.  */
-
-typedef void (gdb_reg_value_free) (struct gdb_reg_value *);
-
-/* Denotes the value of a register.  */
-
-struct gdb_reg_value
-{
-  /* The size of the register in bytes.  The reader need not set this
-     field.  This will be set for (defined) register values being read
-     from GDB using reg_get.  */
-  int size;
-
-  /* Set to non-zero if the value for the register is known.  The
-     registers for which the reader does not call reg_set are also
-     assumed to be undefined */
-  int defined;
-
-  /* Since gdb_reg_value is a variable sized structure, it will
-     usually be allocated on the heap.  This function is expected to
-     contain the corresponding "free" function.
-
-     When a pointer to gdb_reg_value is being sent from GDB to the
-     reader (via gdb_unwind_reg_get), the reader is expected to call
-     this function (with the same gdb_reg_value as argument) once it
-     is done with the value.
-
-     When the function sends the a gdb_reg_value to GDB (via
-     gdb_unwind_reg_set), it is expected to set this field to point to
-     an appropriate cleanup routine (or to NULL if no cleanup is
-     required).  */
-  gdb_reg_value_free *free;
-
-  /* The value of the register.  */
-  unsigned char value[1];
-};
-
-/* get_frame_id in gdb_reader_funcs is to return a gdb_frame_id
-   corresponding to the current frame.  The registers corresponding to
-   the current frame can be read using reg_get.  Calling get_frame_id
-   on a particular frame should return the same gdb_frame_id
-   throughout its lifetime (i.e. till before it gets unwound).  One
-   way to do this is by having the CODE_ADDRESS point to the
-   function's first instruction and STACK_ADDRESS point to the value
-   of the stack pointer when entering the function.  */
-
-struct gdb_frame_id
-{
-  GDB_CORE_ADDR code_address;
-  GDB_CORE_ADDR stack_address;
-};
-
-/* Forward declaration.  */
-
-struct gdb_unwind_callbacks;
-
-/* Returns the value of a particular register in the current frame.
-   The current frame is the frame that needs to be unwound into the
-   outer (earlier) frame.
-
-   CB is the struct gdb_unwind_callbacks * the callback belongs to.
-   REGNUM is the DWARF register number of the register that needs to
-   be unwound.
-
-   Returns the gdb_reg_value corresponding to the register requested.
-   In case the value of the register has been optimized away or
-   otherwise unavailable, the defined flag in the returned
-   gdb_reg_value will be zero.  */
-
-typedef struct gdb_reg_value *(gdb_unwind_reg_get)
-                              (struct gdb_unwind_callbacks *cb, int regnum);
-
-/* Sets the previous value of a particular register.  REGNUM is the
-   (DWARF) register number whose value is to be set.  VAL is the value
-   the register is to be set to.
-
-   VAL is *not* copied, so the memory allocated to it cannot be
-   reused.  Once GDB no longer needs the value, it is deallocated
-   using the FREE function (see gdb_reg_value).
-
-   A register can also be "set" to an undefined value by setting the
-   defined in VAL to zero.  */
-
-typedef void (gdb_unwind_reg_set) (struct gdb_unwind_callbacks *cb, int regnum,
-                                   struct gdb_reg_value *val);
-
-/* This struct is passed to unwind in gdb_reader_funcs, and is to be
-   used to unwind the current frame (current being the frame whose
-   registers can be read using reg_get) into the earlier frame.  The
-   functions have been described above.  */
-
-struct gdb_unwind_callbacks
-{
-  gdb_unwind_reg_get *reg_get;
-  gdb_unwind_reg_set *reg_set;
-  gdb_target_read *target_read;
-
-  /* For internal use by GDB.  */
-  void *priv_data;
-};
-
-/* Forward declaration.  */
-
-struct gdb_reader_funcs;
-
-/* Parse the debug info off a block of memory, pointed to by MEMORY
-   (already copied to GDB's address space) and MEMORY_SZ bytes long.
-   The implementation has to use the functions in CB to actually emit
-   the parsed data into GDB.  SELF is the same structure returned by
-   gdb_init_reader.
-
-   Return GDB_FAIL on failure and GDB_SUCCESS on success.  */
-
-typedef enum gdb_status (gdb_read_debug_info) (struct gdb_reader_funcs *self,
-                                               struct gdb_symbol_callbacks *cb,
-                                               void *memory, long memory_sz);
-
-/* Unwind the current frame, CB is the set of unwind callbacks that
-   are to be used to do this.
-
-   Return GDB_FAIL on failure and GDB_SUCCESS on success.  */
-
-typedef enum gdb_status (gdb_unwind_frame) (struct gdb_reader_funcs *self,
-                                            struct gdb_unwind_callbacks *cb);
-
-/* Return the frame ID corresponding to the current frame, using C to
-   read the current register values.  See the comment on struct
-   gdb_frame_id.  */
-
-typedef struct gdb_frame_id (gdb_get_frame_id) (struct gdb_reader_funcs *self,
-                                                struct gdb_unwind_callbacks *c);
-
-/* Called when a reader is being unloaded.  This function should also
-   free SELF, if required.  */
-
-typedef void (gdb_destroy_reader) (struct gdb_reader_funcs *self);
-
-/* Called when the reader is loaded.  Must either return a properly
-   populated gdb_reader_funcs or NULL.  The memory allocated for the
-   gdb_reader_funcs is to be managed by the reader itself (i.e. if it
-   is allocated from the heap, it must also be freed in
-   gdb_destroy_reader).  */
-
-extern struct gdb_reader_funcs *gdb_init_reader (void);
-
-/* Pointer to the functions which implement the reader's
-   functionality.  The individual functions have been documented
-   above.
-
-   None of the fields are optional.  */
-
-struct gdb_reader_funcs
-{
-  /* Must be set to GDB_READER_INTERFACE_VERSION.  */
-  int reader_version;
-
-  /* For use by the reader.  */
-  void *priv_data;
-
-  gdb_read_debug_info *read;
-  gdb_unwind_frame *unwind;
-  gdb_get_frame_id *get_frame_id;
-  gdb_destroy_reader *destroy;
-};
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtbegin.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtbegin.o
index 7b2d7b7..2fd9f1a 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtbegin.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtbegin.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtbeginS.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtbeginS.o
index 69ec19d..b010cec 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtbeginS.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtbeginT.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtbeginT.o
index 7b2d7b7..2fd9f1a 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtbeginT.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtend.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtend.o
index e3ed9e2..7e4f7ac 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtend.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtend.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtendS.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtendS.o
index e3ed9e2..7e4f7ac 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtendS.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtendS.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtfastmath.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtfastmath.o
index 1df92bc..386c0df 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtfastmath.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtfastmath.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/libgcc.a b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/libgcc.a
index 235b248..e571aa8 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/libgcc.a
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/libgcc.a
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/libgcov.a b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/libgcov.a
index 0917af2..13195bb 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/libgcov.a
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/libgcov.a
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtbegin.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtbegin.o
index f3999a5..dc264b6 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtbegin.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtbegin.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtbeginS.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtbeginS.o
index ca42e09..39a35f3 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtbeginS.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtbeginT.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtbeginT.o
index f3999a5..dc264b6 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtbeginT.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtend.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtend.o
index dfc01ad..3d07726 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtend.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtend.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtendS.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtendS.o
index dfc01ad..3d07726 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtendS.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtendS.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtfastmath.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtfastmath.o
index 8db1d7e..5035a03 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtfastmath.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtfastmath.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/libgcc.a b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/libgcc.a
index 7d6ad3e..6a28be7 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/libgcc.a
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/libgcc.a
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/libgcov.a b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/libgcov.a
index 91369de..8c4883a 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/libgcov.a
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/libgcov.a
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtbegin.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtbegin.o
index f925c1d..a280bc3 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtbegin.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtbegin.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtbeginS.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtbeginS.o
index 53dd56d..a91d627 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtbeginS.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtbeginT.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtbeginT.o
index f925c1d..a280bc3 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtbeginT.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtend.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtend.o
index 1db90de..ad55ebf 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtend.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtend.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtendS.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtendS.o
index 1db90de..ad55ebf 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtendS.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtendS.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtfastmath.o b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtfastmath.o
index 6d17fd9..53e5111 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtfastmath.o
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtfastmath.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/libgcc.a b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/libgcc.a
index 3aca3de..557f3f6 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/libgcc.a
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/libgcc.a
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/libgcov.a b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/libgcov.a
index 46a91a0..723f670 100644
--- a/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/libgcov.a
+++ b/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/libgcov.a
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/crtbegin.o b/lib/gcc/mips64el-linux-android/4.9/crtbegin.o
index d55aa6b..8a57b45 100644
--- a/lib/gcc/mips64el-linux-android/4.9/crtbegin.o
+++ b/lib/gcc/mips64el-linux-android/4.9/crtbegin.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/crtbeginS.o b/lib/gcc/mips64el-linux-android/4.9/crtbeginS.o
index bcc6e6a..2f6e173 100644
--- a/lib/gcc/mips64el-linux-android/4.9/crtbeginS.o
+++ b/lib/gcc/mips64el-linux-android/4.9/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/crtbeginT.o b/lib/gcc/mips64el-linux-android/4.9/crtbeginT.o
index d55aa6b..8a57b45 100644
--- a/lib/gcc/mips64el-linux-android/4.9/crtbeginT.o
+++ b/lib/gcc/mips64el-linux-android/4.9/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/crtend.o b/lib/gcc/mips64el-linux-android/4.9/crtend.o
index 867b851..8c8fdf5 100644
--- a/lib/gcc/mips64el-linux-android/4.9/crtend.o
+++ b/lib/gcc/mips64el-linux-android/4.9/crtend.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/crtendS.o b/lib/gcc/mips64el-linux-android/4.9/crtendS.o
index 867b851..8c8fdf5 100644
--- a/lib/gcc/mips64el-linux-android/4.9/crtendS.o
+++ b/lib/gcc/mips64el-linux-android/4.9/crtendS.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/crtfastmath.o b/lib/gcc/mips64el-linux-android/4.9/crtfastmath.o
index c717c67..660cbdd 100644
--- a/lib/gcc/mips64el-linux-android/4.9/crtfastmath.o
+++ b/lib/gcc/mips64el-linux-android/4.9/crtfastmath.o
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/gcov-src/gcov-counter.def b/lib/gcc/mips64el-linux-android/4.9/gcov-src/gcov-counter.def
new file mode 100644
index 0000000..e847f05
--- /dev/null
+++ b/lib/gcc/mips64el-linux-android/4.9/gcov-src/gcov-counter.def
@@ -0,0 +1,60 @@
+/* Definitions for the gcov counters in the GNU compiler.
+   Copyright (C) 2001-2014 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.
+
+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/>.  */
+
+/* Before including this file, define a macro:
+
+     DEF_GCOV_COUNTER(COUNTER, NAME, FN_TYPE)
+
+   This macro will be expanded to all supported gcov counters, their
+   names, or the type of handler functions.  FN_TYPE will be
+   expanded to a handler function, like in gcov_merge, it is
+   expanded to __gcov_merge ## FN_TYPE.  */
+
+/* Arc transitions.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_ARCS, "arcs", _add)
+
+/* Histogram of value inside an interval.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_V_INTERVAL, "interval", _add)
+
+/* Histogram of exact power2 logarithm of a value.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_V_POW2, "pow2", _add)
+
+/* The most common value of expression.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_V_SINGLE, "single", _single)
+
+/* The most common difference between consecutive values of expression.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_V_DELTA, "delta", _delta)
+
+/* The most common indirect address.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_V_INDIR, "indirect_call", _single)
+
+/* Compute average value passed to the counter.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_AVERAGE, "average", _add)
+
+/* IOR of the all values passed to counter.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_IOR, "ior", _ior)
+
+/* Top N value tracking for indirect calls */
+DEF_GCOV_COUNTER(GCOV_COUNTER_ICALL_TOPNV, "indirect_call_topn", _icall_topn) 
+
+/* Time profile collecting first run of a function */
+DEF_GCOV_COUNTER(GCOV_TIME_PROFILER, "time_profiler", _time_profile)
+
+/* Top N value tracking for indirect calls */
+DEF_GCOV_COUNTER(GCOV_COUNTER_DIRECT_CALL, "direct_call", _dc) 
diff --git a/lib/gcc/mips64el-linux-android/4.9/gcov-src/gcov-io.c b/lib/gcc/mips64el-linux-android/4.9/gcov-src/gcov-io.c
index f226cbf..fc5e32e 100644
--- a/lib/gcc/mips64el-linux-android/4.9/gcov-src/gcov-io.c
+++ b/lib/gcc/mips64el-linux-android/4.9/gcov-src/gcov-io.c
@@ -41,7 +41,7 @@
 
 GCOV_LINKAGE struct gcov_var
 {
-  FILE *file;
+  _GCOV_FILE *file;
   gcov_position_t start;	/* Position of first byte of block */
   unsigned offset;		/* Read/write position within the block.  */
   unsigned length;		/* Read limit in the block.  */
@@ -94,7 +94,7 @@
   gcov_var.mode = -1; 
   gcov_var.start = 0;
   gcov_var.offset = 0;
-  fseek (gcov_var.file, 0L, SEEK_SET);
+  _GCOV_fseek (gcov_var.file, 0L, SEEK_SET);
 }
 #endif
 
@@ -120,6 +120,7 @@
    Return zero on failure, >0 on opening an existing file and <0 on
    creating a new one.  */
 
+#ifndef __KERNEL__
 GCOV_LINKAGE int
 #if IN_LIBGCOV
 gcov_open (const char *name)
@@ -190,7 +191,7 @@
 
       if (fstat (fd, &st) < 0)
 	{
-	  fclose (gcov_var.file);
+	  _GCOV_fclose (gcov_var.file);
 	  gcov_var.file = 0;
 	  return 0;
 	}
@@ -203,13 +204,13 @@
     gcov_var.mode = mode * 2 + 1;
 #else
   if (mode >= 0)
-    gcov_var.file = fopen (name, (mode > 0) ? "rb" : "r+b");
+    gcov_var.file = _GCOV_fopen (name, (mode > 0) ? "rb" : "r+b");
 
   if (gcov_var.file)
     gcov_var.mode = 1;
   else if (mode <= 0)
     {
-      gcov_var.file = fopen (name, "w+b");
+      gcov_var.file = _GCOV_fopen (name, "w+b");
       if (gcov_var.file)
 	gcov_var.mode = mode * 2 + 1;
     }
@@ -221,6 +222,24 @@
 
   return 1;
 }
+#else /* __KERNEL__ */
+
+extern _GCOV_FILE *gcov_current_file;
+
+GCOV_LINKAGE int
+gcov_open (const char *name)
+{
+  gcov_var.start = 0; 
+  gcov_var.offset = gcov_var.length = 0; 
+  gcov_var.overread = -1u; 
+  gcov_var.error = 0; 
+  gcov_var.file = gcov_current_file;
+  gcov_var.mode = 1; 
+
+  return 1;
+}
+#endif /* __KERNEL__ */
+
 
 /* Close the current gcov file. Flushes data to disk. Returns nonzero
    on failure or error flag set.  */
@@ -234,7 +253,7 @@
       if (gcov_var.offset && gcov_var.mode < 0)
 	gcov_write_block (gcov_var.offset);
 #endif
-      fclose (gcov_var.file);
+      _GCOV_fclose (gcov_var.file);
       gcov_var.file = 0;
       gcov_var.length = 0;
     }
@@ -290,7 +309,7 @@
 static void
 gcov_write_block (unsigned size)
 {
-  if (fwrite (gcov_var.buffer, size << 2, 1, gcov_var.file) != 1)
+  if (_GCOV_fwrite (gcov_var.buffer, size << 2, 1, gcov_var.file) != 1)
     gcov_var.error = 1;
   gcov_var.start += size;
   gcov_var.offset -= size;
@@ -336,6 +355,47 @@
   buffer[0] = value;
 }
 
+/* Compute the total length in words required to write NUM_STRINGS
+   in STRING_ARRAY as unsigned.  */
+
+GCOV_LINKAGE gcov_unsigned_t
+gcov_compute_string_array_len (char **string_array,
+                               gcov_unsigned_t num_strings)
+{
+  gcov_unsigned_t len = 0, i;
+  for (i = 0; i < num_strings; i++)
+    {
+      gcov_unsigned_t string_len
+          = (strlen (string_array[i]) + sizeof (gcov_unsigned_t))
+          / sizeof (gcov_unsigned_t);
+      len += string_len;
+      len += 1; /* Each string is lead by a length.  */
+    }
+  return len;
+}
+
+/* Write NUM_STRINGS in STRING_ARRAY as unsigned.  */
+
+GCOV_LINKAGE void
+gcov_write_string_array (char **string_array, gcov_unsigned_t num_strings)
+{
+  gcov_unsigned_t i, j;
+  for (j = 0; j < num_strings; j++)
+    {
+      gcov_unsigned_t *aligned_string;
+      gcov_unsigned_t string_len =
+	(strlen (string_array[j]) + sizeof (gcov_unsigned_t)) /
+	sizeof (gcov_unsigned_t);
+      aligned_string = (gcov_unsigned_t *)
+	alloca ((string_len + 1) * sizeof (gcov_unsigned_t));
+      memset (aligned_string, 0, (string_len + 1) * sizeof (gcov_unsigned_t));
+      aligned_string[0] = string_len;
+      strcpy ((char*) (aligned_string + 1), string_array[j]);
+      for (i = 0; i < (string_len + 1); i++)
+        gcov_write_unsigned (aligned_string[i]);
+    }
+}
+
 /* Write counter VALUE to coverage file.  Sets error flag
    appropriately.  */
 
@@ -517,7 +577,7 @@
 	gcov_allocate (gcov_var.length + words);
       excess = gcov_var.alloc - gcov_var.length;
 #endif
-      excess = fread (gcov_var.buffer + gcov_var.length,
+      excess = _GCOV_fread (gcov_var.buffer + gcov_var.length,
 		      1, excess << 2, gcov_var.file) >> 2;
       gcov_var.length += excess;
       if (gcov_var.length < words)
@@ -586,6 +646,20 @@
 }
 #endif
 
+#ifdef __KERNEL__
+static int
+k_popcountll (long long x)
+{
+  int c = 0;
+  while (x)
+    {
+      c++;
+      x &= (x-1);
+    }
+  return c;
+}
+#endif
+
 GCOV_LINKAGE void
 gcov_read_summary (struct gcov_summary *summary)
 {
@@ -612,8 +686,12 @@
              hwint.h (where popcount_hwi is declared). However, libgcov.a
              is built by the bootstrapped compiler and therefore the builtins
              are always available.  */
+#ifndef __KERNEL__
           h_cnt += __builtin_popcount (histo_bitvector[bv_ix]);
 #else
+          h_cnt += k_popcountll (histo_bitvector[bv_ix]);
+#endif
+#else
           h_cnt += popcount_hwi (histo_bitvector[bv_ix]);
 #endif
         }
@@ -650,6 +728,78 @@
     }
 }
 
+/* Read LENGTH words (unsigned type) from a zero profile fixup record with the
+   number of function flags saved in NUM_FNS.  Returns the int flag array, which
+   should be deallocated by caller, or NULL on error.  */
+
+GCOV_LINKAGE int *
+gcov_read_comdat_zero_fixup (gcov_unsigned_t length,
+                             gcov_unsigned_t *num_fns)
+{
+#ifndef __KERNEL__
+  unsigned ix, f_ix;
+  gcov_unsigned_t num = gcov_read_unsigned ();
+  /* The length consists of 1 word to hold the number of functions,
+     plus enough 32-bit words to hold 1 bit/function.  */
+  gcc_assert ((num + 31) / 32 + 1 == length);
+  int *zero_fixup_flags = (int *) xcalloc (num, sizeof (int));
+  for (ix = 0; ix < length - 1; ix++)
+    {
+      gcov_unsigned_t bitvector = gcov_read_unsigned ();
+      f_ix = ix * 32;
+      while (bitvector)
+        {
+          if (bitvector & 0x1)
+            zero_fixup_flags[f_ix] = 1;
+          f_ix++;
+          bitvector >>= 1;
+        }
+    }
+  *num_fns = num;
+  return zero_fixup_flags;
+#else
+  return NULL;
+#endif
+}
+
+/* Read NUM_STRINGS strings (as an unsigned array) in STRING_ARRAY, and return
+   the number of words read.  */
+
+GCOV_LINKAGE gcov_unsigned_t
+gcov_read_string_array (char **string_array, gcov_unsigned_t num_strings)
+{
+  gcov_unsigned_t i, j, len = 0;
+
+  for (j = 0; j < num_strings; j++)
+   {
+     gcov_unsigned_t string_len = gcov_read_unsigned ();
+     string_array[j] =
+       (char *) xmalloc (string_len * sizeof (gcov_unsigned_t));
+     for (i = 0; i < string_len; i++)
+       ((gcov_unsigned_t *) string_array[j])[i] = gcov_read_unsigned ();
+     len += (string_len + 1);
+   }
+  return len;
+}
+
+/* Read LENGTH words (unsigned type) from a build info record with the number
+   of strings read saved in NUM_STRINGS.  Returns the string array, which
+   should be deallocated by caller, or NULL on error.  */
+
+GCOV_LINKAGE char **
+gcov_read_build_info (gcov_unsigned_t length, gcov_unsigned_t *num_strings)
+{
+  gcov_unsigned_t num = gcov_read_unsigned ();
+  char **build_info_strings = (char **)
+      xmalloc (sizeof (char *) * num);
+  gcov_unsigned_t len = gcov_read_string_array (build_info_strings,
+                                                num);
+  if (len != length - 1)
+    return NULL;
+  *num_strings = num;
+  return build_info_strings;
+}
+
 #if (!IN_LIBGCOV && IN_GCOV != 1) || defined (IN_GCOV_TOOL)
 /* Read LEN words (unsigned type) and construct MOD_INFO.  */
 
@@ -657,7 +807,7 @@
 gcov_read_module_info (struct gcov_module_info *mod_info,
                        gcov_unsigned_t len)
 {
-  gcov_unsigned_t src_filename_len, filename_len, i, j, num_strings;
+  gcov_unsigned_t src_filename_len, filename_len, i, num_strings;
   mod_info->ident = gcov_read_unsigned ();
   mod_info->is_primary = gcov_read_unsigned ();
   mod_info->flags = gcov_read_unsigned ();
@@ -689,16 +839,7 @@
     + mod_info->num_system_paths
     + mod_info->num_cpp_defines + mod_info->num_cpp_includes
     + mod_info->num_cl_args;
-  for (j = 0; j < num_strings; j++)
-   {
-     gcov_unsigned_t string_len = gcov_read_unsigned ();
-     mod_info->string_array[j] =
-       (char *) xmalloc (string_len * sizeof (gcov_unsigned_t));
-     for (i = 0; i < string_len; i++)
-       ((gcov_unsigned_t *) mod_info->string_array[j])[i] =
-	 gcov_read_unsigned ();
-     len -= (string_len + 1);
-   }
+  len -= gcov_read_string_array (mod_info->string_array, num_strings);
   gcc_assert (!len);
 }
 #endif
@@ -719,8 +860,8 @@
   else
     {
       gcov_var.offset = gcov_var.length = 0;
-      fseek (gcov_var.file, base << 2, SEEK_SET);
-      gcov_var.start = ftell (gcov_var.file) >> 2;
+      _GCOV_fseek (gcov_var.file, base << 2, SEEK_SET);
+      gcov_var.start = _GCOV_ftell (gcov_var.file) >> 2;
     }
 }
 #endif
@@ -734,8 +875,8 @@
   gcc_assert (gcov_var.mode < 0);
   if (gcov_var.offset)
     gcov_write_block (gcov_var.offset);
-  fseek (gcov_var.file, base << 2, SEEK_SET);
-  gcov_var.start = ftell (gcov_var.file) >> 2;
+  _GCOV_fseek (gcov_var.file, base << 2, SEEK_SET);
+  gcov_var.start = _GCOV_ftell (gcov_var.file) >> 2;
 }
 
 /* Truncate the gcov file at the current position.  */
@@ -743,15 +884,19 @@
 GCOV_LINKAGE void
 gcov_truncate (void)
 {
+#ifdef __KERNEL__
+  gcc_assert (0);
+#else
   long offs;
   int filenum;
   gcc_assert (gcov_var.mode < 0);
   if (gcov_var.offset)
     gcov_write_block (gcov_var.offset);
-  offs = ftell (gcov_var.file);
+  offs = _GCOV_ftell (gcov_var.file);
   filenum = fileno (gcov_var.file);
-  if (offs == -1 || filenum == -1 || ftruncate (filenum, offs))
+  if (offs == -1 || filenum == -1 || _GCOV_ftruncate (filenum, offs))
     gcov_var.error = 1;
+#endif /* __KERNEL__ */
 }
 #endif
 
diff --git a/lib/gcc/mips64el-linux-android/4.9/gcov-src/gcov-io.h b/lib/gcc/mips64el-linux-android/4.9/gcov-src/gcov-io.h
index 50ffa55..895ff98 100644
--- a/lib/gcc/mips64el-linux-android/4.9/gcov-src/gcov-io.h
+++ b/lib/gcc/mips64el-linux-android/4.9/gcov-src/gcov-io.h
@@ -129,7 +129,7 @@
    blocks they are for.
 
    The data file contains the following records.
-        data: {unit summary:object summary:program* function-data*}*
+        data: {unit summary:program* build_info zero_fixup function-data*}*
 	unit: header int32:checksum
         function-data:	announce_function present counts
 	announce_function: header int32:ident
@@ -141,6 +141,8 @@
 			int64:max int64:sum_max histogram
         histogram: {int32:bitvector}8 histogram-buckets*
         histogram-buckets: int32:num int64:min int64:sum
+        build_info: string:info*
+        zero_fixup: int32:num int32:bitvector*
 
    The ANNOUNCE_FUNCTION record is the same as that in the note file,
    but without the source location.  The COUNTS gives the
@@ -152,6 +154,17 @@
    zero.  Note that the data file might contain information from
    several runs concatenated, or the data might be merged.
 
+   BUILD_INFO record contains a list of strings that is used
+   to include in the data file information about the profile generate
+   build.  For example, it can be used to include source revision
+   information that is useful in diagnosing profile mis-matches.
+
+   ZERO_FIXUP record contains a count of functions in the gcda file
+   and an array of bitvectors indexed by the function index's in the
+   function-data section. Each bit flags whether the function was a
+   COMDAT that had all-zero profiles that was fixed up by dyn-ipa
+   using profiles from functions with matching checksums in other modules.
+
    This file is included by both the compiler, gcov tools and the
    runtime support library libgcov. IN_LIBGCOV and IN_GCOV are used to
    distinguish which case is which.  If IN_LIBGCOV is nonzero,
@@ -164,6 +177,19 @@
 #ifndef GCC_GCOV_IO_H
 #define GCC_GCOV_IO_H
 
+#ifndef __KERNEL__
+# define _GCOV_FILE      FILE
+# define _GCOV_fclose    fclose
+# define _GCOV_ftell     ftell
+# define _GCOV_fseek     fseek
+# define _GCOV_ftruncate ftruncate
+# define _GCOV_fread     fread
+# define _GCOV_fwrite    fwrite
+# define _GCOV_fread     fread
+# define _GCOV_fileno    fileno
+# define _GCOV_fopen     fopen
+#endif
+
 #ifndef IN_LIBGCOV
 /* About the host */
 
@@ -255,8 +281,12 @@
 #define GCOV_TAG_COUNTER_NUM(LENGTH) ((LENGTH) / 2)
 #define GCOV_TAG_OBJECT_SUMMARY  ((gcov_unsigned_t)0xa1000000) /* Obsolete */
 #define GCOV_TAG_PROGRAM_SUMMARY ((gcov_unsigned_t)0xa3000000)
+#define GCOV_TAG_COMDAT_ZERO_FIXUP ((gcov_unsigned_t)0xa9000000)
+/* Ceiling divide by 32 bit word size, plus one word to hold NUM.  */
+#define GCOV_TAG_COMDAT_ZERO_FIXUP_LENGTH(NUM) (1 + (NUM + 31) / 32)
 #define GCOV_TAG_SUMMARY_LENGTH(NUM)  \
         (1 + GCOV_COUNTERS_SUMMABLE * (10 + 3 * 2) + (NUM) * 5)
+#define GCOV_TAG_BUILD_INFO ((gcov_unsigned_t)0xa7000000)
 #define GCOV_TAG_MODULE_INFO ((gcov_unsigned_t)0xab000000)
 #define GCOV_TAG_AFDO_FILE_NAMES ((gcov_unsigned_t)0xaa000000)
 #define GCOV_TAG_AFDO_FUNCTION ((gcov_unsigned_t)0xac000000)
@@ -434,9 +464,16 @@
 GCOV_LINKAGE gcov_unsigned_t gcov_read_unsigned (void) ATTRIBUTE_HIDDEN;
 GCOV_LINKAGE gcov_type gcov_read_counter (void) ATTRIBUTE_HIDDEN;
 GCOV_LINKAGE void gcov_read_summary (struct gcov_summary *) ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE int *gcov_read_comdat_zero_fixup (gcov_unsigned_t,
+                                               gcov_unsigned_t *)
+    ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE char **gcov_read_build_info (gcov_unsigned_t, gcov_unsigned_t *)
+  ATTRIBUTE_HIDDEN;
 GCOV_LINKAGE const char *gcov_read_string (void);
 GCOV_LINKAGE void gcov_sync (gcov_position_t /*base*/,
 			     gcov_unsigned_t /*length */);
+GCOV_LINKAGE gcov_unsigned_t gcov_read_string_array (char **, gcov_unsigned_t)
+  ATTRIBUTE_HIDDEN;
 
 
 #if !IN_LIBGCOV && IN_GCOV != 1
@@ -447,6 +484,11 @@
 #if !IN_GCOV
 /* Available outside gcov */
 GCOV_LINKAGE void gcov_write_unsigned (gcov_unsigned_t) ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE gcov_unsigned_t gcov_compute_string_array_len (char **,
+                                                            gcov_unsigned_t)
+  ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE void gcov_write_string_array (char **, gcov_unsigned_t)
+  ATTRIBUTE_HIDDEN;
 #endif
 
 #if !IN_GCOV && !IN_LIBGCOV
diff --git a/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-driver-kernel.c b/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-driver-kernel.c
new file mode 100644
index 0000000..34298ed
--- /dev/null
+++ b/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-driver-kernel.c
@@ -0,0 +1,203 @@
+/* Routines required for instrumenting a program.  */
+/* Compile this one with gcc.  */
+/* Copyright (C) 1989-2014 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/>.  */
+
+
+/* A utility function for outputing errors.  */
+
+static int __attribute__((format(printf, 1, 2)))
+gcov_error (const char *fmt, ...)
+{
+  int ret;
+  va_list argp;
+  va_start (argp, fmt);
+  ret = vprintk (fmt, argp);
+  va_end (argp);
+  return ret;
+}
+
+static void
+allocate_filename_struct (struct gcov_filename_aux *gf)
+{
+  const char *gcov_prefix;
+  int gcov_prefix_strip = 0;
+  size_t prefix_length = 0;
+  char *gi_filename_up;
+
+  /* Allocate and initialize the filename scratch space plus one.  */
+  gi_filename = (char *) xmalloc (prefix_length + gcov_max_filename + 2);
+  if (prefix_length)
+    memcpy (gi_filename, gcov_prefix, prefix_length);
+  gi_filename_up = gi_filename + prefix_length;
+
+  gf->gi_filename_up = gi_filename_up;
+  gf->prefix_length = prefix_length;
+  gf->gcov_prefix_strip = gcov_prefix_strip;
+}
+
+static int
+gcov_open_by_filename (char *gi_filename)
+{
+  gcov_open (gi_filename);
+  return 0;
+}
+
+
+/* Strip GCOV_PREFIX_STRIP levels of leading '/' from FILENAME and
+   put the result into GI_FILENAME_UP.  */
+
+static void
+gcov_strip_leading_dirs (int prefix_length, int gcov_prefix_strip,
+      			 const char *filename, char *gi_filename_up)
+{
+  strcpy (gi_filename_up, filename);
+}
+
+/* Current virual gcda file. This is for kernel use only.  */
+gcov_kernel_vfile *gcov_current_file;
+
+/* Set current virutal gcda file. It needs to be set before dumping
+   profile data.  */
+
+void
+gcov_set_vfile (gcov_kernel_vfile *file)
+{
+  gcov_current_file = file;
+}
+
+/* File fclose operation in kernel mode.  */
+
+int
+kernel_file_fclose (gcov_kernel_vfile *fp)
+{
+  return 0;
+}
+
+/* File ftell operation in kernel mode. It currently should not
+   be called.  */
+
+long
+kernel_file_ftell (gcov_kernel_vfile *fp)
+{
+  return 0;
+}
+
+/* File fseek operation in kernel mode. It should only be called
+   with OFFSET==0 and WHENCE==0 to a freshly opened file.  */
+
+int
+kernel_file_fseek (gcov_kernel_vfile *fp, long offset, int whence)
+{
+  gcc_assert (offset == 0 && whence == 0 && fp->count == 0);
+  return 0;
+}
+
+/* File ftruncate operation in kernel mode. It currently should not
+   be called.  */
+
+int
+kernel_file_ftruncate (gcov_kernel_vfile *fp, off_t value)
+{
+  gcc_assert (0);  /* should not reach here */
+  return 0;
+}
+
+/* File fread operation in kernel mode. It currently should not
+   be called.  */
+
+int
+kernel_file_fread (void *ptr, size_t size, size_t nitems,
+                  gcov_kernel_vfile *fp)
+{
+  gcc_assert (0);  /* should not reach here */
+  return 0;
+}
+
+/* File fwrite operation in kernel mode. It outputs the data
+   to a buffer in the virual file.  */
+
+int
+kernel_file_fwrite (const void *ptr, size_t size,
+                   size_t nitems, gcov_kernel_vfile *fp)
+{
+  char *vbuf;
+  unsigned vsize, vpos;
+  unsigned len;
+
+  if (!fp) return 0;
+
+  vbuf = fp->buf;
+  vsize = fp->size;
+  vpos = fp->count;
+
+
+  if (vsize < vpos)
+    {
+      printk (KERN_ERR
+         "GCOV_KERNEL: something wrong in file %s: vbuf=%p vsize=%u"
+         " vpos=%u\n",
+          fp->info->filename, vbuf, vsize, vpos);
+      return 0;
+    }
+
+  len = vsize - vpos;
+  len /= size;
+
+  /* Increase the virtual file size if it is not suffcient. */
+  while (len < nitems)
+    {
+      vsize *= 2;
+      len = vsize - vpos;
+      len /= size;
+    }
+
+  if (vsize != fp->size)
+    {
+      vbuf = fp->buf = (char *) gcov_realloc_file_buf(vsize, vpos);
+      fp->size = vsize;
+    }
+
+  if (len > nitems)
+	  len = nitems;
+
+  memcpy (vbuf+vpos, ptr, size*len);
+  fp->count += len*size;
+
+  if (len != nitems)
+    printk (KERN_ERR
+        "GCOV_KERNEL: something wrong in file %s: size=%lu nitems=%lu"
+        " len=%d vsize=%u vpos=%u \n",
+        fp->info->filename, size, nitems, len, vsize, vpos);
+  return len;
+}
+
+/* File fileno operation in kernel mode. It currently should not
+   be called.  */
+
+int
+kernel_file_fileno (gcov_kernel_vfile *fp)
+{
+  gcc_assert (0);  /* should not reach here */
+  return 0;
+}
diff --git a/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-driver.c b/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-driver.c
index dc8cf36..3c569f1 100644
--- a/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-driver.c
+++ b/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-driver.c
@@ -34,28 +34,24 @@
 
 #else /* inhibit_libc */
 
+#if !defined(__KERNEL__)
 #include <string.h>
 #if GCOV_LOCKED
 #include <fcntl.h>
 #include <errno.h>
 #include <sys/stat.h>
 #endif
+#endif /* __KERNEL__ */
 
 #ifdef L_gcov
 #include "gcov-io.c"
 
-#ifndef IN_GCOV_TOOL
-extern gcov_unsigned_t __gcov_sampling_period;
-extern gcov_unsigned_t __gcov_has_sampling;
-static int gcov_sampling_period_initialized = 0;
-#endif
-
 /* Unique identifier assigned to each module (object file).  */
 static gcov_unsigned_t gcov_cur_module_id = 0;
 
 
 /* Dynamic call graph build and form module groups.  */
-int __gcov_compute_module_groups (void) ATTRIBUTE_HIDDEN;
+int __gcov_compute_module_groups (char **zero_counts) ATTRIBUTE_HIDDEN;
 void __gcov_finalize_dyn_callgraph (void) ATTRIBUTE_HIDDEN;
 
 /* The following functions can be called from outside of this file.  */
@@ -67,7 +63,11 @@
 extern void set_gcov_list (struct gcov_info *) ATTRIBUTE_HIDDEN;
 __attribute__((weak)) void __coverage_callback (gcov_type, int); 
 
-#ifndef IN_GCOV_TOOL
+#if !defined(IN_GCOV_TOOL) && !defined(__KERNEL__)
+extern gcov_unsigned_t __gcov_sampling_period;
+extern gcov_unsigned_t __gcov_has_sampling;
+static int gcov_sampling_period_initialized = 0;
+
 /* Create a strong reference to these symbols so that they are
    unconditionally pulled into the instrumented binary, even when
    the only reference is a weak reference. This is necessary because
@@ -129,6 +129,24 @@
   __gcov_list = head;
 }
 
+/* Flag if the current function being read was marked as having fixed-up
+   zero counters.  */
+static int __gcov_curr_fn_fixed_up;
+
+/* Set function fixed up flag.  */
+void
+set_gcov_fn_fixed_up (int fixed_up)
+{
+  __gcov_curr_fn_fixed_up = fixed_up;
+}
+
+/* Return function fixed up flag.  */
+int
+get_gcov_fn_fixed_up (void)
+{
+  return __gcov_curr_fn_fixed_up;
+}
+
 /* Size of the longest file name. */
 /* We need to expose this static variable when compiling for gcov-tool.  */
 #ifndef IN_GCOV_TOOL
@@ -181,8 +199,8 @@
 
   for (ix = 0; ix != limit; ix++)
     if (gi_ptr->merge[ix])
-      free (buffer->info.ctrs[n_ctr++].values);
-  free (buffer);
+      xfree (buffer->info.ctrs[n_ctr++].values);
+  xfree (buffer);
   return next;
 }
 
@@ -386,7 +404,10 @@
 /* This funtions computes the program level summary and the histo-gram.
    It computes and returns CRC32 and stored summary in THIS_PRG.  */
 
-static gcov_unsigned_t
+#if !IN_GCOV_TOOL
+static 
+#endif
+gcov_unsigned_t
 gcov_exit_compute_summary (struct gcov_summary *this_prg)
 {
   struct gcov_info *gi_ptr;
@@ -451,14 +472,58 @@
 };
 
 /* Including system dependent components. */
+#if !defined (__KERNEL__)
 #include "libgcov-driver-system.c"
+#else
+#include "libgcov-driver-kernel.c"
+#endif
 
-/* Scan through the current open gcda file corresponding to GI_PTR
-   to locate the end position of the last summary, returned in
-   SUMMARY_END_POS_P.  Return 0 on success, -1 on error.  */
 static int
-gcov_scan_summary_end (struct gcov_info *gi_ptr,
-                       gcov_position_t *summary_end_pos_p)
+scan_build_info (struct gcov_info *gi_ptr)
+{
+  gcov_unsigned_t i, length;
+  gcov_unsigned_t num_strings = 0;
+  char **build_info_strings;
+
+  length = gcov_read_unsigned ();
+  build_info_strings = gcov_read_build_info (length, &num_strings);
+  if (!build_info_strings)
+    {
+      gcov_error ("profiling:%s:Error reading build info\n", gi_filename);
+      return -1;
+    }
+  if (!gi_ptr->build_info)
+    {
+      gcov_error ("profiling:%s:Mismatched build info sections, expected "
+                  "none, found %u strings)\n", gi_filename, num_strings);
+      return -1;
+    }
+
+  for (i = 0; i < num_strings; i++)
+    {
+      if (strcmp (build_info_strings[i], gi_ptr->build_info[i]))
+        {
+          gcov_error ("profiling:%s:Mismatched build info string "
+                      "(expected %s, read %s)\n",
+                      gi_filename, gi_ptr->build_info[i],
+                      build_info_strings[i]);
+          return -1;
+        }
+      xfree (build_info_strings[i]);
+    }
+  xfree (build_info_strings);
+  return 0;
+}
+
+#if !defined(__KERNEL__)
+/* Scan through the current open gcda file corresponding to GI_PTR
+   to locate the end position just before function data should be rewritten,
+   returned in SUMMARY_END_POS_P. E.g. scan past the last summary and other
+   sections that won't be rewritten, like the build info.  Return 0 on success,
+   -1 on error.  */
+static int
+gcov_scan_to_function_data (struct gcov_info *gi_ptr,
+                            gcov_position_t *summary_end_pos_p)
 {
   gcov_unsigned_t tag, version, stamp;
   tag = gcov_read_unsigned ();
@@ -493,8 +558,21 @@
         return -1;
     }
 
+  /* If there is a build info section, scan past it as well.  */
+  if (tag == GCOV_TAG_BUILD_INFO)
+    {
+      if (scan_build_info (gi_ptr) < 0)
+        return -1;
+
+      *summary_end_pos_p = gcov_position ();
+      tag = gcov_read_unsigned ();
+    }
+  /* The next section should be the function counters.  */
+  gcc_assert (tag == GCOV_TAG_FUNCTION);
+
   return 0;
 }
+#endif /* __KERNEL__ */
 
 /* This function merges counters in GI_PTR to an existing gcda file.
    Return 0 on success.
@@ -514,6 +592,7 @@
   int error = 0;
   struct gcov_fn_buffer **fn_tail = &fn_buffer;
   struct gcov_summary_buffer **sum_tail = &sum_buffer;
+  int *zero_fixup_flags = NULL;
 
   length = gcov_read_unsigned ();
   if (!gcov_version (gi_ptr, length, gi_filename))
@@ -565,6 +644,31 @@
     next_summary:;
     }
 
+  if (tag == GCOV_TAG_BUILD_INFO)
+    {
+      if (scan_build_info (gi_ptr) < 0)
+        return -1;
+
+      /* Since the stamps matched if we got here, this should be from
+         the same compilation and the build info strings should match.  */
+      tag = gcov_read_unsigned ();
+    }
+
+  if (tag == GCOV_TAG_COMDAT_ZERO_FIXUP)
+    {
+      gcov_unsigned_t num_fns = 0;
+      length = gcov_read_unsigned ();
+      zero_fixup_flags = gcov_read_comdat_zero_fixup (length, &num_fns);
+      if (!zero_fixup_flags)
+        {
+          gcov_error ("profiling:%s:Error reading zero fixup flags\n",
+                      gi_filename);
+          return -1;
+        }
+
+      tag = gcov_read_unsigned ();
+    }
+
   /* Merge execution counts for each function.  */
   for (f_ix = 0; (unsigned)f_ix != gi_ptr->n_functions;
        f_ix++, tag = gcov_read_unsigned ())
@@ -598,6 +702,9 @@
           continue;
         }
 
+      if (zero_fixup_flags)
+        set_gcov_fn_fixed_up (zero_fixup_flags[f_ix]);
+
       length = gcov_read_unsigned ();
       if (length != gfi_ptr->ident)
         goto read_mismatch;
@@ -629,6 +736,7 @@
       if ((error = gcov_is_error ()))
         goto read_error;
     }
+  xfree (zero_fixup_flags);
 
   if (tag && tag != GCOV_TAG_MODULE_INFO)
     {
@@ -646,6 +754,57 @@
   return -1;
 }
 
+#if !defined(__KERNEL__)
+/* Write NUM_FNS ZERO_COUNTS fixup flags to a gcda file starting from its
+   current location.  */
+
+static void
+gcov_write_comdat_zero_fixup (char *zero_counts, unsigned num_fns)
+{
+  unsigned f_ix;
+  gcov_unsigned_t len = GCOV_TAG_COMDAT_ZERO_FIXUP_LENGTH (num_fns);
+  gcov_unsigned_t bitvector = 0, b_ix = 0;
+  gcov_write_tag_length (GCOV_TAG_COMDAT_ZERO_FIXUP, len);
+
+  gcov_write_unsigned (num_fns);
+  for (f_ix = 0; f_ix != num_fns; f_ix++)
+    {
+      if (zero_counts[f_ix])
+        bitvector |= 1 << b_ix;
+      if (++b_ix == 32)
+        {
+          gcov_write_unsigned (bitvector);
+          b_ix = 0;
+          bitvector = 0;
+        }
+    }
+  if (b_ix > 0)
+    gcov_write_unsigned (bitvector);
+}
+#endif /* __KERNEL__ */
+
+/* Write build_info strings from GI_PTR to a gcda file starting from its current
+   location.  */
+
+static void
+gcov_write_build_info (struct gcov_info *gi_ptr)
+{
+  gcov_unsigned_t num = 0;
+  gcov_unsigned_t len = 1;
+
+  if (!gi_ptr->build_info)
+    return;
+
+  /* Count the number of strings, which is terminated with an empty string.  */
+  while (gi_ptr->build_info[num][0])
+    num++;
+
+  len += gcov_compute_string_array_len (gi_ptr->build_info, num);
+  gcov_write_tag_length (GCOV_TAG_BUILD_INFO, len);
+  gcov_write_unsigned (num);
+  gcov_write_string_array (gi_ptr->build_info, num);
+}
+
 /* Write counters in GI_PTR to a gcda file starting from its current
    location.  */
 
@@ -676,7 +835,7 @@
           if (gfi_ptr && gfi_ptr->key == gi_ptr)
             length = GCOV_TAG_FUNCTION_LENGTH;
           else
-                length = 0;
+            length = 0;
         }
 
       gcov_write_tag_length (GCOV_TAG_FUNCTION, length);
@@ -704,8 +863,10 @@
             gcov_write_counter (*c_ptr++);
           ci_ptr++;
         }
+#if !defined(__KERNEL__)
       if (buffered)
         fn_buffer = free_fn_data (gi_ptr, fn_buffer, GCOV_COUNTERS);
+#endif /* __KERNEL__ */
     }
 
   gi_ptr->eof_pos = gcov_position ();
@@ -748,10 +909,12 @@
     {
       gcov_write_summary (GCOV_TAG_PROGRAM_SUMMARY, &sum_buffer->summary);
       next_sum_buffer = sum_buffer->next;
-      free (sum_buffer);
+      xfree (sum_buffer);
       sum_buffer = next_sum_buffer;
     }
 
+  gcov_write_build_info (gi_ptr);
+
   /* Write the counters.  */
   gcov_write_func_counters (gi_ptr);
 }
@@ -835,6 +998,8 @@
   return 0;
 }
 
+__attribute__((weak)) gcov_unsigned_t __gcov_lipo_sampling_period;
+
 /* Sort N entries in VALUE_ARRAY in descending order.
    Each entry in VALUE_ARRAY has two values. The sorting
    is based on the second value.  */
@@ -906,6 +1071,62 @@
      }
 }
 
+/* Scaling LIPO sampled profile counters.  */
+static void
+gcov_scaling_lipo_counters (const struct gcov_info *gi_ptr)
+{
+  unsigned int i,j,k;
+  int f_ix;
+  const struct gcov_fn_info *gfi_ptr;
+  const struct gcov_ctr_info *ci_ptr;
+
+  if (__gcov_lipo_sampling_period <= 1)
+    return;
+
+  for (f_ix = 0; (unsigned)f_ix != gi_ptr->n_functions; f_ix++)
+    {
+      gfi_ptr = gi_ptr->functions[f_ix];
+      ci_ptr = gfi_ptr->ctrs;
+      for (i = 0; i < GCOV_COUNTERS; i++)
+        {
+          if (!gcov_counter_active (gi_ptr, i))
+            continue;
+          if (i == GCOV_COUNTER_ICALL_TOPNV)
+            {
+              for (j = 0; j < ci_ptr->num; j += GCOV_ICALL_TOPN_NCOUNTS)
+                for (k = 2; k < GCOV_ICALL_TOPN_NCOUNTS; k += 2)
+                  ci_ptr->values[j+k] *= __gcov_lipo_sampling_period;
+            }
+          if (i == GCOV_COUNTER_DIRECT_CALL)
+            {
+              for (j = 0; j < ci_ptr->num; j += 2)
+                ci_ptr->values[j+1] *= __gcov_lipo_sampling_period;
+            }
+          ci_ptr++;
+        }
+    }
+}
+
+/* Open a gcda file specified by GI_FILENAME.
+   Return -1 on error.  Return 0 on success.  */
+
+static int 
+gcov_exit_open_gcda_file (struct gcov_info *gi_ptr, struct gcov_filename_aux *gf)
+{
+  int gcov_prefix_strip;
+  size_t prefix_length;
+  char *gi_filename_up;
+
+  gcov_prefix_strip = gf->gcov_prefix_strip;
+  gi_filename_up = gf->gi_filename_up;
+  prefix_length = gf->prefix_length;
+
+  gcov_strip_leading_dirs (prefix_length, gcov_prefix_strip, gi_ptr->filename,
+                           gi_filename_up);
+
+  return gcov_open_by_filename (gi_filename);
+}
+
 /* Dump the coverage counts for one gcov_info object. We merge with existing
    counts when possible, to avoid growing the .da files ad infinitum. We use
    this program's checksum to make sure we only accumulate whole program
@@ -918,9 +1139,14 @@
 		     gcov_unsigned_t crc32, struct gcov_summary *all_prg,
                      struct gcov_summary *this_prg)
 {
+/* We have to make the decl static as kernel has limited stack size.
+   If we put prg to stack, we will running into nasty stack overflow.  */
+#if defined(__KERNEL__)
+  static
+#endif
   struct gcov_summary prg; /* summary for this object over all program.  */
   int error;
-  gcov_unsigned_t tag;
+  gcov_unsigned_t tag = 0;
   gcov_position_t summary_pos = 0;
   gcov_position_t eof_pos = 0;
 
@@ -928,12 +1154,15 @@
   sum_buffer = 0;
 
   gcov_sort_topn_counter_arrays (gi_ptr);
+  gcov_scaling_lipo_counters (gi_ptr);
 
   error = gcov_exit_open_gcda_file (gi_ptr, gf);
   if (error == -1)
     return;
 
+#if !defined(__KERNEL__)
   tag = gcov_read_unsigned ();
+#endif
   if (tag)
     {
       /* Merge data from file.  */
@@ -964,8 +1193,21 @@
   /* fall through */
 
 read_fatal:;
+#if !defined(__KERNEL__)
   while (fn_buffer)
     fn_buffer = free_fn_data (gi_ptr, fn_buffer, GCOV_COUNTERS);
+#else
+
+      /* In LIPO mode, dump the primary module info.  */
+      if (gi_ptr->mod_info && gi_ptr->mod_info->is_primary)
+        {
+          /* Overwrite the zero word at the of the file.  */
+          gcov_seek (gi_ptr->eof_pos);
+          gcov_write_module_info (gi_ptr, 1);
+          /* Write the end marker  */
+          gcov_write_unsigned (0); 
+        }
+#endif
 
   if ((error = gcov_close ()))
     gcov_error (error  < 0 ?
@@ -974,6 +1216,7 @@
                 gi_filename);
 }
 
+#if !defined (__KERNEL__)
 /* Write imported files (auxiliary modules) for primary module GI_PTR
    into file GI_FILENAME.  */
 
@@ -1009,7 +1252,7 @@
               fprintf (imports_file, "%s%s\n",
                        imp_mods[i]->imp_mod->mod_info->da_filename, GCOV_DATA_SUFFIX);
             }
-          free (imp_mods);
+          xfree (imp_mods);
         }
       fclose (imports_file);
     }
@@ -1020,9 +1263,24 @@
 {
   struct gcov_info *gi_ptr;
 
+  unsigned max_module_id = 0;
+  for (gi_ptr = __gcov_list; gi_ptr; gi_ptr = gi_ptr->next)
+    {
+      unsigned mod_id = gi_ptr->mod_info->ident;
+      if (max_module_id < mod_id)
+        max_module_id = mod_id;
+    }
+  char **zero_counts = (char **) xcalloc (max_module_id, sizeof (char *));
+  for (gi_ptr = __gcov_list; gi_ptr; gi_ptr = gi_ptr->next)
+    {
+      unsigned mod_id = gi_ptr->mod_info->ident;
+      zero_counts[mod_id-1] = (char *) xcalloc (gi_ptr->n_functions,
+                                               sizeof (char));
+    }
+
   /* Compute the module groups and record whether there were any
      counter fixups applied that require rewriting the counters.  */
-  int changed = __gcov_compute_module_groups ();
+  int changed = __gcov_compute_module_groups (zero_counts);
 
   /* Now write out module group info.  */
   for (gi_ptr = __gcov_list; gi_ptr; gi_ptr = gi_ptr->next)
@@ -1034,10 +1292,10 @@
 
       if (changed)
         {
-          /* Scan file to find the end of the summary section, which is
+          /* Scan file to find the start of the function section, which is
              where we will start re-writing the counters.  */
           gcov_position_t summary_end_pos;
-          if (gcov_scan_summary_end (gi_ptr, &summary_end_pos) == -1)
+          if (gcov_scan_to_function_data (gi_ptr, &summary_end_pos) == -1)
             gcov_error ("profiling:%s:Error scanning summaries\n",
                         gi_filename);
           else
@@ -1045,8 +1303,15 @@
               gcov_position_t eof_pos = gi_ptr->eof_pos;
               gcov_rewrite ();
               gcov_seek (summary_end_pos);
+
+              unsigned mod_id = gi_ptr->mod_info->ident;
+              gcov_write_comdat_zero_fixup (zero_counts[mod_id-1],
+                                            gi_ptr->n_functions);
+              gcov_position_t zero_fixup_eof_pos = gcov_position ();
+
               gcov_write_func_counters (gi_ptr);
-              gcc_assert (eof_pos == gi_ptr->eof_pos);
+              gcc_assert (eof_pos + (zero_fixup_eof_pos - summary_end_pos)
+                          == gi_ptr->eof_pos);
             }
         }
       else
@@ -1065,7 +1330,11 @@
                                   "profiling:%s:Error writing\n",
                                   gi_filename);
       gcov_write_import_file (gi_filename, gi_ptr);
+      free (zero_counts[gi_ptr->mod_info->ident-1]);
     }
+
+  free (zero_counts);
+
   __gcov_finalize_dyn_callgraph ();
 }
 
@@ -1102,7 +1371,8 @@
 
       /* The IS_PRIMARY field is overloaded to indicate if this module
        is FDO/LIPO.  */
-      dump_module_info |= gi_ptr->mod_info->is_primary;
+      if (gi_ptr->mod_info)
+        dump_module_info |= gi_ptr->mod_info->is_primary;
     }
   run_accounted = 1;
 
@@ -1110,38 +1380,7 @@
     gcov_dump_module_info (&gf);
 
   if (gi_filename)
-    free (gi_filename);
-}
-
-/* Reset all counters to zero.  */
-
-void
-gcov_clear (void)
-{
-  const struct gcov_info *gi_ptr;
-
-  for (gi_ptr = __gcov_list; gi_ptr; gi_ptr = gi_ptr->next)
-    {
-      unsigned f_ix;
-
-      for (f_ix = 0; f_ix < gi_ptr->n_functions; f_ix++)
-        {
-          unsigned t_ix;
-          const struct gcov_fn_info *gfi_ptr = gi_ptr->functions[f_ix];
-
-          if (!gfi_ptr || gfi_ptr->key != gi_ptr)
-            continue;
-          const struct gcov_ctr_info *ci_ptr = gfi_ptr->ctrs;
-          for (t_ix = 0; t_ix != GCOV_COUNTERS; t_ix++)
-            {
-              if (!gi_ptr->merge[t_ix])
-                continue;
-
-              memset (ci_ptr->values, 0, sizeof (gcov_type) * ci_ptr->num);
-              ci_ptr++;
-            }
-        }
-    }
+    xfree (gi_filename);
 }
 
 /* Add a new object file onto the bb chain.  Invoked automatically
@@ -1160,6 +1399,13 @@
           if (env_value_int >= 1)
             __gcov_sampling_period = env_value_int;
         }
+      env_value_str = getenv ("GCOV_LIPO_SAMPLING_PERIOD");
+      if (env_value_str)
+        {
+          int env_value_int = atoi(env_value_str);
+          if (env_value_int >= 0)
+            __gcov_lipo_sampling_period = env_value_int;
+        }
       gcov_sampling_period_initialized = 1;
     }
 #endif
@@ -1189,5 +1435,116 @@
   info->version = 0;
 }
 
+#else /* __KERNEL__ */
+
+static struct gcov_filename_aux gf;
+static gcov_unsigned_t crc32;
+static struct gcov_summary all_prg;
+static struct gcov_summary this_prg;
+void
+gcov_kernel_dump_gcov_init (void)
+{
+  crc32 = gcov_exit_compute_summary (&this_prg);
+  allocate_filename_struct (&gf);
+  memset (&all_prg, 0, sizeof (all_prg));
+}
+
+void
+gcov_kernel_dump_one_gcov(struct gcov_info *info)
+{
+  gcov_exit_dump_gcov (info, &gf, crc32, &all_prg, &this_prg);
+}
+
+#endif /* __KERNEL__ */
+
+/* Reset all counters to zero.  */
+
+void
+gcov_clear (void)
+{
+  const struct gcov_info *gi_ptr;
+
+  for (gi_ptr = __gcov_list; gi_ptr; gi_ptr = gi_ptr->next)
+    {
+      unsigned f_ix;
+
+      for (f_ix = 0; f_ix < gi_ptr->n_functions; f_ix++)
+        {
+          unsigned t_ix;
+          const struct gcov_fn_info *gfi_ptr = gi_ptr->functions[f_ix];
+          const struct gcov_ctr_info *ci_ptr;
+
+          if (!gfi_ptr || gfi_ptr->key != gi_ptr)
+            continue;
+          ci_ptr = gfi_ptr->ctrs;
+          for (t_ix = 0; t_ix != GCOV_COUNTERS; t_ix++)
+            {
+              if (!gi_ptr->merge[t_ix])
+                continue;
+
+              memset (ci_ptr->values, 0, sizeof (gcov_type) * ci_ptr->num);
+              ci_ptr++;
+            }
+        }
+    }
+}
+
+/* Write out MOD_INFO into the gcda file. IS_PRIMARY is a flag
+   indicating if the module is the primary module in the group.  */
+
+void
+gcov_write_module_info (const struct gcov_info *mod_info,
+                        unsigned is_primary)
+{
+  gcov_unsigned_t len = 0, filename_len = 0, src_filename_len = 0, i;
+  gcov_unsigned_t num_strings;
+  gcov_unsigned_t *aligned_fname;
+  struct gcov_module_info  *module_info = mod_info->mod_info;
+  filename_len = (strlen (module_info->da_filename) +
+		  sizeof (gcov_unsigned_t)) / sizeof (gcov_unsigned_t);
+  src_filename_len = (strlen (module_info->source_filename) +
+		      sizeof (gcov_unsigned_t)) / sizeof (gcov_unsigned_t);
+  len = filename_len + src_filename_len;
+  len += 2; /* each name string is led by a length.  */
+
+  num_strings = module_info->num_quote_paths + module_info->num_bracket_paths
+    + module_info->num_system_paths
+    + module_info->num_cpp_defines + module_info->num_cpp_includes
+    + module_info->num_cl_args;
+  len += gcov_compute_string_array_len (module_info->string_array,
+                                        num_strings);
+
+  len += 11; /* 11 more fields */
+
+  gcov_write_tag_length (GCOV_TAG_MODULE_INFO, len);
+  gcov_write_unsigned (module_info->ident);
+  gcov_write_unsigned (is_primary);
+  gcov_write_unsigned (module_info->flags);
+  gcov_write_unsigned (module_info->lang);
+  gcov_write_unsigned (module_info->ggc_memory);
+  gcov_write_unsigned (module_info->num_quote_paths);
+  gcov_write_unsigned (module_info->num_bracket_paths);
+  gcov_write_unsigned (module_info->num_system_paths);
+  gcov_write_unsigned (module_info->num_cpp_defines);
+  gcov_write_unsigned (module_info->num_cpp_includes);
+  gcov_write_unsigned (module_info->num_cl_args);
+
+  /* Now write the filenames */
+  aligned_fname = (gcov_unsigned_t *) alloca ((filename_len + src_filename_len + 2) *
+					      sizeof (gcov_unsigned_t));
+  memset (aligned_fname, 0,
+          (filename_len + src_filename_len + 2) * sizeof (gcov_unsigned_t));
+  aligned_fname[0] = filename_len;
+  strcpy ((char*) (aligned_fname + 1), module_info->da_filename);
+  aligned_fname[filename_len + 1] = src_filename_len;
+  strcpy ((char*) (aligned_fname + filename_len + 2), module_info->source_filename);
+
+  for (i = 0; i < (filename_len + src_filename_len + 2); i++)
+    gcov_write_unsigned (aligned_fname[i]);
+
+  /* Now write the string array.  */
+  gcov_write_string_array (module_info->string_array, num_strings);
+}
+
 #endif /* L_gcov */
 #endif /* inhibit_libc */
diff --git a/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-kernel.h b/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-kernel.h
new file mode 100644
index 0000000..b44af53
--- /dev/null
+++ b/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-kernel.h
@@ -0,0 +1,121 @@
+/* Header file for libgcov-*.c.
+   Copyright (C) 1996-2014 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/>.  */
+
+#ifndef GCC_LIBGCOV_KERNEL_H
+#define GCC_LIBGCOV_KERNEL_H
+
+/* work around the poisoned malloc/calloc in system.h.  */
+#ifndef xmalloc
+#define xmalloc vmalloc
+#endif
+#ifndef xcalloc
+#define xcalloc vcalloc
+#endif
+#ifndef xrealloc
+#define xrealloc vrealloc
+#endif
+#ifndef xfree
+#define xfree vfree
+#endif
+#ifndef alloca
+#define alloca __builtin_alloca
+#endif
+
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
+
+ /* Define MACROs to be used by kernel compilation.  */
+# define L_gcov
+# define L_gcov_interval_profiler
+# define L_gcov_pow2_profiler
+# define L_gcov_one_value_profiler
+# define L_gcov_indirect_call_profiler_v2
+# define L_gcov_direct_call_profiler
+# define L_gcov_indirect_call_profiler
+# define L_gcov_indirect_call_topn_profiler
+# define L_gcov_time_profiler
+# define L_gcov_average_profiler
+# define L_gcov_ior_profiler
+# define L_gcov_merge_add
+# define L_gcov_merge_single
+# define L_gcov_merge_delta
+# define L_gcov_merge_ior
+# define L_gcov_merge_time_profile
+# define L_gcov_merge_icall_topn
+# define L_gcov_merge_dc
+
+# define IN_LIBGCOV 1
+# define IN_GCOV 0
+#define THREAD_PREFIX
+#define GCOV_LINKAGE /* nothing */
+#define BITS_PER_UNIT 8
+#define LONG_LONG_TYPE_SIZE 64
+#define MEMMODEL_RELAXED 0
+
+#define ENABLE_ASSERT_CHECKING 1
+
+/* gcc_assert() prints out a warning if the check fails. It
+   will not abort.  */
+#if ENABLE_ASSERT_CHECKING
+# define gcc_assert(EXPR) \
+    ((void)(!(EXPR) ? printk (KERN_WARNING \
+      "GCOV assertion fails: func=%s line=%d\n", \
+      __FUNCTION__, __LINE__), 0 : 0))
+#else
+# define gcc_assert(EXPR) ((void)(0 && (EXPR)))
+#endif
+
+/* In Linux kernel mode, a virtual file is used for file operations.  */
+struct gcov_info;
+typedef struct {
+  long size; /* size of buf */
+  long count; /* element written into buf */
+  struct gcov_info *info;
+  char *buf;
+} gcov_kernel_vfile;
+
+#define _GCOV_FILE gcov_kernel_vfile
+
+/* Wrappers to the file operations.  */
+#define _GCOV_fclose     kernel_file_fclose
+#define _GCOV_ftell      kernel_file_ftell
+#define _GCOV_fseek      kernel_file_fseek
+#define _GCOV_ftruncate  kernel_file_ftruncate
+#define _GCOV_fread      kernel_file_fread
+#define _GCOV_fwrite     kernel_file_fwrite
+#define _GCOV_fileno     kernel_file_fileno
+
+/* Declarations for virtual files operations.  */
+extern int kernel_file_fclose (gcov_kernel_vfile *);
+extern long kernel_file_ftell (gcov_kernel_vfile *);
+extern int kernel_file_fseek (gcov_kernel_vfile *, long, int);
+extern int kernel_file_ftruncate (gcov_kernel_vfile *, off_t);
+extern int kernel_file_fread (void *, size_t, size_t,
+    gcov_kernel_vfile *);
+extern int kernel_file_fwrite (const void *, size_t, size_t,
+    gcov_kernel_vfile *);
+extern int kernel_file_fileno (gcov_kernel_vfile *);
+
+#endif /* GCC_LIBGCOV_KERNEL_H */
diff --git a/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-merge.c b/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-merge.c
new file mode 100644
index 0000000..997dab3
--- /dev/null
+++ b/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-merge.c
@@ -0,0 +1,299 @@
+/* Routines required for instrumenting a program.  */
+/* Compile this one with gcc.  */
+/* Copyright (C) 1989-2014 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/>.  */
+
+#include "libgcov.h"
+
+#if defined(inhibit_libc)
+/* If libc and its header files are not available, provide dummy functions.  */
+
+#ifdef L_gcov_merge_add
+void __gcov_merge_add (gcov_type *counters  __attribute__ ((unused)),
+                       unsigned n_counters __attribute__ ((unused))) {}
+#endif
+
+#ifdef L_gcov_merge_single
+void __gcov_merge_single (gcov_type *counters  __attribute__ ((unused)),
+                          unsigned n_counters __attribute__ ((unused))) {}
+#endif
+
+#ifdef L_gcov_merge_delta
+void __gcov_merge_delta (gcov_type *counters  __attribute__ ((unused)),
+                         unsigned n_counters __attribute__ ((unused))) {}
+#endif
+
+#else
+
+#ifdef L_gcov_merge_add
+/* The profile merging function that just adds the counters.  It is given
+   an array COUNTERS of N_COUNTERS old counters and it reads the same number
+   of counters from the gcov file.  */
+void
+__gcov_merge_add (gcov_type *counters, unsigned n_counters)
+{
+  for (; n_counters; counters++, n_counters--)
+    *counters += gcov_get_counter ();
+}
+#endif /* L_gcov_merge_add */
+
+#ifdef L_gcov_merge_ior
+/* The profile merging function that just adds the counters.  It is given
+   an array COUNTERS of N_COUNTERS old counters and it reads the same number
+   of counters from the gcov file.  */
+void
+__gcov_merge_ior (gcov_type *counters, unsigned n_counters)
+{
+  for (; n_counters; counters++, n_counters--)
+    *counters |= gcov_get_counter_target ();
+}
+#endif
+
+
+#ifdef L_gcov_merge_dc
+
+/* Returns 1 if the function global id GID is not valid.  */
+
+static int
+__gcov_is_gid_insane (gcov_type gid)
+{
+  if (EXTRACT_MODULE_ID_FROM_GLOBAL_ID (gid) == 0
+      || EXTRACT_FUNC_ID_FROM_GLOBAL_ID (gid) == 0)
+    return 1;
+  return 0;
+}
+
+/* The profile merging function used for merging direct call counts
+   This function is given array COUNTERS of N_COUNTERS old counters and it
+   reads the same number of counters from the gcov file.  */
+
+void
+__gcov_merge_dc (gcov_type *counters, unsigned n_counters)
+{
+  unsigned i;
+
+  gcc_assert (!(n_counters % 2));
+  for (i = 0; i < n_counters; i += 2)
+    {
+      gcov_type global_id = gcov_get_counter_target ();
+      gcov_type call_count = gcov_get_counter ();
+
+      /* Note that global id counter may never have been set if no calls were
+	 made from this call-site.  */
+      if (counters[i] && global_id)
+        {
+          /* TODO race condition requires us do the following correction.  */
+          if (__gcov_is_gid_insane (counters[i]))
+            counters[i] = global_id;
+          else if (__gcov_is_gid_insane (global_id))
+            global_id = counters[i];
+
+#if !defined(__KERNEL__)
+          /* In the case of inconsistency, use the src's target.  */
+          if (counters[i] != global_id)
+            fprintf (stderr, "Warning: Inconsistent call targets in"
+                     " direct-call profile.\n");
+#endif
+        }
+      else if (global_id)
+	counters[i] = global_id;
+
+      counters[i + 1] += call_count;
+
+      /* Reset. */
+      if (__gcov_is_gid_insane (counters[i]))
+        counters[i] = counters[i + 1] = 0;
+
+      /* Assert that the invariant (global_id == 0) <==> (call_count == 0)
+	 holds true after merging.  */
+      if (counters[i] == 0)
+        counters[i+1] = 0;
+      if (counters[i + 1] == 0)
+        counters[i] = 0;
+    }
+}
+#endif
+
+
+#ifdef L_gcov_merge_icall_topn
+/* The profile merging function used for merging indirect call counts
+   This function is given array COUNTERS of N_COUNTERS old counters and it
+   reads the same number of counters from the gcov file.  */
+
+void
+__gcov_merge_icall_topn (gcov_type *counters, unsigned n_counters)
+{
+  unsigned i, j, k, m;
+
+  gcc_assert (!(n_counters % GCOV_ICALL_TOPN_NCOUNTS));
+  for (i = 0; i < n_counters; i += GCOV_ICALL_TOPN_NCOUNTS)
+    {
+      gcov_type *value_array = &counters[i + 1];
+      unsigned tmp_size = 2 * (GCOV_ICALL_TOPN_NCOUNTS - 1);
+      gcov_type *tmp_array 
+          = (gcov_type *) alloca (tmp_size * sizeof (gcov_type));
+
+      for (j = 0; j < tmp_size; j++)
+        tmp_array[j] = 0;
+
+      for (j = 0; j < GCOV_ICALL_TOPN_NCOUNTS - 1; j += 2)
+        {
+          tmp_array[j] = value_array[j];
+          tmp_array[j + 1] = value_array [j + 1];
+        }
+
+      /* Skip the number_of_eviction entry.  */
+      gcov_get_counter ();
+      for (k = 0; k < GCOV_ICALL_TOPN_NCOUNTS - 1; k += 2)
+        {
+          int found = 0;
+          gcov_type global_id = gcov_get_counter_target ();
+          gcov_type call_count = gcov_get_counter ();
+          for (m = 0; m < j; m += 2)
+            {
+              if (tmp_array[m] == global_id)
+                {
+                  found = 1;
+                  tmp_array[m + 1] += call_count;
+                  break;
+                }
+            }
+          if (!found)
+            {
+              tmp_array[j] = global_id;
+              tmp_array[j + 1] = call_count;
+              j += 2;
+            }
+        }
+      /* Now sort the temp array */
+      gcov_sort_n_vals (tmp_array, j);
+
+      /* Now copy back the top half of the temp array */
+      for (k = 0; k < GCOV_ICALL_TOPN_NCOUNTS - 1; k += 2)
+        {
+          value_array[k] = tmp_array[k];
+          value_array[k + 1] = tmp_array[k + 1];
+        }
+    }
+}
+#endif
+
+
+#ifdef L_gcov_merge_time_profile
+/* Time profiles are merged so that minimum from all valid (greater than zero)
+   is stored. There could be a fork that creates new counters. To have
+   the profile stable, we chosen to pick the smallest function visit time.  */
+void
+__gcov_merge_time_profile (gcov_type *counters, unsigned n_counters)
+{
+  unsigned int i;
+  gcov_type value;
+
+  for (i = 0; i < n_counters; i++)
+    {
+      value = gcov_get_counter_target ();
+
+      if (value && (!counters[i] || value < counters[i]))
+        counters[i] = value;
+    }
+}
+#endif /* L_gcov_merge_time_profile */
+
+#ifdef L_gcov_merge_single
+/* The profile merging function for choosing the most common value.
+   It is given an array COUNTERS of N_COUNTERS old counters and it
+   reads the same number of counters from the gcov file.  The counters
+   are split into 3-tuples where the members of the tuple have
+   meanings:
+
+   -- the stored candidate on the most common value of the measured entity
+   -- counter
+   -- total number of evaluations of the value  */
+void
+__gcov_merge_single (gcov_type *counters, unsigned n_counters)
+{
+  unsigned i, n_measures;
+  gcov_type value, counter, all;
+
+  gcc_assert (!(n_counters % 3));
+  n_measures = n_counters / 3;
+  for (i = 0; i < n_measures; i++, counters += 3)
+    {
+      value = gcov_get_counter_target ();
+      counter = gcov_get_counter ();
+      all = gcov_get_counter ();
+
+      if (counters[0] == value)
+        counters[1] += counter;
+      else if (counter > counters[1])
+        {
+          counters[0] = value;
+          counters[1] = counter - counters[1];
+        }
+      else
+        counters[1] -= counter;
+      counters[2] += all;
+    }
+}
+#endif /* L_gcov_merge_single */
+
+#ifdef L_gcov_merge_delta
+/* The profile merging function for choosing the most common
+   difference between two consecutive evaluations of the value.  It is
+   given an array COUNTERS of N_COUNTERS old counters and it reads the
+   same number of counters from the gcov file.  The counters are split
+   into 4-tuples where the members of the tuple have meanings:
+
+   -- the last value of the measured entity
+   -- the stored candidate on the most common difference
+   -- counter
+   -- total number of evaluations of the value  */
+void
+__gcov_merge_delta (gcov_type *counters, unsigned n_counters)
+{
+  unsigned i, n_measures;
+  gcov_type value, counter, all;
+
+  gcc_assert (!(n_counters % 4));
+  n_measures = n_counters / 4;
+  for (i = 0; i < n_measures; i++, counters += 4)
+    {
+      /* last = */ gcov_get_counter ();
+      value = gcov_get_counter_target ();
+      counter = gcov_get_counter ();
+      all = gcov_get_counter ();
+
+      if (counters[1] == value)
+        counters[2] += counter;
+      else if (counter > counters[2])
+        {
+          counters[1] = value;
+          counters[2] = counter - counters[2];
+        }
+      else
+        counters[2] -= counter;
+      counters[3] += all;
+    }
+}
+#endif /* L_gcov_merge_delta */
+#endif /* inhibit_libc */
diff --git a/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-profiler.c b/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-profiler.c
new file mode 100644
index 0000000..7552ada
--- /dev/null
+++ b/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov-profiler.c
@@ -0,0 +1,477 @@
+/* Routines required for instrumenting a program.  */
+/* Compile this one with gcc.  */
+/* Copyright (C) 1989-2014 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/>.  */
+
+#include "libgcov.h"
+#if !defined(inhibit_libc)
+
+#ifdef L_gcov_interval_profiler
+/* If VALUE is in interval <START, START + STEPS - 1>, then increases the
+   corresponding counter in COUNTERS.  If the VALUE is above or below
+   the interval, COUNTERS[STEPS] or COUNTERS[STEPS + 1] is increased
+   instead.  */
+
+void
+__gcov_interval_profiler (gcov_type *counters, gcov_type value,
+                          int start, unsigned steps)
+{
+  gcov_type delta = value - start;
+  if (delta < 0)
+    counters[steps + 1]++;
+  else if (delta >= steps)
+    counters[steps]++;
+  else
+    counters[delta]++;
+}
+#endif
+
+#ifdef L_gcov_pow2_profiler
+/* If VALUE is a power of two, COUNTERS[1] is incremented.  Otherwise
+   COUNTERS[0] is incremented.  */
+
+void
+__gcov_pow2_profiler (gcov_type *counters, gcov_type value)
+{
+  if (value & (value - 1))
+    counters[0]++;
+  else
+    counters[1]++;
+}
+#endif
+
+/* Tries to determine the most common value among its inputs.  Checks if the
+   value stored in COUNTERS[0] matches VALUE.  If this is the case, COUNTERS[1]
+   is incremented.  If this is not the case and COUNTERS[1] is not zero,
+   COUNTERS[1] is decremented.  Otherwise COUNTERS[1] is set to one and
+   VALUE is stored to COUNTERS[0].  This algorithm guarantees that if this
+   function is called more than 50% of the time with one value, this value
+   will be in COUNTERS[0] in the end.
+
+   In any case, COUNTERS[2] is incremented.  */
+
+static inline void
+__gcov_one_value_profiler_body (gcov_type *counters, gcov_type value)
+{
+  if (value == counters[0])
+    counters[1]++;
+  else if (counters[1] == 0)
+    {
+      counters[1] = 1;
+      counters[0] = value;
+    }
+  else
+    counters[1]--;
+  counters[2]++;
+}
+
+/* Atomic update version of __gcov_one_value_profile_body().  */
+static inline void
+__gcov_one_value_profiler_body_atomic (gcov_type *counters, gcov_type value)
+{
+  if (value == counters[0])
+    GCOV_TYPE_ATOMIC_FETCH_ADD_FN (&counters[1], 1, MEMMODEL_RELAXED);
+  else if (counters[1] == 0)
+    {
+      counters[1] = 1;
+      counters[0] = value;
+    }
+  else
+    GCOV_TYPE_ATOMIC_FETCH_ADD_FN (&counters[1], -1, MEMMODEL_RELAXED);
+  GCOV_TYPE_ATOMIC_FETCH_ADD_FN (&counters[2], 1, MEMMODEL_RELAXED);
+}
+
+
+#ifdef L_gcov_one_value_profiler
+void
+__gcov_one_value_profiler (gcov_type *counters, gcov_type value)
+{
+  __gcov_one_value_profiler_body (counters, value);
+}
+
+void
+__gcov_one_value_profiler_atomic (gcov_type *counters, gcov_type value)
+{
+  __gcov_one_value_profiler_body_atomic (counters, value);
+}
+
+
+#endif
+
+#ifdef L_gcov_indirect_call_profiler
+/* This function exist only for workaround of binutils bug 14342.
+   Once this compatibility hack is obsolette, it can be removed.  */
+
+/* By default, the C++ compiler will use function addresses in the
+   vtable entries.  Setting TARGET_VTABLE_USES_DESCRIPTORS to nonzero
+   tells the compiler to use function descriptors instead.  The value
+   of this macro says how many words wide the descriptor is (normally 2),
+   but it may be dependent on target flags.  Since we do not have access
+   to the target flags here we just check to see if it is set and use
+   that to set VTABLE_USES_DESCRIPTORS to 0 or 1.
+
+   It is assumed that the address of a function descriptor may be treated
+   as a pointer to a function.  */
+
+#ifdef TARGET_VTABLE_USES_DESCRIPTORS
+#define VTABLE_USES_DESCRIPTORS 1
+#else
+#define VTABLE_USES_DESCRIPTORS 0
+#endif
+
+/* Tries to determine the most common value among its inputs. */
+void
+__gcov_indirect_call_profiler (gcov_type* counter, gcov_type value,
+                               void* cur_func, void* callee_func)
+{
+  /* If the C++ virtual tables contain function descriptors then one
+     function may have multiple descriptors and we need to dereference
+     the descriptors to see if they point to the same function.  */
+  if (cur_func == callee_func
+      || (VTABLE_USES_DESCRIPTORS && callee_func
+          && *(void **) cur_func == *(void **) callee_func))
+    __gcov_one_value_profiler_body (counter, value);
+}
+
+
+/* Atomic update version of __gcov_indirect_call_profiler().  */
+void
+__gcov_indirect_call_profiler_atomic (gcov_type* counter, gcov_type value,
+                                      void* cur_func, void* callee_func)
+{
+  if (cur_func == callee_func
+      || (VTABLE_USES_DESCRIPTORS && callee_func
+          && *(void **) cur_func == *(void **) callee_func))
+    __gcov_one_value_profiler_body_atomic (counter, value);
+}
+
+
+#endif
+#ifdef L_gcov_indirect_call_profiler_v2
+
+/* These two variables are used to actually track caller and callee.  Keep
+   them in TLS memory so races are not common (they are written to often).
+   The variables are set directly by GCC instrumented code, so declaration
+   here must match one in tree-profile.c  */
+
+#if defined(HAVE_CC_TLS) && !defined (USE_EMUTLS)
+__thread
+#endif
+void * __gcov_indirect_call_callee;
+#if defined(HAVE_CC_TLS) && !defined (USE_EMUTLS)
+__thread
+#endif
+gcov_type * __gcov_indirect_call_counters;
+
+/* By default, the C++ compiler will use function addresses in the
+   vtable entries.  Setting TARGET_VTABLE_USES_DESCRIPTORS to nonzero
+   tells the compiler to use function descriptors instead.  The value
+   of this macro says how many words wide the descriptor is (normally 2),
+   but it may be dependent on target flags.  Since we do not have access
+   to the target flags here we just check to see if it is set and use
+   that to set VTABLE_USES_DESCRIPTORS to 0 or 1.
+
+   It is assumed that the address of a function descriptor may be treated
+   as a pointer to a function.  */
+
+#ifdef TARGET_VTABLE_USES_DESCRIPTORS
+#define VTABLE_USES_DESCRIPTORS 1
+#else
+#define VTABLE_USES_DESCRIPTORS 0
+#endif
+
+/* Tries to determine the most common value among its inputs. */
+void
+__gcov_indirect_call_profiler_v2 (gcov_type value, void* cur_func)
+{
+  /* If the C++ virtual tables contain function descriptors then one
+     function may have multiple descriptors and we need to dereference
+     the descriptors to see if they point to the same function.  */
+  if (cur_func == __gcov_indirect_call_callee
+      || (VTABLE_USES_DESCRIPTORS && __gcov_indirect_call_callee
+          && *(void **) cur_func == *(void **) __gcov_indirect_call_callee))
+    __gcov_one_value_profiler_body (__gcov_indirect_call_counters, value);
+}
+
+void
+__gcov_indirect_call_profiler_atomic_v2 (gcov_type value, void* cur_func)
+{
+  /* If the C++ virtual tables contain function descriptors then one
+     function may have multiple descriptors and we need to dereference
+     the descriptors to see if they point to the same function.  */
+  if (cur_func == __gcov_indirect_call_callee
+      || (VTABLE_USES_DESCRIPTORS && __gcov_indirect_call_callee
+          && *(void **) cur_func == *(void **) __gcov_indirect_call_callee))
+    __gcov_one_value_profiler_body_atomic (__gcov_indirect_call_counters, value);
+}
+
+#endif
+
+/*
+#if defined(L_gcov_direct_call_profiler) || defined(L_gcov_indirect_call_topn_profiler)
+__attribute__ ((weak)) gcov_unsigned_t __gcov_lipo_sampling_period;
+#endif
+*/
+
+extern gcov_unsigned_t __gcov_lipo_sampling_period;
+
+#ifdef L_gcov_indirect_call_topn_profiler
+
+#include "gthr.h"
+
+#ifdef __GTHREAD_MUTEX_INIT
+__thread int in_profiler;
+ATTRIBUTE_HIDDEN __gthread_mutex_t __indir_topn_val_mx = __GTHREAD_MUTEX_INIT;
+#endif
+
+/* Tries to keep track the most frequent N values in the counters where
+   N is specified by parameter TOPN_VAL. To track top N values, 2*N counter
+   entries are used.
+   counter[0] --- the accumative count of the number of times one entry in
+                  in the counters gets evicted/replaced due to limited capacity.
+                  When this value reaches a threshold, the bottom N values are
+                  cleared.
+   counter[1] through counter[2*N] records the top 2*N values collected so far.
+   Each value is represented by two entries: count[2*i+1] is the ith value, and
+   count[2*i+2] is the number of times the value is seen.  */
+
+static void
+__gcov_topn_value_profiler_body (gcov_type *counters, gcov_type value,
+                                 gcov_unsigned_t topn_val)
+{
+   unsigned i, found = 0, have_zero_count = 0;
+
+   gcov_type *entry;
+   gcov_type *lfu_entry = &counters[1];
+   gcov_type *value_array = &counters[1];
+   gcov_type *num_eviction = &counters[0];
+
+   /* There are 2*topn_val values tracked, each value takes two slots in the
+      counter array */
+#ifdef __GTHREAD_MUTEX_INIT
+   /* If this is reentry, return.  */
+   if (in_profiler == 1)
+     return;
+
+   in_profiler = 1;
+   __gthread_mutex_lock (&__indir_topn_val_mx);
+#endif
+   for (i = 0; i < topn_val << 2; i += 2)
+     {
+       entry = &value_array[i];
+       if (entry[0] == value)
+         {
+           entry[1]++ ;
+           found = 1;
+           break;
+         }
+       else if (entry[1] == 0)
+         {
+           lfu_entry = entry;
+           have_zero_count = 1;
+         }
+      else if (entry[1] < lfu_entry[1])
+        lfu_entry = entry;
+     }
+
+   if (found)
+     {
+       in_profiler = 0;
+#ifdef __GTHREAD_MUTEX_INIT
+       __gthread_mutex_unlock (&__indir_topn_val_mx);
+#endif
+       return;
+     }
+
+   /* lfu_entry is either an empty entry or an entry
+      with lowest count, which will be evicted.  */
+   lfu_entry[0] = value;
+   lfu_entry[1] = 1;
+
+#define GCOV_ICALL_COUNTER_CLEAR_THRESHOLD 3000
+
+   /* Too many evictions -- time to clear bottom entries to
+      avoid hot values bumping each other out.  */
+   if (!have_zero_count
+       && ++*num_eviction >= GCOV_ICALL_COUNTER_CLEAR_THRESHOLD)
+     {
+       unsigned i, j;
+       gcov_type **p;
+       gcov_type **tmp_cnts
+         = (gcov_type **)alloca (topn_val * sizeof(gcov_type *));
+
+       *num_eviction = 0;
+
+       /* Find the largest topn_val values from the group of
+          2*topn_val values and put the addresses into tmp_cnts.  */
+       for (i = 0; i < topn_val; i++)
+         tmp_cnts[i] = &value_array[i * 2 + 1];
+
+       for (i = topn_val * 2; i < topn_val << 2; i += 2)
+         {
+           p = &tmp_cnts[0];
+           for (j = 1; j < topn_val; j++)
+             if (*tmp_cnts[j] > **p)
+               p = &tmp_cnts[j];
+           if (value_array[i + 1] < **p)
+             *p = &value_array[i + 1];
+         }
+
+       /* Zero out low value entries.  */
+       for (i = 0; i < topn_val; i++)
+         {
+           *tmp_cnts[i] = 0;
+           *(tmp_cnts[i] - 1) = 0;
+         }
+     }
+
+#ifdef __GTHREAD_MUTEX_INIT
+     in_profiler = 0;
+     __gthread_mutex_unlock (&__indir_topn_val_mx);
+#endif
+}
+
+#if defined(HAVE_CC_TLS) && !defined (USE_EMUTLS)
+__thread
+#endif
+gcov_type *__gcov_indirect_call_topn_counters ATTRIBUTE_HIDDEN;
+
+#if defined(HAVE_CC_TLS) && !defined (USE_EMUTLS)
+__thread
+#endif
+void *__gcov_indirect_call_topn_callee ATTRIBUTE_HIDDEN;
+
+#if defined(HAVE_CC_TLS) && !defined (USE_EMUTLS)
+__thread
+#endif
+gcov_unsigned_t __gcov_indirect_call_sampling_counter ATTRIBUTE_HIDDEN;
+
+#ifdef TARGET_VTABLE_USES_DESCRIPTORS
+#define VTABLE_USES_DESCRIPTORS 1
+#else
+#define VTABLE_USES_DESCRIPTORS 0
+#endif
+void
+__gcov_indirect_call_topn_profiler (void *cur_func,
+                                    void *cur_module_gcov_info,
+                                    gcov_unsigned_t cur_func_id)
+{
+  void *callee_func = __gcov_indirect_call_topn_callee;
+  gcov_type *counter = __gcov_indirect_call_topn_counters;
+  /* If the C++ virtual tables contain function descriptors then one
+     function may have multiple descriptors and we need to dereference
+     the descriptors to see if they point to the same function.  */
+  if (cur_func == callee_func
+      || (VTABLE_USES_DESCRIPTORS && callee_func
+         && *(void **) cur_func == *(void **) callee_func))
+    {
+      if (++__gcov_indirect_call_sampling_counter >= __gcov_lipo_sampling_period)
+        {
+          __gcov_indirect_call_sampling_counter = 0;
+          gcov_type global_id
+              = ((struct gcov_info *) cur_module_gcov_info)->mod_info->ident;
+          global_id = GEN_FUNC_GLOBAL_ID (global_id, cur_func_id);
+          __gcov_topn_value_profiler_body (counter, global_id, GCOV_ICALL_TOPN_VAL);
+        }
+      __gcov_indirect_call_topn_callee = 0;
+    }
+}
+
+#endif
+
+#ifdef L_gcov_direct_call_profiler
+#if defined(HAVE_CC_TLS) && !defined (USE_EMUTLS)
+__thread
+#endif
+gcov_type *__gcov_direct_call_counters ATTRIBUTE_HIDDEN;
+#if defined(HAVE_CC_TLS) && !defined (USE_EMUTLS)
+__thread
+#endif
+void *__gcov_direct_call_callee ATTRIBUTE_HIDDEN;
+#if defined(HAVE_CC_TLS) && !defined (USE_EMUTLS)
+__thread
+#endif
+gcov_unsigned_t __gcov_direct_call_sampling_counter ATTRIBUTE_HIDDEN;
+
+/* Direct call profiler. */
+
+void
+__gcov_direct_call_profiler (void *cur_func,
+           void *cur_module_gcov_info,
+           gcov_unsigned_t cur_func_id)
+{
+  if (cur_func == __gcov_direct_call_callee)
+    {
+      if (++__gcov_direct_call_sampling_counter >= __gcov_lipo_sampling_period)
+        {
+          __gcov_direct_call_sampling_counter = 0;
+          gcov_type global_id
+              = ((struct gcov_info *) cur_module_gcov_info)->mod_info->ident;
+          global_id = GEN_FUNC_GLOBAL_ID (global_id, cur_func_id);
+          __gcov_direct_call_counters[0] = global_id;
+          __gcov_direct_call_counters[1]++;
+        }
+      __gcov_direct_call_callee = 0;
+    }
+}
+#endif
+
+
+#ifdef L_gcov_time_profiler
+
+/* Counter for first visit of each function.  */
+static gcov_type function_counter;
+
+/* Sets corresponding COUNTERS if there is no value.  */
+
+void
+__gcov_time_profiler (gcov_type* counters)
+{
+  if (!counters[0])
+    counters[0] = ++function_counter;
+}
+#endif
+
+#ifdef L_gcov_average_profiler
+/* Increase corresponding COUNTER by VALUE.  FIXME: Perhaps we want
+   to saturate up.  */
+
+void
+__gcov_average_profiler (gcov_type *counters, gcov_type value)
+{
+  counters[0] += value;
+  counters[1] ++;
+}
+#endif
+
+#ifdef L_gcov_ior_profiler
+/* Bitwise-OR VALUE into COUNTER.  */
+
+void
+__gcov_ior_profiler (gcov_type *counters, gcov_type value)
+{
+  *counters |= value;
+}
+#endif
+
+#endif /* inhibit_libc */
diff --git a/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov.h b/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov.h
new file mode 100644
index 0000000..c1ebe6e
--- /dev/null
+++ b/lib/gcc/mips64el-linux-android/4.9/gcov-src/libgcov.h
@@ -0,0 +1,421 @@
+/* Header file for libgcov-*.c.
+   Copyright (C) 1996-2014 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/>.  */
+
+#ifndef GCC_LIBGCOV_H
+#define GCC_LIBGCOV_H
+
+#ifndef __KERNEL__
+/* work around the poisoned malloc/calloc in system.h.  */
+#ifndef xmalloc
+#define xmalloc malloc
+#endif
+#ifndef xcalloc
+#define xcalloc calloc
+#endif
+#ifndef xrealloc
+#define xrealloc realloc
+#endif
+#ifndef xfree
+#define xfree free
+#endif
+#else /* __KERNEL__ */
+#include "libgcov-kernel.h"
+#endif /* __KERNEL__ */
+
+#ifndef IN_GCOV_TOOL
+/* About the target.  */
+/* This path will be used by libgcov runtime.  */
+
+#ifndef __KERNEL__
+#include "tconfig.h"
+#include "tsystem.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "libgcc_tm.h"
+#endif /* __KERNEL__ */
+
+#undef FUNC_ID_WIDTH
+#undef FUNC_ID_MASK
+
+#if BITS_PER_UNIT == 8
+typedef unsigned gcov_unsigned_t __attribute__ ((mode (SI)));
+typedef unsigned gcov_position_t __attribute__ ((mode (SI)));
+#if LONG_LONG_TYPE_SIZE > 32
+typedef signed gcov_type __attribute__ ((mode (DI)));
+typedef unsigned gcov_type_unsigned __attribute__ ((mode (DI)));
+#define FUNC_ID_WIDTH 32
+#define FUNC_ID_MASK ((1ll << FUNC_ID_WIDTH) - 1)
+#else
+typedef signed gcov_type __attribute__ ((mode (SI)));
+typedef unsigned gcov_type_unsigned __attribute__ ((mode (SI)));
+#define FUNC_ID_WIDTH 16
+#define FUNC_ID_MASK ((1 << FUNC_ID_WIDTH) - 1)
+#endif
+#else  /* BITS_PER_UNIT != 8  */
+#if BITS_PER_UNIT == 16
+typedef unsigned gcov_unsigned_t __attribute__ ((mode (HI)));
+typedef unsigned gcov_position_t __attribute__ ((mode (HI)));
+#if LONG_LONG_TYPE_SIZE > 32
+typedef signed gcov_type __attribute__ ((mode (SI)));
+typedef unsigned gcov_type_unsigned __attribute__ ((mode (SI)));
+#define FUNC_ID_WIDTH 32
+#define FUNC_ID_MASK ((1ll << FUNC_ID_WIDTH) - 1)
+#else
+typedef signed gcov_type __attribute__ ((mode (HI)));
+typedef unsigned gcov_type_unsigned __attribute__ ((mode (HI)));
+#define FUNC_ID_WIDTH 16
+#define FUNC_ID_MASK ((1 << FUNC_ID_WIDTH) - 1)
+#endif
+#else /* BITS_PER_UNIT != 16  */
+typedef unsigned gcov_unsigned_t __attribute__ ((mode (QI)));
+typedef unsigned gcov_position_t __attribute__ ((mode (QI)));
+#if LONG_LONG_TYPE_SIZE > 32
+typedef signed gcov_type __attribute__ ((mode (HI)));
+typedef unsigned gcov_type_unsigned __attribute__ ((mode (HI)));
+#define FUNC_ID_WIDTH 32
+#define FUNC_ID_MASK ((1ll << FUNC_ID_WIDTH) - 1)
+#else
+typedef signed gcov_type __attribute__ ((mode (QI)));
+typedef unsigned gcov_type_unsigned __attribute__ ((mode (QI)));
+#define FUNC_ID_WIDTH 16
+#define FUNC_ID_MASK ((1 << FUNC_ID_WIDTH) - 1)
+#endif
+#endif  /* BITS_PER_UNIT == 16  */
+#endif  /* BITS_PER_UNIT == 8  */
+
+#if LONG_LONG_TYPE_SIZE > 32
+#define GCOV_TYPE_ATOMIC_FETCH_ADD_FN __atomic_fetch_add_8
+#define GCOV_TYPE_ATOMIC_FETCH_ADD BUILT_IN_ATOMIC_FETCH_ADD_8
+#else
+#define GCOV_TYPE_ATOMIC_FETCH_ADD_FN __atomic_fetch_add_4
+#define GCOV_TYPE_ATOMIC_FETCH_ADD BUILT_IN_ATOMIC_FETCH_ADD_4
+#endif
+
+#if defined (TARGET_POSIX_IO)
+#define GCOV_LOCKED 1
+#else
+#define GCOV_LOCKED 0
+#endif
+
+#else /* IN_GCOV_TOOL */
+/* About the host.  */
+/* This path will be compiled for the host and linked into
+   gcov-tool binary.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+
+typedef unsigned gcov_unsigned_t;
+typedef unsigned gcov_position_t;
+/* gcov_type is typedef'd elsewhere for the compiler */
+#if defined (HOST_HAS_F_SETLKW)
+#define GCOV_LOCKED 1
+#else
+#define GCOV_LOCKED 0
+#endif
+
+#define FUNC_ID_WIDTH 32
+#define FUNC_ID_MASK ((1ll << FUNC_ID_WIDTH) - 1)
+
+/* Some Macros specific to gcov-tool.  */
+
+#define L_gcov 1
+#define L_gcov_merge_add 1
+#define L_gcov_merge_single 1
+#define L_gcov_merge_delta 1
+#define L_gcov_merge_ior 1
+#define L_gcov_merge_time_profile 1
+#define L_gcov_merge_icall_topn 1
+#define L_gcov_merge_dc 1
+
+/* Make certian internal functions/variables in libgcov available for
+   gcov-tool access.  */
+#define GCOV_TOOL_LINKAGE 
+
+extern gcov_type gcov_read_counter_mem ();
+extern unsigned gcov_get_merge_weight ();
+
+#endif /* !IN_GCOV_TOOL */
+
+#undef EXTRACT_MODULE_ID_FROM_GLOBAL_ID
+#undef EXTRACT_FUNC_ID_FROM_GLOBAL_ID
+#undef GEN_FUNC_GLOBAL_ID
+#define EXTRACT_MODULE_ID_FROM_GLOBAL_ID(gid) \
+                (gcov_unsigned_t)(((gid) >> FUNC_ID_WIDTH) & FUNC_ID_MASK)
+#define EXTRACT_FUNC_ID_FROM_GLOBAL_ID(gid) \
+                (gcov_unsigned_t)((gid) & FUNC_ID_MASK)
+#define GEN_FUNC_GLOBAL_ID(m,f) ((((gcov_type) (m)) << FUNC_ID_WIDTH) | (f))
+
+#if defined(inhibit_libc)
+#define IN_LIBGCOV (-1)
+#else
+#define IN_LIBGCOV 1
+#if defined(L_gcov)
+#define GCOV_LINKAGE /* nothing */
+#endif
+#endif
+
+/* In libgcov we need these functions to be extern, so prefix them with
+   __gcov.  In libgcov they must also be hidden so that the instance in
+   the executable is not also used in a DSO.  */
+#define gcov_var __gcov_var
+#define gcov_open __gcov_open
+#define gcov_close __gcov_close
+#define gcov_write_tag_length __gcov_write_tag_length
+#define gcov_position __gcov_position
+#define gcov_seek __gcov_seek
+#define gcov_rewrite __gcov_rewrite
+#define gcov_truncate __gcov_truncate
+#define gcov_is_error __gcov_is_error
+#define gcov_write_unsigned __gcov_write_unsigned
+#define gcov_write_counter __gcov_write_counter
+#define gcov_write_summary __gcov_write_summary
+#define gcov_write_module_info __gcov_write_module_info
+#define gcov_read_unsigned __gcov_read_unsigned
+#define gcov_read_counter __gcov_read_counter
+#define gcov_read_summary __gcov_read_summary
+#define gcov_read_buildinfo __gcov_read_buildinfo
+#define gcov_read_module_info __gcov_read_module_info
+#define gcov_sort_n_vals __gcov_sort_n_vals
+
+/* Poison these, so they don't accidentally slip in.  */
+#pragma GCC poison gcov_write_string gcov_write_tag gcov_write_length
+#pragma GCC poison gcov_time gcov_magic
+
+#ifdef HAVE_GAS_HIDDEN
+#define ATTRIBUTE_HIDDEN  __attribute__ ((__visibility__ ("hidden")))
+#else
+#define ATTRIBUTE_HIDDEN
+#endif
+
+#include "gcov-io.h"
+
+/* Structures embedded in coveraged program.  The structures generated
+   by write_profile must match these.  */
+/* Information about counters for a single function.  */
+struct gcov_ctr_info
+{
+  gcov_unsigned_t num;          /* number of counters.  */
+  gcov_type *values;            /* their values.  */
+};
+
+/* Information about a single function.  This uses the trailing array
+   idiom. The number of counters is determined from the merge pointer
+   array in gcov_info.  The key is used to detect which of a set of
+   comdat functions was selected -- it points to the gcov_info object
+   of the object file containing the selected comdat function.  */
+
+struct gcov_fn_info
+{
+  const struct gcov_info *key;          /* comdat key */
+  gcov_unsigned_t ident;                /* unique ident of function */
+  gcov_unsigned_t lineno_checksum;      /* function lineo_checksum */
+  gcov_unsigned_t cfg_checksum; /* function cfg checksum */
+  struct gcov_ctr_info ctrs[1];         /* instrumented counters */
+};
+
+/* Type of function used to merge counters.  */
+typedef void (*gcov_merge_fn) (gcov_type *, gcov_unsigned_t);
+
+/* Information about a single object file.  */
+struct gcov_info
+{
+  gcov_unsigned_t version;      /* expected version number */
+  struct gcov_module_info *mod_info; /* addtional module info.  */
+  struct gcov_info *next;       /* link to next, used by libgcov */
+
+  gcov_unsigned_t stamp;        /* uniquifying time stamp */
+  const char *filename;         /* output file name */
+  gcov_unsigned_t eof_pos;      /* end position of profile data */
+  gcov_merge_fn merge[GCOV_COUNTERS];  /* merge functions (null for
+                                          unused) */
+
+  unsigned n_functions;         /* number of functions */
+
+#if !defined (IN_GCOV_TOOL) && !defined (__KERNEL__)
+  const struct gcov_fn_info *const *functions; /* pointer to pointers
+                                                  to function information  */
+#elif defined (IN_GCOV_TOOL)
+  const struct gcov_fn_info **functions;
+#else
+  struct gcov_fn_info **functions;
+#endif /* !IN_GCOV_TOOL */
+  char **build_info;            /* strings to include in BUILD_INFO
+                                   section of gcda file.  */
+};
+
+/* Information about a single imported module.  */
+struct dyn_imp_mod
+{
+  const struct gcov_info *imp_mod;
+  double weight;
+};
+
+/* Register a new object file module.  */
+extern void __gcov_init (struct gcov_info *) ATTRIBUTE_HIDDEN;
+
+/* Set sampling rate to RATE.  */
+extern void __gcov_set_sampling_rate (unsigned int rate);
+
+/* Called before fork, to avoid double counting.  */
+extern void __gcov_flush (void) ATTRIBUTE_HIDDEN;
+
+/* Function to reset all counters to 0.  */
+extern void __gcov_reset (void);
+/* Function to enable early write of profile information so far.
+   __gcov_dump is also used by __gcov_dump_all. The latter
+   depends on __GCOV_DUMP to have hidden or protected visibility
+   so that each library has its own copy of the registered dumper.  */
+extern void __gcov_dump (void) ATTRIBUTE_HIDDEN;
+
+/* Call __gcov_dump registered from each shared library.
+   This function must have default visibility.  */
+void __gcov_dump_all (void);
+
+/* The merge function that just sums the counters.  */
+extern void __gcov_merge_add (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
+
+/* The merge function to choose the most common value.  */
+extern void __gcov_merge_single (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
+
+/* The merge function to choose the most common difference between
+   consecutive values.  */
+extern void __gcov_merge_delta (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
+
+/* The merge function that just ors the counters together.  */
+extern void __gcov_merge_ior (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
+
+/* The merge function used for direct call counters.  */
+extern void __gcov_merge_dc (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
+
+/* The merge function used for indirect call counters.  */
+extern void __gcov_merge_icall_topn (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
+
+extern void __gcov_merge_time_profile (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
+
+/* The profiler functions.  */
+extern void __gcov_interval_profiler (gcov_type *, gcov_type, int, unsigned);
+extern void __gcov_pow2_profiler (gcov_type *, gcov_type);
+extern void __gcov_one_value_profiler (gcov_type *, gcov_type);
+extern void __gcov_indirect_call_profiler (gcov_type*, gcov_type,
+                                           void*, void*);
+extern void __gcov_indirect_call_profiler_v2 (gcov_type, void *);
+extern void __gcov_indirect_call_topn_profiler (void *, void *, gcov_unsigned_t) ATTRIBUTE_HIDDEN;
+extern void __gcov_direct_call_profiler (void *, void *, gcov_unsigned_t) ATTRIBUTE_HIDDEN;
+extern void __gcov_average_profiler (gcov_type *, gcov_type);
+extern void __gcov_ior_profiler (gcov_type *, gcov_type);
+extern void __gcov_sort_n_vals (gcov_type *value_array, int n);
+extern void __gcov_time_profiler (gcov_type *);
+
+#ifndef inhibit_libc
+/* The wrappers around some library functions..  */
+extern pid_t __gcov_fork (void) ATTRIBUTE_HIDDEN;
+extern int __gcov_execl (const char *, char *, ...) ATTRIBUTE_HIDDEN;
+extern int __gcov_execlp (const char *, char *, ...) ATTRIBUTE_HIDDEN;
+extern int __gcov_execle (const char *, char *, ...) ATTRIBUTE_HIDDEN;
+extern int __gcov_execv (const char *, char *const []) ATTRIBUTE_HIDDEN;
+extern int __gcov_execvp (const char *, char *const []) ATTRIBUTE_HIDDEN;
+extern int __gcov_execve (const char *, char  *const [], char *const [])
+  ATTRIBUTE_HIDDEN;
+
+
+/* Functions that only available in libgcov.  */
+GCOV_LINKAGE int gcov_open (const char */*name*/) ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE void gcov_write_counter (gcov_type) ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE void gcov_write_tag_length (gcov_unsigned_t, gcov_unsigned_t)
+    ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE void gcov_write_summary (gcov_unsigned_t /*tag*/,
+                                      const struct gcov_summary *)
+    ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE void gcov_seek (gcov_position_t /*position*/) ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE void gcov_truncate (void) ATTRIBUTE_HIDDEN;
+void gcov_write_module_info (const struct gcov_info *, unsigned)
+    ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE void gcov_write_module_infos (struct gcov_info *mod_info)
+    ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE const struct dyn_imp_mod **
+gcov_get_sorted_import_module_array (struct gcov_info *mod_info, unsigned *len)
+    ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE inline void gcov_rewrite (void);
+
+extern void set_gcov_fn_fixed_up (int fixed_up);
+extern int get_gcov_fn_fixed_up (void);
+
+/* "Counts" stored in gcda files can be a real counter value, or
+   an target address. When differentiate these two types because
+   when manipulating counts, we should only change real counter values,
+   rather target addresses.  */
+
+static inline gcov_type
+gcov_get_counter (void)
+{
+#ifndef IN_GCOV_TOOL
+  /* This version is for reading count values in libgcov runtime:
+     we read from gcda files.  */
+
+  if (get_gcov_fn_fixed_up ())
+    {
+      gcov_read_counter ();
+      return 0;
+    }
+  else
+    return gcov_read_counter ();
+#else
+  /* This version is for gcov-tool. We read the value from memory and
+     multiply it by the merge weight.  */
+
+  return gcov_read_counter_mem () * gcov_get_merge_weight ();
+#endif
+}
+
+/* Similar function as gcov_get_counter(), but handles target address
+   counters.  */
+
+static inline gcov_type
+gcov_get_counter_target (void)
+{
+#ifndef IN_GCOV_TOOL
+  /* This version is for reading count target values in libgcov runtime:
+     we read from gcda files.  */
+
+  if (get_gcov_fn_fixed_up ())
+    {
+      gcov_read_counter ();
+      return 0;
+    }
+  else
+    return gcov_read_counter ();
+#else
+  /* This version is for gcov-tool.  We read the value from memory and we do NOT
+     multiply it by the merge weight.  */
+
+  return gcov_read_counter_mem ();
+#endif
+}
+
+#endif /* !inhibit_libc */
+
+#endif /* GCC_LIBGCOV_H */
diff --git a/lib/gcc/mips64el-linux-android/4.9/include-fixed/arpa/nameser_compat.h b/lib/gcc/mips64el-linux-android/4.9/include-fixed/arpa/nameser_compat.h
index 5ff162d..942ad56 100644
--- a/lib/gcc/mips64el-linux-android/4.9/include-fixed/arpa/nameser_compat.h
+++ b/lib/gcc/mips64el-linux-android/4.9/include-fixed/arpa/nameser_compat.h
@@ -2,7 +2,7 @@
 
     It has been auto-edited by fixincludes from:
 
-	"/tmp/ndk-User/build/toolchain/prefix/sysroot/usr/include/arpa/nameser_compat.h"
+	"/tmp/02f2dcbb251f57396fb4c7b06502384e/sysroot/usr/include/arpa/nameser_compat.h"
 
     This had to be done to correct non-standard usages in the
     original, manufacturer supplied header file.  */
diff --git a/lib/gcc/mips64el-linux-android/4.9/include-fixed/linux/a.out.h b/lib/gcc/mips64el-linux-android/4.9/include-fixed/linux/a.out.h
new file mode 100644
index 0000000..046a9fe
--- /dev/null
+++ b/lib/gcc/mips64el-linux-android/4.9/include-fixed/linux/a.out.h
@@ -0,0 +1,235 @@
+/*  DO NOT EDIT THIS FILE.
+
+    It has been auto-edited by fixincludes from:
+
+	"/tmp/02f2dcbb251f57396fb4c7b06502384e/sysroot/usr/include/linux/a.out.h"
+
+    This had to be done to correct non-standard usages in the
+    original, manufacturer supplied header file.  */
+
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _UAPI__A_OUT_GNU_H__
+#define _UAPI__A_OUT_GNU_H__
+#define __GNU_EXEC_MACROS__
+#ifndef __STRUCT_EXEC_OVERRIDE__
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#include <asm/a.out.h>
+#endif
+#ifndef __ASSEMBLY__
+enum machine_type {
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifdef M_OLDSUN2
+ M__OLDSUN2 = M_OLDSUN2,
+#else
+ M_OLDSUN2 = 0,
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
+#ifdef M_68010
+ M__68010 = M_68010,
+#else
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ M_68010 = 1,
+#endif
+#ifdef M_68020
+ M__68020 = M_68020,
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#else
+ M_68020 = 2,
+#endif
+#ifdef M_SPARC
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ M__SPARC = M_SPARC,
+#else
+ M_SPARC = 3,
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ M_386 = 100,
+ M_MIPS1 = 151,
+ M_MIPS2 = 152
+};
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef N_MAGIC
+#define N_MAGIC(exec) ((exec).a_info & 0xffff)
+#endif
+#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff))
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff)
+#define N_SET_INFO(exec, magic, type, flags)   ((exec).a_info = ((magic) & 0xffff)   | (((int)(type) & 0xff) << 16)   | (((flags) & 0xff) << 24))
+#define N_SET_MAGIC(exec, magic)   ((exec).a_info = (((exec).a_info & 0xffff0000) | ((magic) & 0xffff)))
+#define N_SET_MACHTYPE(exec, machtype)   ((exec).a_info =   ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16))
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define N_SET_FLAGS(exec, flags)   ((exec).a_info =   ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24))
+#define OMAGIC 0407
+#define NMAGIC 0410
+#define ZMAGIC 0413
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define QMAGIC 0314
+#define CMAGIC 0421
+#ifndef N_BADMAG
+#define N_BADMAG(x) (N_MAGIC(x) != OMAGIC   && N_MAGIC(x) != NMAGIC   && N_MAGIC(x) != ZMAGIC   && N_MAGIC(x) != QMAGIC)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
+#define _N_HDROFF(x) (1024 - sizeof (struct exec))
+#ifndef N_TXTOFF
+#define N_TXTOFF(x)   (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) :   (N_MAGIC(x) == QMAGIC ? 0 : sizeof (struct exec)))
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
+#ifndef N_DATOFF
+#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef N_TRELOFF
+#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
+#endif
+#ifndef N_DRELOFF
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define N_DRELOFF(x) (N_TRELOFF(x) + N_TRSIZE(x))
+#endif
+#ifndef N_SYMOFF
+#define N_SYMOFF(x) (N_DRELOFF(x) + N_DRSIZE(x))
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
+#ifndef N_STROFF
+#define N_STROFF(x) (N_SYMOFF(x) + N_SYMSIZE(x))
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef N_TXTADDR
+#define N_TXTADDR(x) (N_MAGIC(x) == QMAGIC ? PAGE_SIZE : 0)
+#endif
+#if defined(vax) || defined(hp300) || defined(pyr)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SEGMENT_SIZE page_size
+#endif
+#ifdef sony
+#define SEGMENT_SIZE 0x2000
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
+#ifdef is68k
+#define SEGMENT_SIZE 0x20000
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#if defined(m68k) && defined(PORTAR)
+#define PAGE_SIZE 0x400
+#define SEGMENT_SIZE PAGE_SIZE
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifdef __linux__
+#include <unistd.h>
+#if defined(__i386__) || defined(__mc68000__)
+#define SEGMENT_SIZE 1024
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#else
+#ifndef SEGMENT_SIZE
+#define SEGMENT_SIZE getpagesize()
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
+#endif
+#define _N_SEGMENT_ROUND(x) ALIGN(x, SEGMENT_SIZE)
+#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef N_DATADDR
+#define N_DATADDR(x)   (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x))   : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
+#endif
+#ifndef N_BSSADDR
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
+#endif
+#ifndef N_NLIST_DECLARED
+struct nlist {
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ union {
+ char *n_name;
+ struct nlist *n_next;
+ long n_strx;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ } n_un;
+ unsigned char n_type;
+ char n_other;
+ short n_desc;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ unsigned long n_value;
+};
+#endif
+#ifndef N_UNDF
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define N_UNDF 0
+#endif
+#ifndef N_ABS
+#define N_ABS 2
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
+#ifndef N_TEXT
+#define N_TEXT 4
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef N_DATA
+#define N_DATA 6
+#endif
+#ifndef N_BSS
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define N_BSS 8
+#endif
+#ifndef N_FN
+#define N_FN 15
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
+#ifndef N_EXT
+#define N_EXT 1
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef N_TYPE
+#define N_TYPE 036
+#endif
+#ifndef N_STAB
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define N_STAB 0340
+#endif
+#define N_INDR 0xa
+#define N_SETA 0x14
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define N_SETT 0x16
+#define N_SETD 0x18
+#define N_SETB 0x1A
+#define N_SETV 0x1C
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef N_RELOCATION_INFO_DECLARED
+struct relocation_info
+{
+ int r_address;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ unsigned int r_symbolnum:24;
+ unsigned int r_pcrel:1;
+ unsigned int r_length:2;
+ unsigned int r_extern:1;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifdef NS32K
+ unsigned r_bsr:1;
+ unsigned r_disp:1;
+ unsigned r_pad:2;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#else
+ unsigned int r_pad:4;
+#endif
+};
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
+#endif
+#endif
diff --git a/lib/gcc/mips64el-linux-android/4.9/libgcc.a b/lib/gcc/mips64el-linux-android/4.9/libgcc.a
index b19ec60..c81ceb9 100644
--- a/lib/gcc/mips64el-linux-android/4.9/libgcc.a
+++ b/lib/gcc/mips64el-linux-android/4.9/libgcc.a
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/libgcov.a b/lib/gcc/mips64el-linux-android/4.9/libgcov.a
index 8b2a02d..dc3f175 100644
--- a/lib/gcc/mips64el-linux-android/4.9/libgcov.a
+++ b/lib/gcc/mips64el-linux-android/4.9/libgcov.a
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtbegin.o b/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtbegin.o
deleted file mode 100644
index 9903e47..0000000
--- a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtbegin.o
+++ /dev/null
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtbeginS.o b/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtbeginS.o
deleted file mode 100644
index 5cbd675..0000000
--- a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtbeginS.o
+++ /dev/null
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtbeginT.o b/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtbeginT.o
deleted file mode 100644
index 9903e47..0000000
--- a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtbeginT.o
+++ /dev/null
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtend.o b/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtend.o
deleted file mode 100644
index 51c6538..0000000
--- a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtend.o
+++ /dev/null
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtendS.o b/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtendS.o
deleted file mode 100644
index 51c6538..0000000
--- a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtendS.o
+++ /dev/null
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtfastmath.o b/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtfastmath.o
deleted file mode 100644
index 5c2facb..0000000
--- a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/crtfastmath.o
+++ /dev/null
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/libgcc.a b/lib/gcc/mips64el-linux-android/4.9/mips64-r2/libgcc.a
deleted file mode 100644
index 821595a..0000000
--- a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/libgcc.a
+++ /dev/null
Binary files differ
diff --git a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/libgcov.a b/lib/gcc/mips64el-linux-android/4.9/mips64-r2/libgcov.a
deleted file mode 100644
index 1bc5f39..0000000
--- a/lib/gcc/mips64el-linux-android/4.9/mips64-r2/libgcov.a
+++ /dev/null
Binary files differ
diff --git a/lib/libmips64el-unknown-linux-android-sim.a b/lib/libmips64el-unknown-linux-android-sim.a
deleted file mode 100644
index 7abda74..0000000
--- a/lib/libmips64el-unknown-linux-android-sim.a
+++ /dev/null
Binary files differ
diff --git a/libexec/gcc/mips64el-linux-android/4.9/cc1 b/libexec/gcc/mips64el-linux-android/4.9/cc1
index d71b533..6f7570b 100755
--- a/libexec/gcc/mips64el-linux-android/4.9/cc1
+++ b/libexec/gcc/mips64el-linux-android/4.9/cc1
Binary files differ
diff --git a/libexec/gcc/mips64el-linux-android/4.9/cc1plus b/libexec/gcc/mips64el-linux-android/4.9/cc1plus
index 7528fa7..868423c 100755
--- a/libexec/gcc/mips64el-linux-android/4.9/cc1plus
+++ b/libexec/gcc/mips64el-linux-android/4.9/cc1plus
Binary files differ
diff --git a/libexec/gcc/mips64el-linux-android/4.9/collect2 b/libexec/gcc/mips64el-linux-android/4.9/collect2
index 3010f58..d835db4 100755
--- a/libexec/gcc/mips64el-linux-android/4.9/collect2
+++ b/libexec/gcc/mips64el-linux-android/4.9/collect2
Binary files differ
diff --git a/libexec/gcc/mips64el-linux-android/4.9/libfunction_reordering_plugin.0.so b/libexec/gcc/mips64el-linux-android/4.9/libfunction_reordering_plugin.0.so
index 1cad0a4..a51608c 100755
--- a/libexec/gcc/mips64el-linux-android/4.9/libfunction_reordering_plugin.0.so
+++ b/libexec/gcc/mips64el-linux-android/4.9/libfunction_reordering_plugin.0.so
Binary files differ
diff --git a/libexec/gcc/mips64el-linux-android/4.9/liblto_plugin.0.so b/libexec/gcc/mips64el-linux-android/4.9/liblto_plugin.0.so
index 181caf3..03b9604 100755
--- a/libexec/gcc/mips64el-linux-android/4.9/liblto_plugin.0.so
+++ b/libexec/gcc/mips64el-linux-android/4.9/liblto_plugin.0.so
Binary files differ
diff --git a/libexec/gcc/mips64el-linux-android/4.9/lto-wrapper b/libexec/gcc/mips64el-linux-android/4.9/lto-wrapper
index 6248e17..a49bfb0 100755
--- a/libexec/gcc/mips64el-linux-android/4.9/lto-wrapper
+++ b/libexec/gcc/mips64el-linux-android/4.9/lto-wrapper
Binary files differ
diff --git a/libexec/gcc/mips64el-linux-android/4.9/lto1 b/libexec/gcc/mips64el-linux-android/4.9/lto1
index e4aaeec..f11f9cf 100755
--- a/libexec/gcc/mips64el-linux-android/4.9/lto1
+++ b/libexec/gcc/mips64el-linux-android/4.9/lto1
Binary files differ
diff --git a/libexec/gcc/mips64el-linux-android/4.9/plugin/gengtype b/libexec/gcc/mips64el-linux-android/4.9/plugin/gengtype
index dc85a2c..77f6aaa 100755
--- a/libexec/gcc/mips64el-linux-android/4.9/plugin/gengtype
+++ b/libexec/gcc/mips64el-linux-android/4.9/plugin/gengtype
Binary files differ
diff --git a/mips64el-linux-android/bin/ld.mcld b/mips64el-linux-android/bin/ld.mcld
deleted file mode 120000
index 373a954..0000000
--- a/mips64el-linux-android/bin/ld.mcld
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../../toolchains/llvm-3.5/prebuilt/darwin-x86_64/bin/ld.mcld
\ No newline at end of file
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmip.x b/mips64el-linux-android/lib/ldscripts/elf32btsmip.x
index cf1ecc5..fb9d8eb 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmip.x
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmip.x
@@ -194,7 +194,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -207,7 +206,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xbn b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xbn
index d515188..2589f97 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xbn
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xbn
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xc b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xc
index 5e66a22..86b1326 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xc
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xc
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xd b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xd
index 5ab15be..d315bc1 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xd
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xd
@@ -193,7 +193,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xdc b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xdc
index fe64576..aaef5a8 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xdc
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xdc
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xdw b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xdw
index 698e134..6a077fa 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xdw
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xdw
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xn b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xn
index ab936db..11c81bf 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xn
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xn
@@ -193,7 +193,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xs b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xs
index cf35499..aec5352 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xs
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xs
@@ -177,7 +177,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -191,7 +190,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xsc b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xsc
index cdeca4c..7cc5f63 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xsc
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xsc
@@ -177,7 +177,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -191,7 +190,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xsw b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xsw
index a5a5a83..b105a58 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xsw
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xsw
@@ -176,7 +176,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -190,7 +189,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xw b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xw
index 241f1fa..c6cba08 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmip.xw
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmip.xw
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.x b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.x
index 308b0e4..b8dfd49 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.x
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.x
@@ -194,7 +194,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -208,7 +207,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xbn b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xbn
index 47662e2..a9ccbe9 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xbn
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xbn
@@ -192,7 +192,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xc b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xc
index 22efdf8..7cee742 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xc
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xc
@@ -192,7 +192,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xd b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xd
index 74125c2..d671b03 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xd
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xd
@@ -193,7 +193,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -207,7 +206,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xdc b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xdc
index ad5d070..af41801 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xdc
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xdc
@@ -192,7 +192,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xdw b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xdw
index f4927e1..5612ac5 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xdw
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xdw
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xn b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xn
index 2ccb8b9..cd0332e 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xn
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xn
@@ -193,7 +193,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -207,7 +206,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xs b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xs
index b1c3da8..ad78ec1 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xs
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xs
@@ -177,7 +177,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -192,7 +191,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xsc b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xsc
index 8e3acde..f39387d 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xsc
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xsc
@@ -177,7 +177,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -192,7 +191,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xsw b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xsw
index ac55fec..ff94eae 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xsw
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xsw
@@ -176,7 +176,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -191,7 +190,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xw b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xw
index ca1d822..de49e1a 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xw
+++ b/mips64el-linux-android/lib/ldscripts/elf32btsmipn32.xw
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.x b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.x
index 5d20c5a..88ba41d 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.x
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.x
@@ -194,7 +194,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -207,7 +206,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xbn b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xbn
index 99b907b..2c515e5 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xbn
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xbn
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xc b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xc
index 136b761..ca5317b 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xc
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xc
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xd b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xd
index 243afc0..38142de 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xd
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xd
@@ -193,7 +193,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xdc b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xdc
index d38a1e1..c246dbd 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xdc
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xdc
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xdw b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xdw
index fc57848..d0d21dd 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xdw
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xdw
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xn b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xn
index 5c2cc73..2ddf810 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xn
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xn
@@ -193,7 +193,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xs b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xs
index d7c9a64..9c33fbb 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xs
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xs
@@ -177,7 +177,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -191,7 +190,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xsc b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xsc
index 3f04cc5..99c1a3c 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xsc
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xsc
@@ -177,7 +177,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -191,7 +190,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xsw b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xsw
index 7116670..3847276 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xsw
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xsw
@@ -176,7 +176,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -190,7 +189,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xw b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xw
index bf8608d..eda1735 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xw
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmip.xw
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit8           : { *(.lit8) }
   .lit4           : { *(.lit4) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.x b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.x
index 8aa0b06..28a11d9 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.x
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.x
@@ -194,7 +194,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -208,7 +207,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xbn b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xbn
index c45672f..236f6d9 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xbn
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xbn
@@ -192,7 +192,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xc b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xc
index eff7968..b364c63 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xc
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xc
@@ -192,7 +192,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xd b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xd
index 531af25..31bff90 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xd
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xd
@@ -193,7 +193,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -207,7 +206,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xdc b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xdc
index 48046c9..fda28ec 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xdc
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xdc
@@ -192,7 +192,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xdw b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xdw
index 783c545..5c70c1e 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xdw
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xdw
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xn b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xn
index 4f49cb5..07375ba 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xn
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xn
@@ -193,7 +193,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -207,7 +206,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xs b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xs
index b897a73..97fae41 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xs
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xs
@@ -177,7 +177,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -192,7 +191,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xsc b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xsc
index 37b95a6..a5dc864 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xsc
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xsc
@@ -177,7 +177,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -192,7 +191,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xsw b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xsw
index 4e0b1d2..5f7db7c 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xsw
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xsw
@@ -176,7 +176,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -191,7 +190,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xw b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xw
index 834d1e4..00b8eca 100644
--- a/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xw
+++ b/mips64el-linux-android/lib/ldscripts/elf32ltsmipn32.xw
@@ -192,7 +192,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64btsmip.x b/mips64el-linux-android/lib/ldscripts/elf64btsmip.x
index d2c6d70..baa5660 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64btsmip.x
+++ b/mips64el-linux-android/lib/ldscripts/elf64btsmip.x
@@ -193,7 +193,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -207,7 +206,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xbn b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xbn
index 13a7200..f5ce208 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xbn
+++ b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xbn
@@ -191,7 +191,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xc b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xc
index 193d084..f4a9610 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xc
+++ b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xc
@@ -191,7 +191,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xd b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xd
index f15e8cb..c2ec969 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xd
+++ b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xd
@@ -192,7 +192,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xdc b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xdc
index 4b717f0..fa67867 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xdc
+++ b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xdc
@@ -191,7 +191,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xdw b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xdw
index c90e582..4a1fbc3 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xdw
+++ b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xdw
@@ -191,7 +191,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xn b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xn
index 06658d3..8e8adb9 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xn
+++ b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xn
@@ -192,7 +192,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xs b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xs
index 98f8b6b..9bd55fc 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xs
+++ b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xs
@@ -177,7 +177,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -192,7 +191,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xsc b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xsc
index 601c9c7..3f5bcf0 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xsc
+++ b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xsc
@@ -177,7 +177,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -192,7 +191,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xsw b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xsw
index 9008c55..8fe14ce 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xsw
+++ b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xsw
@@ -176,7 +176,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -191,7 +190,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xw b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xw
index b5d31f9..d5f3f06 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64btsmip.xw
+++ b/mips64el-linux-android/lib/ldscripts/elf64btsmip.xw
@@ -191,7 +191,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.x b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.x
index 7af0526..bcb0282 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.x
+++ b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.x
@@ -193,7 +193,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -207,7 +206,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xbn b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xbn
index e7faa83..43d2559 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xbn
+++ b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xbn
@@ -191,7 +191,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xc b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xc
index d09ccbf..575fa09 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xc
+++ b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xc
@@ -191,7 +191,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xd b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xd
index 1ae52f3..6d0451d 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xd
+++ b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xd
@@ -192,7 +192,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xdc b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xdc
index 54eaa03..70bc2f5 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xdc
+++ b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xdc
@@ -191,7 +191,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xdw b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xdw
index 1ed2327..734121d 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xdw
+++ b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xdw
@@ -191,7 +191,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xn b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xn
index 4480b24..59b99ec 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xn
+++ b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xn
@@ -192,7 +192,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -206,7 +205,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xs b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xs
index e7bdf6f..7a0254b 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xs
+++ b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xs
@@ -177,7 +177,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -192,7 +191,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xsc b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xsc
index 67b70e2..18939f7 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xsc
+++ b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xsc
@@ -177,7 +177,6 @@
   .data1          : { *(.data1) }
   .got.plt        : { *(.got.plt) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -192,7 +191,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xsw b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xsw
index 93548a4..16ee0e3 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xsw
+++ b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xsw
@@ -176,7 +176,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -191,7 +190,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xw b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xw
index 99dca6e..f9bcd95 100644
--- a/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xw
+++ b/mips64el-linux-android/lib/ldscripts/elf64ltsmip.xw
@@ -191,7 +191,6 @@
   }
   .data1          : { *(.data1) }
   . = .;
-  . = .;
   HIDDEN (_gp = ALIGN (16) + 0x7ff0);
   .got            : { *(.got) }
   /* We want the small data sections together, so single-instruction offsets
@@ -205,7 +204,6 @@
   .lit4           : { *(.lit4) }
   .srdata         : { *(.srdata) }
   _edata = .; PROVIDE (edata = .);
-  . = .;
   __bss_start = .;
   _fbss = .;
   .sbss           :
diff --git a/mips64el-linux-android/lib/libatomic.a b/mips64el-linux-android/lib/libatomic.a
index fe7f3a1..55b327e 100644
--- a/mips64el-linux-android/lib/libatomic.a
+++ b/mips64el-linux-android/lib/libatomic.a
Binary files differ
diff --git a/mips64el-linux-android/lib/libgomp.a b/mips64el-linux-android/lib/libgomp.a
index e093eda..63dc6f3 100644
--- a/mips64el-linux-android/lib/libgomp.a
+++ b/mips64el-linux-android/lib/libgomp.a
Binary files differ
diff --git a/mips64el-linux-android/lib64/libatomic.a b/mips64el-linux-android/lib64/libatomic.a
index 2581c45..599406f 100644
--- a/mips64el-linux-android/lib64/libatomic.a
+++ b/mips64el-linux-android/lib64/libatomic.a
Binary files differ
diff --git a/mips64el-linux-android/lib64/libgomp.a b/mips64el-linux-android/lib64/libgomp.a
index 3b488e0..7a1a166 100644
--- a/mips64el-linux-android/lib64/libgomp.a
+++ b/mips64el-linux-android/lib64/libgomp.a
Binary files differ
diff --git a/mips64el-linux-android/lib64r2/libatomic.a b/mips64el-linux-android/lib64r2/libatomic.a
deleted file mode 100644
index c2a874c..0000000
--- a/mips64el-linux-android/lib64r2/libatomic.a
+++ /dev/null
Binary files differ
diff --git a/mips64el-linux-android/lib64r2/libgomp.a b/mips64el-linux-android/lib64r2/libgomp.a
deleted file mode 100644
index ef96a55..0000000
--- a/mips64el-linux-android/lib64r2/libgomp.a
+++ /dev/null
Binary files differ
diff --git a/mips64el-linux-android/lib64r2/libgomp.spec b/mips64el-linux-android/lib64r2/libgomp.spec
deleted file mode 100644
index 2fd7721..0000000
--- a/mips64el-linux-android/lib64r2/libgomp.spec
+++ /dev/null
@@ -1,3 +0,0 @@
-# This spec file is read by gcc when linking.  It is used to specify the
-# standard libraries we need in order to link with libgomp.
-*link_gomp: -lgomp 
diff --git a/mips64el-linux-android/libr2/libatomic.a b/mips64el-linux-android/libr2/libatomic.a
index fa8cae3..016f4ff 100644
--- a/mips64el-linux-android/libr2/libatomic.a
+++ b/mips64el-linux-android/libr2/libatomic.a
Binary files differ
diff --git a/mips64el-linux-android/libr2/libgomp.a b/mips64el-linux-android/libr2/libgomp.a
index 0559415..b676ccf 100644
--- a/mips64el-linux-android/libr2/libgomp.a
+++ b/mips64el-linux-android/libr2/libgomp.a
Binary files differ
diff --git a/mips64el-linux-android/libr6/libatomic.a b/mips64el-linux-android/libr6/libatomic.a
index 012d04e..fb03de2 100644
--- a/mips64el-linux-android/libr6/libatomic.a
+++ b/mips64el-linux-android/libr6/libatomic.a
Binary files differ
diff --git a/mips64el-linux-android/libr6/libgomp.a b/mips64el-linux-android/libr6/libgomp.a
index b4bc672..f77432b 100644
--- a/mips64el-linux-android/libr6/libgomp.a
+++ b/mips64el-linux-android/libr6/libgomp.a
Binary files differ
diff --git a/repo.prop b/repo.prop
new file mode 100644
index 0000000..04bd79d
--- /dev/null
+++ b/repo.prop
@@ -0,0 +1,17 @@
+platform/manifest 29325e7007f581fc689a14b68b0feb04f52e3d0f
+platform/ndk 542e194cf8193fe23570b314c2697568b00b99dd
+platform/prebuilts/gcc/darwin-x86/host/headers 4ac4f7cc41cf3c9e36fc3d6cf37fd1cfa9587a68
+platform/prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1 ec5aa66aaa4964c27564d0ec84dc1f18a2d72b7e
+platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8 1273431a189717842f033573eb8c777e13dd88b7
+platform/prebuilts/ndk a3958fbda3afe1f4b8f82c126a4c1800555b56a9
+toolchain/binutils ec97727e655f49b010f4cf8c410631910d22199f
+toolchain/build fad95906dc869be82834cf0678a5b99d2fe19095
+toolchain/cloog 604793eab97d360aef729f064674569ee6dbf3e1
+toolchain/expat 40172a0ae9d40a068f1e1a48ffcf6a1ccf765ed5
+toolchain/gcc e288936a8765b4b25a9f2c144881b087d50bd2bf
+toolchain/gmp b2acd5dbf47868ac5b5bc844e16d2cadcbd4c810
+toolchain/isl 0ccf95726af8ce58ad61ff474addbce3a31ba99c
+toolchain/mpc 835d16e92eed875638a8b5d552034c3b1aae045b
+toolchain/mpfr de979fc377db766591e7feaf052f0de59be46e76
+toolchain/ppl 979062d362bc5a1c00804237b408b19b4618fb24
+toolchain/sed 45df23d6dc8b51ea5cd903d023c10fd7d72415b9
diff --git a/share/gdb/python/gdb/FrameDecorator.py b/share/gdb/python/gdb/FrameDecorator.py
deleted file mode 100644
index 1bbc5ab..0000000
--- a/share/gdb/python/gdb/FrameDecorator.py
+++ /dev/null
@@ -1,302 +0,0 @@
-# Copyright (C) 2013-2014 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
-
-# This small code snippet deals with problem of strings in Python 2.x
-# and Python 3.x.  Python 2.x has str and unicode classes which are
-# sub-classes of basestring.  In Python 3.x all strings are encoded
-# and basestring has been removed.
-try:
-    basestring
-except NameError:
-    basestring = str
-
-class FrameDecorator(object):
-    """Basic implementation of a Frame Decorator"""
-
-    """ This base frame decorator decorates a frame or another frame
-    decorator, and provides convenience methods.  If this object is
-    wrapping a frame decorator, defer to that wrapped object's method
-    if it has one.  This allows for frame decorators that have
-    sub-classed FrameDecorator object, but also wrap other frame
-    decorators on the same frame to correctly execute.
-
-    E.g
-
-    If the result of frame filters running means we have one gdb.Frame
-    wrapped by multiple frame decorators, all sub-classed from
-    FrameDecorator, the resulting hierarchy will be:
-
-    Decorator1
-      -- (wraps) Decorator2
-        -- (wraps) FrameDecorator
-          -- (wraps) gdb.Frame
-
-    In this case we have two frame decorators, both of which are
-    sub-classed from FrameDecorator.  If Decorator1 just overrides the
-    'function' method, then all of the other methods are carried out
-    by the super-class FrameDecorator.  But Decorator2 may have
-    overriden other methods, so FrameDecorator will look at the
-    'base' parameter and defer to that class's methods.  And so on,
-    down the chain."""
-
-    # 'base' can refer to a gdb.Frame or another frame decorator.  In
-    # the latter case, the child class will have called the super
-    # method and _base will be an object conforming to the Frame Filter
-    # class.
-    def __init__(self, base):
-        self._base = base
-
-    @staticmethod
-    def _is_limited_frame(frame):
-        """Internal utility to determine if the frame is special or
-        limited."""
-        sal = frame.find_sal()
-
-        if (not sal.symtab or not sal.symtab.filename
-            or frame.type() == gdb.DUMMY_FRAME
-            or frame.type() == gdb.SIGTRAMP_FRAME):
-
-            return True
-
-        return False
-
-    def elided(self):
-        """Return any elided frames that this class might be
-        wrapping, or None."""
-        if hasattr(self._base, "elided"):
-            return self._base.elided()
-
-        return None
-
-    def function(self):
-        """ Return the name of the frame's function or an address of
-        the function of the frame.  First determine if this is a
-        special frame.  If not, try to determine filename from GDB's
-        frame internal function API.  Finally, if a name cannot be
-        determined return the address.  If this function returns an
-        address, GDB will attempt to determine the function name from
-        its internal minimal symbols store (for example, for inferiors
-        without debug-info)."""
-
-        # Both gdb.Frame, and FrameDecorator have a method called
-        # "function", so determine which object this is.
-        if not isinstance(self._base, gdb.Frame):
-            if hasattr(self._base, "function"):
-                # If it is not a gdb.Frame, and there is already a
-                # "function" method, use that.
-                return self._base.function()
-
-        frame = self.inferior_frame()
-
-        if frame.type() == gdb.DUMMY_FRAME:
-            return "<function called from gdb>"
-        elif frame.type() == gdb.SIGTRAMP_FRAME:
-            return "<signal handler called>"
-
-        func = frame.function()
-
-        # If we cannot determine the function name, return the
-        # address.  If GDB detects an integer value from this function
-        # it will attempt to find the function name from minimal
-        # symbols via its own internal functions.
-        if func == None:
-            pc = frame.pc()
-            return pc
-
-        return str(func)
-
-    def address(self):
-        """ Return the address of the frame's pc"""
-
-        if hasattr(self._base, "address"):
-            return self._base.address()
-
-        frame = self.inferior_frame()
-        return frame.pc()
-
-    def filename(self):
-        """ Return the filename associated with this frame, detecting
-        and returning the appropriate library name is this is a shared
-        library."""
-
-        if hasattr(self._base, "filename"):
-            return self._base.filename()
-
-        frame = self.inferior_frame()
-        sal = frame.find_sal()
-        if not sal.symtab or not sal.symtab.filename:
-            pc = frame.pc()
-            return gdb.solib_name(pc)
-        else:
-            return sal.symtab.filename
-
-    def frame_args(self):
-        """ Return an iterable of frame arguments for this frame, if
-        any.  The iterable object contains objects conforming with the
-        Symbol/Value interface.  If there are no frame arguments, or
-        if this frame is deemed to be a special case, return None."""
-
-        if hasattr(self._base, "frame_args"):
-            return self._base.frame_args()
-
-        frame = self.inferior_frame()
-        if self._is_limited_frame(frame):
-            return None
-
-        args = FrameVars(frame)
-        return args.fetch_frame_args()
-
-    def frame_locals(self):
-        """ Return an iterable of local variables for this frame, if
-        any.  The iterable object contains objects conforming with the
-        Symbol/Value interface.  If there are no frame locals, or if
-        this frame is deemed to be a special case, return None."""
-
-        if hasattr(self._base, "frame_locals"):
-            return self._base.frame_locals()
-
-        frame = self.inferior_frame()
-        if self._is_limited_frame(frame):
-            return None
-
-        args = FrameVars(frame)
-        return args.fetch_frame_locals()
-
-    def line(self):
-        """ Return line number information associated with the frame's
-        pc.  If symbol table/line information does not exist, or if
-        this frame is deemed to be a special case, return None"""
-
-        if hasattr(self._base, "line"):
-            return self._base.line()
-
-        frame = self.inferior_frame()
-        if self._is_limited_frame(frame):
-            return None
-
-        sal = frame.find_sal()
-        if (sal):
-            return sal.line
-        else:
-            return None
-
-    def inferior_frame(self):
-        """ Return the gdb.Frame underpinning this frame decorator."""
-
-        # If 'base' is a frame decorator, we want to call its inferior
-        # frame method.  If '_base' is a gdb.Frame, just return that.
-        if hasattr(self._base, "inferior_frame"):
-            return self._base.inferior_frame()
-        return self._base
-
-class SymValueWrapper(object):
-    """A container class conforming to the Symbol/Value interface
-    which holds frame locals or frame arguments."""
-    def __init__(self, symbol, value):
-        self.sym = symbol
-        self.val = value
-
-    def value(self):
-        """ Return the value associated with this symbol, or None"""
-        return self.val
-
-    def symbol(self):
-        """ Return the symbol, or Python text, associated with this
-        symbol, or None"""
-        return self.sym
-
-class FrameVars(object):
-
-    """Utility class to fetch and store frame local variables, or
-    frame arguments."""
-
-    def __init__(self, frame):
-        self.frame = frame
-        self.symbol_class = {
-            gdb.SYMBOL_LOC_STATIC: True,
-            gdb.SYMBOL_LOC_REGISTER: True,
-            gdb.SYMBOL_LOC_ARG: True,
-            gdb.SYMBOL_LOC_REF_ARG: True,
-            gdb.SYMBOL_LOC_LOCAL: True,
-	    gdb.SYMBOL_LOC_REGPARM_ADDR: True,
-	    gdb.SYMBOL_LOC_COMPUTED: True
-            }
-
-    def fetch_b(self, sym):
-        """ Local utility method to determine if according to Symbol
-        type whether it should be included in the iterator.  Not all
-        symbols are fetched, and only symbols that return
-        True from this method should be fetched."""
-
-        # SYM may be a string instead of a symbol in the case of
-        # synthetic local arguments or locals.  If that is the case,
-        # always fetch.
-        if isinstance(sym, basestring):
-            return True
-
-        sym_type = sym.addr_class
-
-        return self.symbol_class.get(sym_type, False)
-
-    def fetch_frame_locals(self):
-        """Public utility method to fetch frame local variables for
-        the stored frame.  Frame arguments are not fetched.  If there
-        are no frame local variables, return an empty list."""
-        lvars = []
-
-        try:
-            block = self.frame.block()
-        except RuntimeError:
-            block = None
-
-        while block != None:
-            if block.is_global or block.is_static:
-                break
-            for sym in block:
-                if sym.is_argument:
-                    continue;
-                if self.fetch_b(sym):
-                    lvars.append(SymValueWrapper(sym, None))
-
-            block = block.superblock
-
-        return lvars
-
-    def fetch_frame_args(self):
-        """Public utility method to fetch frame arguments for the
-        stored frame.  Frame arguments are the only type fetched.  If
-        there are no frame argument variables, return an empty list."""
-
-        args = []
-
-        try:
-            block = self.frame.block()
-        except RuntimeError:
-            block = None
-
-        while block != None:
-            if block.function != None:
-                break
-            block = block.superblock
-
-        if block != None:
-            for sym in block:
-                if not sym.is_argument:
-                    continue;
-                args.append(SymValueWrapper(sym, None))
-
-        return args
diff --git a/share/gdb/python/gdb/FrameIterator.py b/share/gdb/python/gdb/FrameIterator.py
deleted file mode 100644
index c99a91e..0000000
--- a/share/gdb/python/gdb/FrameIterator.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright (C) 2013-2014 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
-
-class FrameIterator(object):
-    """A gdb.Frame iterator.  Iterates over gdb.Frames or objects that
-    conform to that interface."""
-
-    def __init__(self, frame_obj):
-        """Initialize a FrameIterator.
-
-        Arguments:
-            frame_obj the starting frame."""
-
-        super(FrameIterator, self).__init__()
-        self.frame = frame_obj
-
-    def __iter__(self):
-        return self
-
-    def next(self):
-        """next implementation.
-
-        Returns:
-            The next oldest frame."""
-
-        result = self.frame
-        if result is None:
-            raise StopIteration
-        self.frame = result.older()
-        return result
-
-    # Python 3.x requires __next__(self) while Python 2.x requires
-    # next(self).  Define next(self), and for Python 3.x create this
-    # wrapper.
-    def __next__(self):
-        return self.next()
diff --git a/share/gdb/python/gdb/__init__.py b/share/gdb/python/gdb/__init__.py
deleted file mode 100644
index 95a76c2..0000000
--- a/share/gdb/python/gdb/__init__.py
+++ /dev/null
@@ -1,126 +0,0 @@
-# Copyright (C) 2010-2014 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 traceback
-import os
-import sys
-import _gdb
-
-if sys.version_info[0] > 2:
-    # Python 3 moved "reload"
-    from imp import reload
-
-from _gdb import *
-
-class _GdbFile (object):
-    # These two are needed in Python 3
-    encoding = "UTF-8"
-    errors = "strict"
-    
-    def close(self):
-        # Do nothing.
-        return None
-
-    def isatty(self):
-        return False
-
-    def writelines(self, iterable):
-        for line in iterable:
-            self.write(line)
-
-    def flush(self):
-        flush()
-
-class GdbOutputFile (_GdbFile):
-    def write(self, s):
-        write(s, stream=STDOUT)
-
-sys.stdout = GdbOutputFile()
-
-class GdbOutputErrorFile (_GdbFile):
-    def write(self, s):
-        write(s, stream=STDERR)
-
-sys.stderr = GdbOutputErrorFile()
-
-# Default prompt hook does nothing.
-prompt_hook = None
-
-# Ensure that sys.argv is set to something.
-# We do not use PySys_SetArgvEx because it did not appear until 2.6.6.
-sys.argv = ['']
-
-# Initial pretty printers.
-pretty_printers = []
-
-# Initial type printers.
-type_printers = []
-# Initial frame filters.
-frame_filters = {}
-
-# Convenience variable to GDB's python directory
-PYTHONDIR = os.path.dirname(os.path.dirname(__file__))
-
-# Auto-load all functions/commands.
-
-# Packages to auto-load.
-
-packages = [
-    'function',
-    'command'
-]
-
-# pkgutil.iter_modules is not available prior to Python 2.6.  Instead,
-# manually iterate the list, collating the Python files in each module
-# path.  Construct the module name, and import.
-
-def auto_load_packages():
-    for package in packages:
-        location = os.path.join(os.path.dirname(__file__), package)
-        if os.path.exists(location):
-            py_files = filter(lambda x: x.endswith('.py')
-                                        and x != '__init__.py',
-                              os.listdir(location))
-
-            for py_file in py_files:
-                # Construct from foo.py, gdb.module.foo
-                modname = "%s.%s.%s" % ( __name__, package, py_file[:-3] )
-                try:
-                    if modname in sys.modules:
-                        # reload modules with duplicate names
-                        reload(__import__(modname))
-                    else:
-                        __import__(modname)
-                except:
-                    sys.stderr.write (traceback.format_exc() + "\n")
-
-auto_load_packages()
-
-def GdbSetPythonDirectory(dir):
-    """Update sys.path, reload gdb and auto-load packages."""
-    global PYTHONDIR
-
-    try:
-        sys.path.remove(PYTHONDIR)
-    except ValueError:
-        pass
-    sys.path.insert(0, dir)
-
-    PYTHONDIR = dir
-
-    # note that reload overwrites the gdb module without deleting existing
-    # attributes
-    reload(__import__(__name__))
-    auto_load_packages()
diff --git a/share/gdb/python/gdb/command/__init__.py b/share/gdb/python/gdb/command/__init__.py
deleted file mode 100644
index ca768c8..0000000
--- a/share/gdb/python/gdb/command/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (C) 2010-2014 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/>.
-
-
diff --git a/share/gdb/python/gdb/command/bound_registers.py b/share/gdb/python/gdb/command/bound_registers.py
deleted file mode 100644
index 24d4c45..0000000
--- a/share/gdb/python/gdb/command/bound_registers.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# Pretty-printer utilities.
-# Copyright (C) 2013-2014 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.printing
-
-class BoundPrinter:
-    """Adds size field to a _rawbound128 type."""
-
-    def __init__ (self, val):
-        self.val = val
-
-    def to_string (self):
-        upper = self.val["ubound"]
-        lower = self.val["lbound"]
-        size  = (long) ((upper) - (lower))
-        if size > -1:
-            size = size + 1
-        result = '{lbound = %s, ubound = %s} : size %s' % (lower, upper, size)
-        return result
-
-# There are two pattern matching used: first one is related to a library
-# second is related to the type. Since we are displaying a register all
-# libraries are accepted. Type to be processed is the same present
-# in the xml file.
-
-def build_pretty_printer ():
-    pp = gdb.printing.RegexpCollectionPrettyPrinter (".*")
-    pp.add_printer ('bound', '^__gdb_builtin_type_bound128', BoundPrinter)
-    return pp
-
-gdb.printing.register_pretty_printer (gdb.current_objfile (),
-                                      build_pretty_printer ())
diff --git a/share/gdb/python/gdb/command/explore.py b/share/gdb/python/gdb/command/explore.py
deleted file mode 100644
index fd79de3..0000000
--- a/share/gdb/python/gdb/command/explore.py
+++ /dev/null
@@ -1,760 +0,0 @@
-# GDB 'explore' command.
-# Copyright (C) 2012-2014 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-"""Implementation of the GDB 'explore' command using the GDB Python API."""
-
-import gdb
-import sys
-
-if sys.version_info[0] > 2:
-    # Python 3 renamed raw_input to input
-    raw_input = input
-    
-class Explorer(object):
-    """Internal class which invokes other explorers."""
-
-    # This map is filled by the Explorer.init_env() function
-    type_code_to_explorer_map = { }
-
-    _SCALAR_TYPE_LIST = (
-        gdb.TYPE_CODE_CHAR,
-        gdb.TYPE_CODE_INT,
-        gdb.TYPE_CODE_BOOL,
-        gdb.TYPE_CODE_FLT,
-        gdb.TYPE_CODE_VOID,
-        gdb.TYPE_CODE_ENUM,
-    )
-
-    @staticmethod
-    def guard_expr(expr):
-        length = len(expr)
-        guard = False
-
-        if expr[0] == '(' and expr[length-1] == ')':
-            pass
-        else:
-            i = 0
-            while i < length:
-                c = expr[i]
-                if (c == '_' or ('a' <= c and c <= 'z') or
-                    ('A' <= c and c <= 'Z') or ('0' <= c and c <= '9')):
-                    pass
-                else:
-                    guard = True
-                    break
-                i += 1
-
-        if guard:
-            return "(" + expr + ")"
-        else:
-            return expr
-
-    @staticmethod
-    def explore_expr(expr, value, is_child):
-        """Main function to explore an expression value.
-
-        Arguments:
-            expr: The expression string that is being explored.
-            value: The gdb.Value value of the expression.
-            is_child: Boolean value to indicate if the expression is a child.
-                      An expression is a child if it is derived from the main
-                      expression entered by the user.  For example, if the user
-                      entered an expression which evaluates to a struct, then
-                      when exploring the fields of the struct, is_child is set
-                      to True internally.
-
-        Returns:
-            No return value.
-        """
-        type_code = value.type.code
-        if type_code in Explorer.type_code_to_explorer_map:
-            explorer_class = Explorer.type_code_to_explorer_map[type_code]
-            while explorer_class.explore_expr(expr, value, is_child):
-                pass
-        else:
-            print ("Explorer for type '%s' not yet available.\n" %
-                   str(value.type))
-
-    @staticmethod
-    def explore_type(name, datatype, is_child):
-        """Main function to explore a data type.
-
-        Arguments:
-            name: The string representing the path to the data type being
-                  explored.
-            datatype: The gdb.Type value of the data type being explored.
-            is_child: Boolean value to indicate if the name is a child.
-                      A name is a child if it is derived from the main name
-                      entered by the user.  For example, if the user entered
-                      the name of struct type, then when exploring the fields
-                      of the struct, is_child is set to True internally.
-
-        Returns:
-            No return value.
-        """
-        type_code = datatype.code
-        if type_code in Explorer.type_code_to_explorer_map:
-            explorer_class = Explorer.type_code_to_explorer_map[type_code]
-            while explorer_class.explore_type(name, datatype, is_child):
-                pass
-        else:
-            print ("Explorer for type '%s' not yet available.\n" %
-                   str(datatype))
-
-    @staticmethod
-    def init_env():
-        """Initializes the Explorer environment.
-        This function should be invoked before starting any exploration.  If
-        invoked before an exploration, it need not be invoked for subsequent
-        explorations.
-        """
-        Explorer.type_code_to_explorer_map = {
-            gdb.TYPE_CODE_CHAR : ScalarExplorer,
-            gdb.TYPE_CODE_INT : ScalarExplorer,
-            gdb.TYPE_CODE_BOOL : ScalarExplorer,
-            gdb.TYPE_CODE_FLT : ScalarExplorer,
-            gdb.TYPE_CODE_VOID : ScalarExplorer,
-            gdb.TYPE_CODE_ENUM : ScalarExplorer,
-            gdb.TYPE_CODE_STRUCT : CompoundExplorer,
-            gdb.TYPE_CODE_UNION : CompoundExplorer,
-            gdb.TYPE_CODE_PTR : PointerExplorer,
-            gdb.TYPE_CODE_REF : ReferenceExplorer,
-            gdb.TYPE_CODE_TYPEDEF : TypedefExplorer,
-            gdb.TYPE_CODE_ARRAY : ArrayExplorer
-        }
-
-    @staticmethod
-    def is_scalar_type(type):
-        """Checks whether a type is a scalar type.
-        A type is a scalar type of its type is
-            gdb.TYPE_CODE_CHAR or
-            gdb.TYPE_CODE_INT or
-            gdb.TYPE_CODE_BOOL or
-            gdb.TYPE_CODE_FLT or
-            gdb.TYPE_CODE_VOID or
-            gdb.TYPE_CODE_ENUM.
-
-        Arguments:
-            type: The type to be checked.
-
-        Returns:
-            'True' if 'type' is a scalar type. 'False' otherwise.
-        """
-        return type.code in Explorer._SCALAR_TYPE_LIST
-
-    @staticmethod
-    def return_to_parent_value():
-        """A utility function which prints that the current exploration session
-        is returning to the parent value. Useful when exploring values.
-        """
-        print ("\nReturning to parent value...\n")
-        
-    @staticmethod
-    def return_to_parent_value_prompt():
-        """A utility function which prompts the user to press the 'enter' key
-        so that the exploration session can shift back to the parent value.
-        Useful when exploring values.
-        """
-        raw_input("\nPress enter to return to parent value: ")
-        
-    @staticmethod
-    def return_to_enclosing_type():
-        """A utility function which prints that the current exploration session
-        is returning to the enclosing type.  Useful when exploring types.
-        """
-        print ("\nReturning to enclosing type...\n")
-        
-    @staticmethod
-    def return_to_enclosing_type_prompt():
-        """A utility function which prompts the user to press the 'enter' key
-        so that the exploration session can shift back to the enclosing type.
-        Useful when exploring types.
-        """
-        raw_input("\nPress enter to return to enclosing type: ")
-
-
-class ScalarExplorer(object):
-    """Internal class used to explore scalar values."""
-
-    @staticmethod
-    def explore_expr(expr, value, is_child):
-        """Function to explore scalar values.
-        See Explorer.explore_expr and Explorer.is_scalar_type for more
-        information.
-        """
-        print ("'%s' is a scalar value of type '%s'." %
-               (expr, value.type))
-        print ("%s = %s" % (expr, str(value)))
-
-        if is_child:
-            Explorer.return_to_parent_value_prompt()
-            Explorer.return_to_parent_value()
-
-        return False
-
-    @staticmethod
-    def explore_type(name, datatype, is_child):
-        """Function to explore scalar types.
-        See Explorer.explore_type and Explorer.is_scalar_type for more
-        information.
-        """
-        if datatype.code == gdb.TYPE_CODE_ENUM:
-            if is_child:
-                print ("%s is of an enumerated type '%s'." %
-                       (name, str(datatype)))
-            else:
-                print ("'%s' is an enumerated type." % name)
-        else:
-            if is_child:
-                print ("%s is of a scalar type '%s'." %
-                       (name, str(datatype)))
-            else:
-                print ("'%s' is a scalar type." % name)
-
-        if is_child:
-            Explorer.return_to_enclosing_type_prompt()
-            Explorer.return_to_enclosing_type()
-
-        return False
-
-
-class PointerExplorer(object):
-    """Internal class used to explore pointer values."""
-
-    @staticmethod
-    def explore_expr(expr, value, is_child):
-        """Function to explore pointer values.
-        See Explorer.explore_expr for more information.
-        """
-        print ("'%s' is a pointer to a value of type '%s'" %
-               (expr, str(value.type.target())))
-        option  = raw_input("Continue exploring it as a pointer to a single "
-                            "value [y/n]: ")
-        if option == "y":
-            deref_value = None
-            try:
-                deref_value = value.dereference()
-                str(deref_value)
-            except gdb.MemoryError:
-                print ("'%s' a pointer pointing to an invalid memory "
-                       "location." % expr)
-                if is_child:
-                    Explorer.return_to_parent_value_prompt()
-                return False
-            Explorer.explore_expr("*%s" % Explorer.guard_expr(expr),
-                                  deref_value, is_child)
-            return False
-        
-        option  = raw_input("Continue exploring it as a pointer to an "
-                            "array [y/n]: ")
-        if option == "y":
-            while True:
-                index = 0
-                try:
-                    index = int(raw_input("Enter the index of the element you "
-                                          "want to explore in '%s': " % expr))
-                except ValueError:
-                    break
-                element_expr = "%s[%d]" % (Explorer.guard_expr(expr), index)
-                element = value[index]
-                try:
-                    str(element)
-                except gdb.MemoryError:
-                    print ("Cannot read value at index %d." % index)
-                    continue
-                Explorer.explore_expr(element_expr, element, True)
-            return False
-
-        if is_child:
-            Explorer.return_to_parent_value()
-        return False
-
-    @staticmethod
-    def explore_type(name, datatype, is_child):
-        """Function to explore pointer types.
-        See Explorer.explore_type for more information.
-        """
-        target_type = datatype.target()
-        print ("\n%s is a pointer to a value of type '%s'." %
-               (name, str(target_type)))
-
-        Explorer.explore_type("the pointee type of %s" % name,
-                              target_type,
-                              is_child)
-        return False
-
-
-class ReferenceExplorer(object):
-    """Internal class used to explore reference (TYPE_CODE_REF) values."""
-
-    @staticmethod
-    def explore_expr(expr, value, is_child):
-        """Function to explore array values.
-        See Explorer.explore_expr for more information.
-        """
-        referenced_value = value.referenced_value()
-        Explorer.explore_expr(expr, referenced_value, is_child)
-        return False
-
-    @staticmethod
-    def explore_type(name, datatype, is_child):
-        """Function to explore pointer types.
-        See Explorer.explore_type for more information.
-        """
-        target_type = datatype.target()
-        Explorer.explore_type(name, target_type, is_child)
-        return False
-
-
-class ArrayExplorer(object):
-    """Internal class used to explore arrays."""
-
-    @staticmethod
-    def explore_expr(expr, value, is_child):
-        """Function to explore array values.
-        See Explorer.explore_expr for more information.
-        """
-        target_type = value.type.target()
-        print ("'%s' is an array of '%s'." % (expr, str(target_type)))
-        index = 0
-        try:
-            index = int(raw_input("Enter the index of the element you want to "
-                                  "explore in '%s': " % expr))
-        except ValueError:
-            if is_child:
-                Explorer.return_to_parent_value()
-            return False
-
-        element = None
-        try:
-            element = value[index]
-            str(element)
-        except gdb.MemoryError:
-            print ("Cannot read value at index %d." % index)
-            raw_input("Press enter to continue... ")
-            return True
-            
-        Explorer.explore_expr("%s[%d]" % (Explorer.guard_expr(expr), index),
-                              element, True)
-        return True
-
-    @staticmethod
-    def explore_type(name, datatype, is_child):
-        """Function to explore array types.
-        See Explorer.explore_type for more information.
-        """
-        target_type = datatype.target()
-        print ("%s is an array of '%s'." % (name, str(target_type)))
-
-        Explorer.explore_type("the array element of %s" % name, target_type,
-                              is_child)
-        return False
-
-
-class CompoundExplorer(object):
-    """Internal class used to explore struct, classes and unions."""
-
-    @staticmethod
-    def _print_fields(print_list):
-        """Internal function which prints the fields of a struct/class/union.
-        """
-        max_field_name_length = 0
-        for pair in print_list:
-            if max_field_name_length < len(pair[0]):
-                max_field_name_length = len(pair[0])
-
-        for pair in print_list:
-            print ("  %*s = %s" % (max_field_name_length, pair[0], pair[1]))
-
-    @staticmethod
-    def _get_real_field_count(fields):
-        real_field_count = 0;
-        for field in fields:
-            if not field.artificial:
-                real_field_count = real_field_count + 1
-
-        return real_field_count
-
-    @staticmethod
-    def explore_expr(expr, value, is_child):
-        """Function to explore structs/classes and union values.
-        See Explorer.explore_expr for more information.
-        """
-        datatype = value.type
-        type_code = datatype.code
-        fields = datatype.fields()
-
-        if type_code == gdb.TYPE_CODE_STRUCT:
-            type_desc = "struct/class"
-        else:
-            type_desc = "union"
-
-        if CompoundExplorer._get_real_field_count(fields) == 0:
-            print ("The value of '%s' is a %s of type '%s' with no fields." %
-                   (expr, type_desc, str(value.type)))
-            if is_child:
-                Explorer.return_to_parent_value_prompt()
-            return False
-
-        print ("The value of '%s' is a %s of type '%s' with the following "
-              "fields:\n" % (expr, type_desc, str(value.type)))
-
-        has_explorable_fields = False
-        choice_to_compound_field_map = { }
-        current_choice = 0
-        print_list = [ ]
-        for field in fields:
-            if field.artificial:
-                continue
-            field_full_name = Explorer.guard_expr(expr) + "." + field.name
-            if field.is_base_class:
-                field_value = value.cast(field.type)
-            else:
-                field_value = value[field.name]
-            literal_value = ""
-            if type_code == gdb.TYPE_CODE_UNION:
-                literal_value = ("<Enter %d to explore this field of type "
-                                 "'%s'>" % (current_choice, str(field.type)))
-                has_explorable_fields = True
-            else:
-                if Explorer.is_scalar_type(field.type):
-                    literal_value = ("%s .. (Value of type '%s')" %
-                                     (str(field_value), str(field.type)))
-                else:
-                    if field.is_base_class:
-                        field_desc = "base class"
-                    else:
-                        field_desc = "field"
-                    literal_value = ("<Enter %d to explore this %s of type "
-                                     "'%s'>" %
-                                     (current_choice, field_desc,
-                                      str(field.type)))
-                    has_explorable_fields = True
-
-            choice_to_compound_field_map[str(current_choice)] = (
-                field_full_name, field_value)
-            current_choice = current_choice + 1
-
-            print_list.append((field.name, literal_value))
-
-        CompoundExplorer._print_fields(print_list)
-        print ("")
-
-        if has_explorable_fields:
-            choice = raw_input("Enter the field number of choice: ")
-            if choice in choice_to_compound_field_map:
-                Explorer.explore_expr(choice_to_compound_field_map[choice][0],
-                                      choice_to_compound_field_map[choice][1],
-                                      True)
-                return True
-            else:
-                if is_child:
-                    Explorer.return_to_parent_value()
-        else:
-            if is_child:
-                Explorer.return_to_parent_value_prompt()
-
-        return False
-
-    @staticmethod
-    def explore_type(name, datatype, is_child):
-        """Function to explore struct/class and union types.
-        See Explorer.explore_type for more information.
-        """
-        type_code = datatype.code
-        type_desc = ""
-        if type_code == gdb.TYPE_CODE_STRUCT:
-            type_desc = "struct/class"
-        else:
-            type_desc = "union"
-
-        fields = datatype.fields()
-        if CompoundExplorer._get_real_field_count(fields) == 0:
-            if is_child:
-                print ("%s is a %s of type '%s' with no fields." %
-                       (name, type_desc, str(datatype)))
-                Explorer.return_to_enclosing_type_prompt()
-            else:
-                print ("'%s' is a %s with no fields." % (name, type_desc))
-            return False
-
-        if is_child:
-            print ("%s is a %s of type '%s' "
-                   "with the following fields:\n" %
-                   (name, type_desc, str(datatype)))
-        else:
-            print ("'%s' is a %s with the following "
-                   "fields:\n" %
-                   (name, type_desc))
-
-        has_explorable_fields = False
-        current_choice = 0
-        choice_to_compound_field_map = { }
-        print_list = [ ]
-        for field in fields:
-            if field.artificial:
-                continue
-            if field.is_base_class:
-                field_desc = "base class"
-            else:
-                field_desc = "field"
-            rhs = ("<Enter %d to explore this %s of type '%s'>" %
-                   (current_choice, field_desc, str(field.type)))
-            print_list.append((field.name, rhs))
-            choice_to_compound_field_map[str(current_choice)] = (
-                field.name, field.type, field_desc)
-            current_choice = current_choice + 1
-
-        CompoundExplorer._print_fields(print_list)
-        print ("")
-
-        if len(choice_to_compound_field_map) > 0:
-            choice = raw_input("Enter the field number of choice: ")
-            if choice in choice_to_compound_field_map:
-                if is_child:
-                    new_name = ("%s '%s' of %s" % 
-                                (choice_to_compound_field_map[choice][2],
-                                 choice_to_compound_field_map[choice][0],
-                                 name))
-                else:
-                    new_name = ("%s '%s' of '%s'" % 
-                                (choice_to_compound_field_map[choice][2],
-                                 choice_to_compound_field_map[choice][0],
-                                 name))
-                Explorer.explore_type(new_name,
-                    choice_to_compound_field_map[choice][1], True)
-                return True
-            else:
-                if is_child:
-                    Explorer.return_to_enclosing_type()
-        else:
-            if is_child:
-                Explorer.return_to_enclosing_type_prompt()
-
-        return False
-           
-
-class TypedefExplorer(object):
-    """Internal class used to explore values whose type is a typedef."""
-
-    @staticmethod
-    def explore_expr(expr, value, is_child):
-        """Function to explore typedef values.
-        See Explorer.explore_expr for more information.
-        """
-        actual_type = value.type.strip_typedefs()
-        print ("The value of '%s' is of type '%s' "
-               "which is a typedef of type '%s'" %
-               (expr, str(value.type), str(actual_type)))
-
-        Explorer.explore_expr(expr, value.cast(actual_type), is_child)
-        return False
-
-    @staticmethod
-    def explore_type(name, datatype, is_child):
-        """Function to explore typedef types.
-        See Explorer.explore_type for more information.
-        """
-        actual_type = datatype.strip_typedefs()
-        if is_child:
-            print ("The type of %s is a typedef of type '%s'." %
-                   (name, str(actual_type)))
-        else:
-            print ("The type '%s' is a typedef of type '%s'." %
-                   (name, str(actual_type)))
-
-        Explorer.explore_type(name, actual_type, is_child)
-        return False
-
-
-class ExploreUtils(object):
-    """Internal class which provides utilities for the main command classes."""
-
-    @staticmethod
-    def check_args(name, arg_str):
-        """Utility to check if adequate number of arguments are passed to an
-        explore command.
-
-        Arguments:
-            name: The name of the explore command.
-            arg_str: The argument string passed to the explore command.
-
-        Returns:
-            True if adequate arguments are passed, false otherwise.
-
-        Raises:
-            gdb.GdbError if adequate arguments are not passed.
-        """
-        if len(arg_str) < 1:
-            raise gdb.GdbError("ERROR: '%s' requires an argument."
-                               % name)
-            return False
-        else:
-            return True
-
-    @staticmethod
-    def get_type_from_str(type_str):
-        """A utility function to deduce the gdb.Type value from a string
-        representing the type.
-
-        Arguments:
-            type_str: The type string from which the gdb.Type value should be
-                      deduced.
-
-        Returns:
-            The deduced gdb.Type value if possible, None otherwise.
-        """
-        try:
-            # Assume the current language to be C/C++ and make a try.
-            return gdb.parse_and_eval("(%s *)0" % type_str).type.target()
-        except RuntimeError:
-            # If assumption of current language to be C/C++ was wrong, then
-            # lookup the type using the API.
-            try:
-                return gdb.lookup_type(type_str)
-            except RuntimeError:
-                return None
-
-    @staticmethod
-    def get_value_from_str(value_str):
-        """A utility function to deduce the gdb.Value value from a string
-        representing the value.
-
-        Arguments:
-            value_str: The value string from which the gdb.Value value should
-                       be deduced.
-
-        Returns:
-            The deduced gdb.Value value if possible, None otherwise.
-        """
-        try:
-            return gdb.parse_and_eval(value_str)
-        except RuntimeError:
-            return None
-
-
-class ExploreCommand(gdb.Command):
-    """Explore a value or a type valid in the current context.
-
-       Usage:
-
-         explore ARG
-
-         - ARG is either a valid expression or a type name.
-         - At any stage of exploration, hit the return key (instead of a
-           choice, if any) to return to the enclosing type or value.
-    """
-
-    def __init__(self):
-        super(ExploreCommand, self).__init__(name = "explore",
-                                             command_class = gdb.COMMAND_DATA,
-                                             prefix = True)
-
-    def invoke(self, arg_str, from_tty):
-        if ExploreUtils.check_args("explore", arg_str) == False:
-            return
-
-        # Check if it is a value
-        value = ExploreUtils.get_value_from_str(arg_str)
-        if value is not None:
-            Explorer.explore_expr(arg_str, value, False)
-            return
-
-        # If it is not a value, check if it is a type
-        datatype = ExploreUtils.get_type_from_str(arg_str)
-        if datatype is not None:
-            Explorer.explore_type(arg_str, datatype, False)
-            return
-
-        # If it is neither a value nor a type, raise an error.
-        raise gdb.GdbError(
-            ("'%s' neither evaluates to a value nor is a type "
-             "in the current context." %
-             arg_str))
-
-
-class ExploreValueCommand(gdb.Command):
-    """Explore value of an expression valid in the current context.
-
-       Usage:
-
-         explore value ARG
-
-         - ARG is a valid expression.
-         - At any stage of exploration, hit the return key (instead of a
-           choice, if any) to return to the enclosing value.
-    """
- 
-    def __init__(self):
-        super(ExploreValueCommand, self).__init__(
-            name = "explore value", command_class = gdb.COMMAND_DATA)
-
-    def invoke(self, arg_str, from_tty):
-        if ExploreUtils.check_args("explore value", arg_str) == False:
-            return
-
-        value = ExploreUtils.get_value_from_str(arg_str)
-        if value is None:
-            raise gdb.GdbError(
-                (" '%s' does not evaluate to a value in the current "
-                 "context." %
-                 arg_str))
-            return
-
-        Explorer.explore_expr(arg_str, value, False)
-
-
-class ExploreTypeCommand(gdb.Command):            
-    """Explore a type or the type of an expression valid in the current
-       context.
-
-       Usage:
-
-         explore type ARG
-
-         - ARG is a valid expression or a type name.
-         - At any stage of exploration, hit the return key (instead of a
-           choice, if any) to return to the enclosing type.
-    """
-
-    def __init__(self):
-        super(ExploreTypeCommand, self).__init__(
-            name = "explore type", command_class = gdb.COMMAND_DATA)
-
-    def invoke(self, arg_str, from_tty):
-        if ExploreUtils.check_args("explore type", arg_str) == False:
-            return
-
-        datatype = ExploreUtils.get_type_from_str(arg_str)
-        if datatype is not None:
-            Explorer.explore_type(arg_str, datatype, False)
-            return
-
-        value = ExploreUtils.get_value_from_str(arg_str)
-        if value is not None:
-            print ("'%s' is of type '%s'." % (arg_str, str(value.type)))
-            Explorer.explore_type(str(value.type), value.type, False)
-            return
-
-        raise gdb.GdbError(("'%s' is not a type or value in the current "
-                            "context." % arg_str))
-
-
-Explorer.init_env()
-
-ExploreCommand()
-ExploreValueCommand()
-ExploreTypeCommand()
diff --git a/share/gdb/python/gdb/command/frame_filters.py b/share/gdb/python/gdb/command/frame_filters.py
deleted file mode 100644
index 450c5bf..0000000
--- a/share/gdb/python/gdb/command/frame_filters.py
+++ /dev/null
@@ -1,467 +0,0 @@
-# Frame-filter commands.
-# Copyright (C) 2013-2014 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/>.
-
-"""GDB commands for working with frame-filters."""
-
-import sys
-import gdb
-import copy
-from gdb.FrameIterator import FrameIterator
-from gdb.FrameDecorator import FrameDecorator
-import gdb.frames
-import itertools
-
-# GDB Commands.
-class SetFilterPrefixCmd(gdb.Command):
-    """Prefix command for 'set' frame-filter related operations."""
-
-    def __init__(self):
-        super(SetFilterPrefixCmd, self).__init__("set frame-filter",
-                                                 gdb.COMMAND_OBSCURE,
-                                                 gdb.COMPLETE_NONE, True)
-
-class ShowFilterPrefixCmd(gdb.Command):
-    """Prefix command for 'show' frame-filter related operations."""
-    def __init__(self):
-        super(ShowFilterPrefixCmd, self).__init__("show frame-filter",
-                                                  gdb.COMMAND_OBSCURE,
-                                                  gdb.COMPLETE_NONE, True)
-class InfoFrameFilter(gdb.Command):
-    """List all registered Python frame-filters.
-
-    Usage: info frame-filters
-    """
-
-    def __init__(self):
-        super(InfoFrameFilter, self).__init__("info frame-filter",
-                                              gdb.COMMAND_DATA)
-    @staticmethod
-    def enabled_string(state):
-        """Return "Yes" if filter is enabled, otherwise "No"."""
-        if state:
-            return "Yes"
-        else:
-            return "No"
-
-    def list_frame_filters(self, frame_filters):
-        """ Internal worker function to list and print frame filters
-        in a dictionary.
-
-        Arguments:
-           frame_filters: The name of the dictionary, as
-           specified by GDB user commands.
-        """
-
-        sorted_frame_filters = sorted(frame_filters.items(),
-                                      key=lambda i: gdb.frames.get_priority(i[1]),
-                                      reverse=True)
-
-        if len(sorted_frame_filters) == 0:
-            print("  No frame filters registered.")
-        else:
-            print("  Priority  Enabled  Name")
-            for frame_filter in sorted_frame_filters:
-                name = frame_filter[0]
-                try:
-                    priority = '{:<8}'.format(
-                        str(gdb.frames.get_priority(frame_filter[1])))
-                    enabled = '{:<7}'.format(
-                        self.enabled_string(gdb.frames.get_enabled(frame_filter[1])))
-                except Exception:
-                    e = sys.exc_info()[1]
-                    print("  Error printing filter '"+name+"': "+str(e))
-                else:
-                    print("  %s  %s  %s" % (priority, enabled, name))
-
-    def print_list(self, title, filter_list, blank_line):
-        print(title)
-        self.list_frame_filters(filter_list)
-        if blank_line:
-            print("")
-
-    def invoke(self, arg, from_tty):
-        self.print_list("global frame-filters:", gdb.frame_filters, True)
-
-        cp = gdb.current_progspace()
-        self.print_list("progspace %s frame-filters:" % cp.filename,
-                        cp.frame_filters, True)
-
-        for objfile in gdb.objfiles():
-            self.print_list("objfile %s frame-filters:" % objfile.filename,
-                            objfile.frame_filters, False)
-
-# Internal enable/disable functions.
-
-def _enable_parse_arg(cmd_name, arg):
-    """ Internal worker function to take an argument from
-    enable/disable and return a tuple of arguments.
-
-    Arguments:
-        cmd_name: Name of the command invoking this function.
-        args: The argument as a string.
-
-    Returns:
-        A tuple containing the dictionary, and the argument, or just
-        the dictionary in the case of "all".
-    """
-
-    argv = gdb.string_to_argv(arg);
-    argc = len(argv)
-    if argv[0] == "all" and argc > 1:
-        raise gdb.GdbError(cmd_name + ": with 'all' " \
-                          "you may not specify a filter.")
-    else:
-        if argv[0] != "all" and argc != 2:
-            raise gdb.GdbError(cmd_name + " takes exactly two arguments.")
-
-    return argv
-
-def _do_enable_frame_filter(command_tuple, flag):
-    """Worker for enabling/disabling frame_filters.
-
-    Arguments:
-        command_type: A tuple with the first element being the
-                      frame filter dictionary, and the second being
-                      the frame filter name.
-        flag: True for Enable, False for Disable.
-    """
-
-    list_op = command_tuple[0]
-    op_list = gdb.frames.return_list(list_op)
-
-    if list_op == "all":
-        for item in op_list:
-            gdb.frames.set_enabled(item, flag)
-    else:
-        frame_filter = command_tuple[1]
-        try:
-            ff = op_list[frame_filter]
-        except KeyError:
-            msg = "frame-filter '" + str(name) + "' not found."
-            raise gdb.GdbError(msg)
-
-        gdb.frames.set_enabled(ff, flag)
-
-def _complete_frame_filter_list(text, word, all_flag):
-    """Worker for frame filter dictionary name completion.
-
-    Arguments:
-        text: The full text of the command line.
-        word: The most recent word of the command line.
-        all_flag: Whether to include the word "all" in completion.
-
-    Returns:
-        A list of suggested frame filter dictionary name completions
-        from text/word analysis.  This list can be empty when there
-        are no suggestions for completion.
-        """
-    if all_flag == True:
-        filter_locations = ["all", "global", "progspace"]
-    else:
-        filter_locations = ["global", "progspace"]
-    for objfile in gdb.objfiles():
-        filter_locations.append(objfile.filename)
-
-    # If the user just asked for completions with no completion
-    # hints, just return all the frame filter dictionaries we know
-    # about.
-    if (text == ""):
-        return filter_locations
-
-    # Otherwise filter on what we know.
-    flist = filter(lambda x,y=text:x.startswith(y), filter_locations)
-
-    # If we only have one completion, complete it and return it.
-    if len(flist) == 1:
-        flist[0] = flist[0][len(text)-len(word):]
-
-    # Otherwise, return an empty list, or a list of frame filter
-    # dictionaries that the previous filter operation returned.
-    return flist
-
-def _complete_frame_filter_name(word, printer_dict):
-    """Worker for frame filter name completion.
-
-    Arguments:
-
-        word: The most recent word of the command line.
-
-        printer_dict: The frame filter dictionary to search for frame
-        filter name completions.
-
-        Returns: A list of suggested frame filter name completions
-        from word analysis of the frame filter dictionary.  This list
-        can be empty when there are no suggestions for completion.
-    """
-
-    printer_keys = printer_dict.keys()
-    if (word == ""):
-        return printer_keys
-
-    flist = filter(lambda x,y=word:x.startswith(y), printer_keys)
-    return flist
-
-class EnableFrameFilter(gdb.Command):
-    """GDB command to disable the specified frame-filter.
-
-    Usage: enable frame-filter enable DICTIONARY [NAME]
-
-    DICTIONARY is the name of the frame filter dictionary on which to
-    operate.  If dictionary is set to "all", perform operations on all
-    dictionaries.  Named dictionaries are: "global" for the global
-    frame filter dictionary, "progspace" for the program space's frame
-    filter dictionary.  If either all, or the two named dictionaries
-    are not specified, the dictionary name is assumed to be the name
-    of the object-file name.
-
-    NAME matches the name of the frame-filter to operate on.  If
-    DICTIONARY is "all", NAME is ignored.
-    """
-    def __init__(self):
-        super(EnableFrameFilter, self).__init__("enable frame-filter",
-                                                 gdb.COMMAND_DATA)
-    def complete(self, text, word):
-        """Completion function for both frame filter dictionary, and
-        frame filter name."""
-        if text.count(" ") == 0:
-            return _complete_frame_filter_list(text, word, True)
-        else:
-            printer_list = gdb.frames.return_list(text.split()[0].rstrip())
-            return _complete_frame_filter_name(word, printer_list)
-
-    def invoke(self, arg, from_tty):
-        command_tuple = _enable_parse_arg("enable frame-filter", arg)
-        _do_enable_frame_filter(command_tuple, True)
-
-
-class DisableFrameFilter(gdb.Command):
-    """GDB command to disable the specified frame-filter.
-
-    Usage: disable frame-filter disable DICTIONARY [NAME]
-
-    DICTIONARY is the name of the frame filter dictionary on which to
-    operate.  If dictionary is set to "all", perform operations on all
-    dictionaries.  Named dictionaries are: "global" for the global
-    frame filter dictionary, "progspace" for the program space's frame
-    filter dictionary.  If either all, or the two named dictionaries
-    are not specified, the dictionary name is assumed to be the name
-    of the object-file name.
-
-    NAME matches the name of the frame-filter to operate on.  If
-    DICTIONARY is "all", NAME is ignored.
-    """
-    def __init__(self):
-        super(DisableFrameFilter, self).__init__("disable frame-filter",
-                                                  gdb.COMMAND_DATA)
-
-    def complete(self, text, word):
-        """Completion function for both frame filter dictionary, and
-        frame filter name."""
-        if text.count(" ") == 0:
-            return _complete_frame_filter_list(text, word, True)
-        else:
-            printer_list = gdb.frames.return_list(text.split()[0].rstrip())
-            return _complete_frame_filter_name(word, printer_list)
-
-    def invoke(self, arg, from_tty):
-        command_tuple = _enable_parse_arg("disable frame-filter", arg)
-        _do_enable_frame_filter(command_tuple, False)
-
-class SetFrameFilterPriority(gdb.Command):
-    """GDB command to set the priority of the specified frame-filter.
-
-    Usage: set frame-filter priority DICTIONARY NAME PRIORITY
-
-    DICTIONARY is the name of the frame filter dictionary on which to
-    operate.  Named dictionaries are: "global" for the global frame
-    filter dictionary, "progspace" for the program space's framefilter
-    dictionary.  If either of these two are not specified, the
-    dictionary name is assumed to be the name of the object-file name.
-
-    NAME matches the name of the frame filter to operate on.
-
-    PRIORITY is the an integer to assign the new priority to the frame
-    filter.
-    """
-
-    def __init__(self):
-        super(SetFrameFilterPriority, self).__init__("set frame-filter " \
-                                                     "priority",
-                                                     gdb.COMMAND_DATA)
-
-    def _parse_pri_arg(self, arg):
-        """Internal worker to parse a priority from a tuple.
-
-        Arguments:
-            arg: Tuple which contains the arguments from the command.
-
-        Returns:
-            A tuple containing the dictionary, name and priority from
-            the arguments.
-
-        Raises:
-            gdb.GdbError: An error parsing the arguments.
-        """
-
-        argv = gdb.string_to_argv(arg);
-        argc = len(argv)
-        if argc != 3:
-            print("set frame-filter priority " \
-                  "takes exactly three arguments.")
-            return None
-
-        return argv
-
-    def _set_filter_priority(self, command_tuple):
-        """Internal worker for setting priority of frame-filters, by
-        parsing a tuple and calling _set_priority with the parsed
-        tuple.
-
-        Arguments:
-            command_tuple: Tuple which contains the arguments from the
-                           command.
-        """
-
-        list_op = command_tuple[0]
-        frame_filter = command_tuple[1]
-
-        # GDB returns arguments as a string, so convert priority to
-        # a number.
-        priority = int(command_tuple[2])
-
-        op_list = gdb.frames.return_list(list_op)
-
-        try:
-            ff = op_list[frame_filter]
-        except KeyError:
-            msg = "frame-filter '" + str(name) + "' not found."
-            raise gdb.GdbError(msg)
-
-        gdb.frames.set_priority(ff, priority)
-
-    def complete(self, text, word):
-        """Completion function for both frame filter dictionary, and
-        frame filter name."""
-        if text.count(" ") == 0:
-            return _complete_frame_filter_list(text, word, False)
-        else:
-            printer_list = gdb.frames.return_list(text.split()[0].rstrip())
-            return _complete_frame_filter_name(word, printer_list)
-
-    def invoke(self, arg, from_tty):
-        command_tuple = self._parse_pri_arg(arg)
-        if command_tuple != None:
-            self._set_filter_priority(command_tuple)
-
-class ShowFrameFilterPriority(gdb.Command):
-    """GDB command to show the priority of the specified frame-filter.
-
-    Usage: show frame-filter priority DICTIONARY NAME
-
-    DICTIONARY is the name of the frame filter dictionary on which to
-    operate.  Named dictionaries are: "global" for the global frame
-    filter dictionary, "progspace" for the program space's framefilter
-    dictionary.  If either of these two are not specified, the
-    dictionary name is assumed to be the name of the object-file name.
-
-    NAME matches the name of the frame-filter to operate on.
-    """
-
-    def __init__(self):
-        super(ShowFrameFilterPriority, self).__init__("show frame-filter " \
-                                                      "priority",
-                                                      gdb.COMMAND_DATA)
-
-    def _parse_pri_arg(self, arg):
-        """Internal worker to parse a dictionary and name from a
-        tuple.
-
-        Arguments:
-            arg: Tuple which contains the arguments from the command.
-
-        Returns:
-            A tuple containing the dictionary,  and frame filter name.
-
-        Raises:
-            gdb.GdbError: An error parsing the arguments.
-        """
-
-        argv = gdb.string_to_argv(arg);
-        argc = len(argv)
-        if argc != 2:
-            print("show frame-filter priority " \
-                  "takes exactly two arguments.")
-            return None
-
-        return argv
-
-    def get_filter_priority(self, frame_filters, name):
-        """Worker for retrieving the priority of frame_filters.
-
-        Arguments:
-            frame_filters: Name of frame filter dictionary.
-            name: object to select printers.
-
-        Returns:
-            The priority of the frame filter.
-
-        Raises:
-            gdb.GdbError: A frame filter cannot be found.
-        """
-
-        op_list = gdb.frames.return_list(frame_filters)
-
-        try:
-            ff = op_list[name]
-        except KeyError:
-            msg = "frame-filter '" + str(name) + "' not found."
-            raise gdb.GdbError(msg)
-
-        return gdb.frames.get_priority(ff)
-
-    def complete(self, text, word):
-        """Completion function for both frame filter dictionary, and
-        frame filter name."""
-
-        if text.count(" ") == 0:
-            return _complete_frame_filter_list(text, word, False)
-        else:
-            printer_list = frame._return_list(text.split()[0].rstrip())
-            return _complete_frame_filter_name(word, printer_list)
-
-    def invoke(self, arg, from_tty):
-        command_tuple = self._parse_pri_arg(arg)
-        if command_tuple == None:
-            return
-        filter_name = command_tuple[1]
-        list_name = command_tuple[0]
-        try:
-            priority = self.get_filter_priority(list_name, filter_name);
-        except Exception:
-            e = sys.exc_info()[1]
-            print("Error printing filter priority for '"+name+"':"+str(e))
-        else:
-            print("Priority of filter '" + filter_name + "' in list '" \
-                + list_name + "' is: " + str(priority))
-
-# Register commands
-SetFilterPrefixCmd()
-ShowFilterPrefixCmd()
-InfoFrameFilter()
-EnableFrameFilter()
-DisableFrameFilter()
-SetFrameFilterPriority()
-ShowFrameFilterPriority()
diff --git a/share/gdb/python/gdb/command/pretty_printers.py b/share/gdb/python/gdb/command/pretty_printers.py
deleted file mode 100644
index a9027b3..0000000
--- a/share/gdb/python/gdb/command/pretty_printers.py
+++ /dev/null
@@ -1,368 +0,0 @@
-# Pretty-printer commands.
-# Copyright (C) 2010-2014 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/>.
-
-"""GDB commands for working with pretty-printers."""
-
-import copy
-import gdb
-import re
-
-
-def parse_printer_regexps(arg):
-    """Internal utility to parse a pretty-printer command argv.
-
-    Arguments:
-        arg: The arguments to the command.  The format is:
-             [object-regexp [name-regexp]].
-             Individual printers in a collection are named as
-             printer-name;subprinter-name.
-
-    Returns:
-        The result is a 3-tuple of compiled regular expressions, except that
-        the resulting compiled subprinter regexp is None if not provided.
-
-    Raises:
-        SyntaxError: an error processing ARG
-    """
-
-    argv = gdb.string_to_argv(arg);
-    argc = len(argv)
-    object_regexp = ""  # match everything
-    name_regexp = ""  # match everything
-    subname_regexp = None
-    if argc > 3:
-        raise SyntaxError("too many arguments")
-    if argc >= 1:
-        object_regexp = argv[0]
-    if argc >= 2:
-        name_subname = argv[1].split(";", 1)
-        name_regexp = name_subname[0]
-        if len(name_subname) == 2:
-            subname_regexp = name_subname[1]
-    # That re.compile raises SyntaxError was determined empirically.
-    # We catch it and reraise it to provide a slightly more useful
-    # error message for the user.
-    try:
-        object_re = re.compile(object_regexp)
-    except SyntaxError:
-        raise SyntaxError("invalid object regexp: %s" % object_regexp)
-    try:
-        name_re = re.compile (name_regexp)
-    except SyntaxError:
-        raise SyntaxError("invalid name regexp: %s" % name_regexp)
-    if subname_regexp is not None:
-        try:
-            subname_re = re.compile(subname_regexp)
-        except SyntaxError:
-            raise SyntaxError("invalid subname regexp: %s" % subname_regexp)
-    else:
-        subname_re = None
-    return(object_re, name_re, subname_re)
-
-
-def printer_enabled_p(printer):
-    """Internal utility to see if printer (or subprinter) is enabled."""
-    if hasattr(printer, "enabled"):
-        return printer.enabled
-    else:
-        return True
-
-
-class InfoPrettyPrinter(gdb.Command):
-    """GDB command to list all registered pretty-printers.
-
-    Usage: info pretty-printer [object-regexp [name-regexp]]
-
-    OBJECT-REGEXP is a regular expression matching the objects to list.
-    Objects are "global", the program space's file, and the objfiles within
-    that program space.
-
-    NAME-REGEXP matches the name of the pretty-printer.
-    Individual printers in a collection are named as
-    printer-name;subprinter-name.
-    """
-
-    def __init__ (self):
-        super(InfoPrettyPrinter, self).__init__("info pretty-printer",
-                                                 gdb.COMMAND_DATA)
-
-    @staticmethod
-    def enabled_string(printer):
-        """Return "" if PRINTER is enabled, otherwise " [disabled]"."""
-        if printer_enabled_p(printer):
-            return ""
-        else:
-            return " [disabled]"
-
-    @staticmethod
-    def printer_name(printer):
-        """Return the printer's name."""
-        if hasattr(printer, "name"):
-            return printer.name
-        if hasattr(printer, "__name__"):
-            return printer.__name__
-        # This "shouldn't happen", but the public API allows for
-        # direct additions to the pretty-printer list, and we shouldn't
-        # crash because someone added a bogus printer.
-        # Plus we want to give the user a way to list unknown printers.
-        return "unknown"
-
-    def list_pretty_printers(self, pretty_printers, name_re, subname_re):
-        """Print a list of pretty-printers."""
-        # A potential enhancement is to provide an option to list printers in
-        # "lookup order" (i.e. unsorted).
-        sorted_pretty_printers = sorted (copy.copy(pretty_printers),
-                                         key = self.printer_name)
-        for printer in sorted_pretty_printers:
-            name = self.printer_name(printer)
-            enabled = self.enabled_string(printer)
-            if name_re.match(name):
-                print ("  %s%s" % (name, enabled))
-                if (hasattr(printer, "subprinters") and
-                    printer.subprinters is not None):
-                    sorted_subprinters = sorted (copy.copy(printer.subprinters),
-                                                 key = self.printer_name)
-                    for subprinter in sorted_subprinters:
-                        if (not subname_re or
-                            subname_re.match(subprinter.name)):
-                            print ("    %s%s" %
-                                   (subprinter.name,
-                                    self.enabled_string(subprinter)))
-
-    def invoke1(self, title, printer_list,
-                obj_name_to_match, object_re, name_re, subname_re):
-        """Subroutine of invoke to simplify it."""
-        if printer_list and object_re.match(obj_name_to_match):
-            print (title)
-            self.list_pretty_printers(printer_list, name_re, subname_re)
-
-    def invoke(self, arg, from_tty):
-        """GDB calls this to perform the command."""
-        (object_re, name_re, subname_re) = parse_printer_regexps(arg)
-        self.invoke1("global pretty-printers:", gdb.pretty_printers,
-                     "global", object_re, name_re, subname_re)
-        cp = gdb.current_progspace()
-        self.invoke1("progspace %s pretty-printers:" % cp.filename,
-                     cp.pretty_printers, "progspace",
-                     object_re, name_re, subname_re)
-        for objfile in gdb.objfiles():
-            self.invoke1("  objfile %s pretty-printers:" % objfile.filename,
-                         objfile.pretty_printers, objfile.filename,
-                         object_re, name_re, subname_re)
-
-
-def count_enabled_printers(pretty_printers):
-    """Return a 2-tuple of number of enabled and total printers."""
-    enabled = 0
-    total = 0
-    for printer in pretty_printers:
-        if (hasattr(printer, "subprinters")
-            and printer.subprinters is not None):
-            if printer_enabled_p(printer):
-                for subprinter in printer.subprinters:
-                    if printer_enabled_p(subprinter):
-                        enabled += 1
-            total += len(printer.subprinters)
-        else:
-            if printer_enabled_p(printer):
-                enabled += 1
-            total += 1
-    return (enabled, total)
-
-
-def count_all_enabled_printers():
-    """Return a 2-tuble of the enabled state and total number of all printers.
-    This includes subprinters.
-    """
-    enabled_count = 0
-    total_count = 0
-    (t_enabled, t_total) = count_enabled_printers(gdb.pretty_printers)
-    enabled_count += t_enabled
-    total_count += t_total
-    (t_enabled, t_total) = count_enabled_printers(gdb.current_progspace().pretty_printers)
-    enabled_count += t_enabled
-    total_count += t_total
-    for objfile in gdb.objfiles():
-        (t_enabled, t_total) = count_enabled_printers(objfile.pretty_printers)
-        enabled_count += t_enabled
-        total_count += t_total
-    return (enabled_count, total_count)
-
-
-def pluralize(text, n, suffix="s"):
-    """Return TEXT pluralized if N != 1."""
-    if n != 1:
-        return "%s%s" % (text, suffix)
-    else:
-        return text
-
-
-def show_pretty_printer_enabled_summary():
-    """Print the number of printers enabled/disabled.
-    We count subprinters individually.
-    """
-    (enabled_count, total_count) = count_all_enabled_printers()
-    print ("%d of %d printers enabled" % (enabled_count, total_count))
-
-
-def do_enable_pretty_printer_1 (pretty_printers, name_re, subname_re, flag):
-    """Worker for enabling/disabling pretty-printers.
-
-    Arguments:
-        pretty_printers: list of pretty-printers
-        name_re: regular-expression object to select printers
-        subname_re: regular expression object to select subprinters or None
-                    if all are affected
-        flag: True for Enable, False for Disable
-
-    Returns:
-        The number of printers affected.
-        This is just for informational purposes for the user.
-    """
-    total = 0
-    for printer in pretty_printers:
-        if (hasattr(printer, "name") and name_re.match(printer.name) or
-            hasattr(printer, "__name__") and name_re.match(printer.__name__)):
-            if (hasattr(printer, "subprinters") and
-                printer.subprinters is not None):
-                if not subname_re:
-                    # Only record printers that change state.
-                    if printer_enabled_p(printer) != flag:
-                        for subprinter in printer.subprinters:
-                            if printer_enabled_p(subprinter):
-                                total += 1
-                    # NOTE: We preserve individual subprinter settings.
-                    printer.enabled = flag
-                else:
-                    # NOTE: Whether this actually disables the subprinter
-                    # depends on whether the printer's lookup function supports
-                    # the "enable" API.  We can only assume it does.
-                    for subprinter in printer.subprinters:
-                        if subname_re.match(subprinter.name):
-                            # Only record printers that change state.
-                           if (printer_enabled_p(printer) and
-                               printer_enabled_p(subprinter) != flag):
-                               total += 1
-                           subprinter.enabled = flag
-            else:
-                # This printer has no subprinters.
-                # If the user does "disable pretty-printer .* .* foo"
-                # should we disable printers that don't have subprinters?
-                # How do we apply "foo" in this context?  Since there is no
-                # "foo" subprinter it feels like we should skip this printer.
-                # There's still the issue of how to handle
-                # "disable pretty-printer .* .* .*", and every other variation
-                # that can match everything.  For now punt and only support
-                # "disable pretty-printer .* .*" (i.e. subname is elided)
-                # to disable everything.
-                if not subname_re:
-                    # Only record printers that change state.
-                    if printer_enabled_p(printer) != flag:
-                        total += 1
-                    printer.enabled = flag
-    return total
-
-
-def do_enable_pretty_printer (arg, flag):
-    """Internal worker for enabling/disabling pretty-printers."""
-    (object_re, name_re, subname_re) = parse_printer_regexps(arg)
-
-    total = 0
-    if object_re.match("global"):
-        total += do_enable_pretty_printer_1(gdb.pretty_printers,
-                                            name_re, subname_re, flag)
-    cp = gdb.current_progspace()
-    if object_re.match("progspace"):
-        total += do_enable_pretty_printer_1(cp.pretty_printers,
-                                            name_re, subname_re, flag)
-    for objfile in gdb.objfiles():
-        if object_re.match(objfile.filename):
-            total += do_enable_pretty_printer_1(objfile.pretty_printers,
-                                                name_re, subname_re, flag)
-
-    if flag:
-        state = "enabled"
-    else:
-        state = "disabled"
-    print ("%d %s %s" % (total, pluralize("printer", total), state))
-
-    # Print the total list of printers currently enabled/disabled.
-    # This is to further assist the user in determining whether the result
-    # is expected.  Since we use regexps to select it's useful.
-    show_pretty_printer_enabled_summary()
-
-
-# Enable/Disable one or more pretty-printers.
-#
-# This is intended for use when a broken pretty-printer is shipped/installed
-# and the user wants to disable that printer without disabling all the other
-# printers.
-#
-# A useful addition would be -v (verbose) to show each printer affected.
-
-class EnablePrettyPrinter (gdb.Command):
-    """GDB command to enable the specified pretty-printer.
-
-    Usage: enable pretty-printer [object-regexp [name-regexp]]
-
-    OBJECT-REGEXP is a regular expression matching the objects to examine.
-    Objects are "global", the program space's file, and the objfiles within
-    that program space.
-
-    NAME-REGEXP matches the name of the pretty-printer.
-    Individual printers in a collection are named as
-    printer-name;subprinter-name.
-    """
-
-    def __init__(self):
-        super(EnablePrettyPrinter, self).__init__("enable pretty-printer",
-                                                   gdb.COMMAND_DATA)
-
-    def invoke(self, arg, from_tty):
-        """GDB calls this to perform the command."""
-        do_enable_pretty_printer(arg, True)
-
-
-class DisablePrettyPrinter (gdb.Command):
-    """GDB command to disable the specified pretty-printer.
-
-    Usage: disable pretty-printer [object-regexp [name-regexp]]
-
-    OBJECT-REGEXP is a regular expression matching the objects to examine.
-    Objects are "global", the program space's file, and the objfiles within
-    that program space.
-
-    NAME-REGEXP matches the name of the pretty-printer.
-    Individual printers in a collection are named as
-    printer-name;subprinter-name.
-    """
-
-    def __init__(self):
-        super(DisablePrettyPrinter, self).__init__("disable pretty-printer",
-                                                   gdb.COMMAND_DATA)
-
-    def invoke(self, arg, from_tty):
-        """GDB calls this to perform the command."""
-        do_enable_pretty_printer(arg, False)
-
-
-def register_pretty_printer_commands():
-    """Call from a top level script to install the pretty-printer commands."""
-    InfoPrettyPrinter()
-    EnablePrettyPrinter()
-    DisablePrettyPrinter()
-
-register_pretty_printer_commands()
diff --git a/share/gdb/python/gdb/command/prompt.py b/share/gdb/python/gdb/command/prompt.py
deleted file mode 100644
index e7dc3da..0000000
--- a/share/gdb/python/gdb/command/prompt.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# Extended prompt.
-# Copyright (C) 2011-2014 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/>.
-
-"""GDB command for working with extended prompts."""
-
-import gdb
-import gdb.prompt
-
-class _ExtendedPrompt(gdb.Parameter):
-
-    """Set the extended prompt.
-
-Usage: set extended-prompt VALUE
-
-Substitutions are applied to VALUE to compute the real prompt.
-
-The currently defined substitutions are:
-
-"""
-    # Add the prompt library's dynamically generated help to the
-    # __doc__ string.
-    __doc__ = __doc__ + gdb.prompt.prompt_help()
-
-    set_doc = "Set the extended prompt."
-    show_doc = "Show the extended prompt."
-
-    def __init__(self):
-        super(_ExtendedPrompt, self).__init__("extended-prompt",
-                                              gdb.COMMAND_SUPPORT,
-                                              gdb.PARAM_STRING_NOESCAPE)
-        self.value = ''
-        self.hook_set = False
-
-    def get_show_string (self, pvalue):
-        if self.value is not '':
-           return "The extended prompt is: " + self.value
-        else:
-           return "The extended prompt is not set."
-
-    def get_set_string (self):
-        if self.hook_set == False:
-           gdb.prompt_hook = self.before_prompt_hook
-           self.hook_set = True
-        return ""
-
-    def before_prompt_hook(self, current):
-        if self.value is not '':
-            newprompt = gdb.prompt.substitute_prompt(self.value)
-            return newprompt.replace('\\', '\\\\')
-        else:
-            return None
-
-_ExtendedPrompt()
diff --git a/share/gdb/python/gdb/command/type_printers.py b/share/gdb/python/gdb/command/type_printers.py
deleted file mode 100644
index 9376be8..0000000
--- a/share/gdb/python/gdb/command/type_printers.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# Type printer commands.
-# Copyright (C) 2010-2014 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 copy
-import gdb
-
-"""GDB commands for working with type-printers."""
-
-class InfoTypePrinter(gdb.Command):
-    """GDB command to list all registered type-printers.
-
-    Usage: info type-printers
-    """
-
-    def __init__ (self):
-        super(InfoTypePrinter, self).__init__("info type-printers",
-                                              gdb.COMMAND_DATA)
-
-    def list_type_printers(self, type_printers):
-        """Print a list of type printers."""
-        # A potential enhancement is to provide an option to list printers in
-        # "lookup order" (i.e. unsorted).
-        sorted_type_printers = sorted (copy.copy(type_printers),
-                                       key = lambda x: x.name)
-        for printer in sorted_type_printers:
-            if printer.enabled:
-                enabled = ''
-            else:
-                enabled = " [disabled]"
-            print ("  %s%s" % (printer.name, enabled))
-
-    def invoke(self, arg, from_tty):
-        """GDB calls this to perform the command."""
-        sep = ''
-        for objfile in gdb.objfiles():
-            if objfile.type_printers:
-                print ("%sType printers for %s:" % (sep, objfile.name))
-                self.list_type_printers(objfile.type_printers)
-                sep = '\n'
-        if gdb.current_progspace().type_printers:
-            print ("%sType printers for program space:" % sep)
-            self.list_type_printers(gdb.current_progspace().type_printers)
-            sep = '\n'
-        if gdb.type_printers:
-            print ("%sGlobal type printers:" % sep)
-            self.list_type_printers(gdb.type_printers)
-
-class _EnableOrDisableCommand(gdb.Command):
-    def __init__(self, setting, name):
-        super(_EnableOrDisableCommand, self).__init__(name, gdb.COMMAND_DATA)
-        self.setting = setting
-
-    def set_some(self, name, printers):
-        result = False
-        for p in printers:
-            if name == p.name:
-                p.enabled = self.setting
-                result = True
-        return result
-
-    def invoke(self, arg, from_tty):
-        """GDB calls this to perform the command."""
-        for name in arg.split():
-            ok = False
-            for objfile in gdb.objfiles():
-                if self.set_some(name, objfile.type_printers):
-                    ok = True
-            if self.set_some(name, gdb.current_progspace().type_printers):
-                ok = True
-            if self.set_some(name, gdb.type_printers):
-                ok = True
-            if not ok:
-                print ("No type printer named '%s'" % name)
-
-    def add_some(self, result, word, printers):
-        for p in printers:
-            if p.name.startswith(word):
-                result.append(p.name)
-
-    def complete(self, text, word):
-        result = []
-        for objfile in gdb.objfiles():
-            self.add_some(result, word, objfile.type_printers)
-        self.add_some(result, word, gdb.current_progspace().type_printers)
-        self.add_some(result, word, gdb.type_printers)
-        return result
-
-class EnableTypePrinter(_EnableOrDisableCommand):
-    """GDB command to enable the specified type printer.
-
-    Usage: enable type-printer NAME
-
-    NAME is the name of the type-printer.
-    """
-
-    def __init__(self):
-        super(EnableTypePrinter, self).__init__(True, "enable type-printer")
-
-class DisableTypePrinter(_EnableOrDisableCommand):
-    """GDB command to disable the specified type-printer.
-
-    Usage: disable type-printer NAME
-
-    NAME is the name of the type-printer.
-    """
-
-    def __init__(self):
-        super(DisableTypePrinter, self).__init__(False, "disable type-printer")
-
-InfoTypePrinter()
-EnableTypePrinter()
-DisableTypePrinter()
diff --git a/share/gdb/python/gdb/frames.py b/share/gdb/python/gdb/frames.py
deleted file mode 100644
index 19172e7..0000000
--- a/share/gdb/python/gdb/frames.py
+++ /dev/null
@@ -1,228 +0,0 @@
-# Frame-filter commands.
-# Copyright (C) 2013-2014 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/>.
-
-"""Internal functions for working with frame-filters."""
-
-import gdb
-from gdb.FrameIterator import FrameIterator
-from gdb.FrameDecorator import FrameDecorator
-import itertools
-import collections
-
-def get_priority(filter_item):
-    """ Internal worker function to return the frame-filter's priority
-    from a frame filter object.  This is a fail free function as it is
-    used in sorting and filtering.  If a badly implemented frame
-    filter does not implement the priority attribute, return zero
-    (otherwise sorting/filtering will fail and prevent other frame
-    filters from executing).
-
-    Arguments:
-        filter_item: An object conforming to the frame filter
-                     interface.
-
-    Returns:
-        The priority of the frame filter from the "priority"
-        attribute, or zero.
-    """
-    # Do not fail here, as the sort will fail.  If a filter has not
-    # (incorrectly) set a priority, set it to zero.
-    return getattr(filter_item, "priority", 0)
-
-def set_priority(filter_item, priority):
-    """ Internal worker function to set the frame-filter's priority.
-
-    Arguments:
-        filter_item: An object conforming to the frame filter
-                     interface.
-        priority: The priority to assign as an integer.
-    """
-
-    filter_item.priority = priority
-
-def get_enabled(filter_item):
-    """ Internal worker function to return a filter's enabled state
-    from a frame filter object.  This is a fail free function as it is
-    used in sorting and filtering.  If a badly implemented frame
-    filter does not implement the enabled attribute, return False
-    (otherwise sorting/filtering will fail and prevent other frame
-    filters from executing).
-
-    Arguments:
-        filter_item: An object conforming to the frame filter
-                     interface.
-
-    Returns:
-        The enabled state of the frame filter from the "enabled"
-        attribute, or False.
-    """
-
-    # If the filter class is badly implemented when called from the
-    # Python filter command, do not cease filter operations, just set
-    # enabled to False.
-    return getattr(filter_item, "enabled", False)
-
-def set_enabled(filter_item, state):
-    """ Internal Worker function to set the frame-filter's enabled
-    state.
-
-    Arguments:
-        filter_item: An object conforming to the frame filter
-                     interface.
-        state: True or False, depending on desired state.
-    """
-
-    filter_item.enabled = state
-
-def return_list(name):
-    """ Internal Worker function to return the frame filter
-    dictionary, depending on the name supplied as an argument.  If the
-    name is not "all", "global" or "progspace", it is assumed to name
-    an object-file.
-
-    Arguments:
-        name: The name of the list, as specified by GDB user commands.
-
-    Returns:
-        A dictionary object for a single specified dictionary, or a
-        list containing all the items for "all"
-
-    Raises:
-        gdb.GdbError:  A dictionary of that name cannot be found.
-    """
-
-    # If all dictionaries are wanted in the case of "all" we
-    # cannot return a combined dictionary as keys() may clash in
-    # between different dictionaries.  As we just want all the frame
-    # filters to enable/disable them all, just return the combined
-    # items() as a chained iterator of dictionary values.
-    if name == "all":
-        glob = gdb.frame_filters.values()
-        prog = gdb.current_progspace().frame_filters.values()
-        return_iter = itertools.chain(glob, prog)
-        for objfile in gdb.objfiles():
-            return_iter = itertools.chain(return_iter, objfile.frame_filters.values())
-
-        return return_iter
-
-    if name == "global":
-        return gdb.frame_filters
-    else:
-        if name == "progspace":
-            cp = gdb.current_progspace()
-            return cp.frame_filters
-        else:
-            for objfile in gdb.objfiles():
-                if name == objfile.filename:
-                    return objfile.frame_filters
-
-    msg = "Cannot find frame-filter dictionary for '" + name + "'"
-    raise gdb.GdbError(msg)
-
-def _sort_list():
-    """ Internal Worker function to merge all known frame-filter
-    lists, prune any filters with the state set to "disabled", and
-    sort the list on the frame-filter's "priority" attribute.
-
-    Returns:
-        sorted_list: A sorted, pruned list of frame filters to
-                     execute.
-    """
-
-    all_filters = return_list("all")
-    sorted_frame_filters = sorted(all_filters, key = get_priority,
-                                  reverse = True)
-
-    sorted_frame_filters = filter(get_enabled,
-                                  sorted_frame_filters)
-
-    return sorted_frame_filters
-
-def execute_frame_filters(frame, frame_low, frame_high):
-    """ Internal function called from GDB that will execute the chain
-    of frame filters.  Each filter is executed in priority order.
-    After the execution completes, slice the iterator to frame_low -
-    frame_high range.
-
-    Arguments:
-        frame: The initial frame.
-
-        frame_low: The low range of the slice.  If this is a negative
-        integer then it indicates a backward slice (ie bt -4) which
-        counts backward from the last frame in the backtrace.
-
-        frame_high: The high range of the slice.  If this is -1 then
-        it indicates all frames until the end of the stack from
-        frame_low.
-
-    Returns:
-        frame_iterator: The sliced iterator after all frame
-        filters have had a change to execute, or None if no frame
-        filters are registered.
-    """
-
-    # Get a sorted list of frame filters.
-    sorted_list = list(_sort_list())
-
-    # Check to see if there are any frame-filters.  If not, just
-    # return None and let default backtrace printing occur.
-    if len(sorted_list) == 0:
-        return None
-
-    frame_iterator = FrameIterator(frame)
-
-    # Apply a basic frame decorator to all gdb.Frames.  This unifies
-    # the interface.  Python 3.x moved the itertools.imap
-    # functionality to map(), so check if it is available.
-    if hasattr(itertools,"imap"):
-        frame_iterator = itertools.imap(FrameDecorator, frame_iterator)
-    else:
-        frame_iterator = map(FrameDecorator, frame_iterator)
-
-    for ff in sorted_list:
-        frame_iterator = ff.filter(frame_iterator)
-
-    # Slicing
-
-    # Is this a slice from the end of the backtrace, ie bt -2?
-    if frame_low < 0:
-        count = 0
-        slice_length = abs(frame_low)
-        # We cannot use MAXLEN argument for deque as it is 2.6 onwards
-        # and some GDB versions might be < 2.6.
-        sliced = collections.deque()
-
-        for frame_item in frame_iterator:
-            if count >= slice_length:
-                sliced.popleft();
-            count = count + 1
-            sliced.append(frame_item)
-
-        return iter(sliced)
-
-    # -1 for frame_high means until the end of the backtrace.  Set to
-    # None if that is the case, to indicate to itertools.islice to
-    # slice to the end of the iterator.
-    if frame_high == -1:
-        frame_high = None
-    else:
-        # As frames start from 0, add one to frame_high so islice
-        # correctly finds the end
-        frame_high = frame_high + 1;
-
-    sliced = itertools.islice(frame_iterator, frame_low, frame_high)
-
-    return sliced
diff --git a/share/gdb/python/gdb/function/__init__.py b/share/gdb/python/gdb/function/__init__.py
deleted file mode 100644
index bcfadc3..0000000
--- a/share/gdb/python/gdb/function/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (C) 2012-2014 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/>.
diff --git a/share/gdb/python/gdb/function/strfns.py b/share/gdb/python/gdb/function/strfns.py
deleted file mode 100644
index 9e2ed79..0000000
--- a/share/gdb/python/gdb/function/strfns.py
+++ /dev/null
@@ -1,108 +0,0 @@
-# Useful gdb string convenience functions.
-# Copyright (C) 2012-2014 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/>.
-
-"""$_memeq, $_strlen, $_streq, $_regex"""
-
-import gdb
-import re
-
-
-class _MemEq(gdb.Function):
-  """$_memeq - compare bytes of memory
-
-Usage:
-  $_memeq(a, b, len)
-
-Returns:
-  True if len bytes at a and b compare equally.
-"""
-  def __init__(self):
-    super(_MemEq, self).__init__("_memeq")
-
-  def invoke(self, a, b, length):
-    if length < 0:
-      raise ValueError("length must be non-negative")
-    if length == 0:
-      return True
-    # The argument(s) to vector are [low_bound,]high_bound.
-    byte_vector = gdb.lookup_type("char").vector(length - 1)
-    ptr_byte_vector = byte_vector.pointer()
-    a_ptr = a.reinterpret_cast(ptr_byte_vector)
-    b_ptr = b.reinterpret_cast(ptr_byte_vector)
-    return a_ptr.dereference() == b_ptr.dereference()
-
-
-class _StrLen(gdb.Function):
-  """$_strlen - compute string length
-
-Usage:
-  $_strlen(a)
-
-Returns:
-  Length of string a, assumed to be a string in the current language.
-"""
-  def __init__(self):
-    super(_StrLen, self).__init__("_strlen")
-
-  def invoke(self, a):
-    s = a.string()
-    return len(s)
-
-
-class _StrEq(gdb.Function):
-  """$_streq - check string equality
-
-Usage:
-  $_streq(a, b)
-
-Returns:
-  True if a and b are identical strings in the current language.
-
-Example (amd64-linux):
-  catch syscall open
-  cond $bpnum $_streq((char*) $rdi, "foo")
-"""
-  def __init__(self):
-    super(_StrEq, self).__init__("_streq")
-
-  def invoke(self, a, b):
-    return a.string() == b.string()
-
-
-class _RegEx(gdb.Function):
-  """$_regex - check if a string matches a regular expression
-
-Usage:
-  $_regex(string, regex)
-
-Returns:
-  True if string str (in the current language) matches the
-  regular expression regex.
-"""
-  def __init__(self):
-    super(_RegEx, self).__init__("_regex")
-
-  def invoke(self, string, regex):
-    s = string.string()
-    r = re.compile(regex.string())
-    return bool(r.match(s))
-
-
-# GDB will import us automagically via gdb/__init__.py.
-_MemEq()
-_StrLen()
-_StrEq()
-_RegEx()
diff --git a/share/gdb/python/gdb/printing.py b/share/gdb/python/gdb/printing.py
deleted file mode 100644
index 80227c8..0000000
--- a/share/gdb/python/gdb/printing.py
+++ /dev/null
@@ -1,263 +0,0 @@
-# Pretty-printer utilities.
-# Copyright (C) 2010-2014 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/>.
-
-"""Utilities for working with pretty-printers."""
-
-import gdb
-import gdb.types
-import re
-import sys
-
-if sys.version_info[0] > 2:
-    # Python 3 removed basestring and long
-    basestring = str
-    long = int
-
-class PrettyPrinter(object):
-    """A basic pretty-printer.
-
-    Attributes:
-        name: A unique string among all printers for the context in which
-            it is defined (objfile, progspace, or global(gdb)), and should
-            meaningfully describe what can be pretty-printed.
-            E.g., "StringPiece" or "protobufs".
-        subprinters: An iterable object with each element having a `name'
-            attribute, and, potentially, "enabled" attribute.
-            Or this is None if there are no subprinters.
-        enabled: A boolean indicating if the printer is enabled.
-
-    Subprinters are for situations where "one" pretty-printer is actually a
-    collection of several printers.  E.g., The libstdc++ pretty-printer has
-    a pretty-printer for each of several different types, based on regexps.
-    """
-
-    # While one might want to push subprinters into the subclass, it's
-    # present here to formalize such support to simplify
-    # commands/pretty_printers.py.
-
-    def __init__(self, name, subprinters=None):
-        self.name = name
-        self.subprinters = subprinters
-        self.enabled = True
-
-    def __call__(self, val):
-        # The subclass must define this.
-        raise NotImplementedError("PrettyPrinter __call__")
-
-
-class SubPrettyPrinter(object):
-    """Baseclass for sub-pretty-printers.
-
-    Sub-pretty-printers needn't use this, but it formalizes what's needed.
-
-    Attributes:
-        name: The name of the subprinter.
-        enabled: A boolean indicating if the subprinter is enabled.
-    """
-
-    def __init__(self, name):
-        self.name = name
-        self.enabled = True
-
-
-def register_pretty_printer(obj, printer, replace=False):
-    """Register pretty-printer PRINTER with OBJ.
-
-    The printer is added to the front of the search list, thus one can override
-    an existing printer if one needs to.  Use a different name when overriding
-    an existing printer, otherwise an exception will be raised; multiple
-    printers with the same name are disallowed.
-
-    Arguments:
-        obj: Either an objfile, progspace, or None (in which case the printer
-            is registered globally).
-        printer: Either a function of one argument (old way) or any object
-            which has attributes: name, enabled, __call__.
-        replace: If True replace any existing copy of the printer.
-            Otherwise if the printer already exists raise an exception.
-
-    Returns:
-        Nothing.
-
-    Raises:
-        TypeError: A problem with the type of the printer.
-        ValueError: The printer's name contains a semicolon ";".
-        RuntimeError: A printer with the same name is already registered.
-
-    If the caller wants the printer to be listable and disableable, it must
-    follow the PrettyPrinter API.  This applies to the old way (functions) too.
-    If printer is an object, __call__ is a method of two arguments:
-    self, and the value to be pretty-printed.  See PrettyPrinter.
-    """
-
-    # Watch for both __name__ and name.
-    # Functions get the former for free, but we don't want to use an
-    # attribute named __foo__ for pretty-printers-as-objects.
-    # If printer has both, we use `name'.
-    if not hasattr(printer, "__name__") and not hasattr(printer, "name"):
-        raise TypeError("printer missing attribute: name")
-    if hasattr(printer, "name") and not hasattr(printer, "enabled"):
-        raise TypeError("printer missing attribute: enabled") 
-    if not hasattr(printer, "__call__"):
-        raise TypeError("printer missing attribute: __call__")
-
-    if obj is None:
-        if gdb.parameter("verbose"):
-            gdb.write("Registering global %s pretty-printer ...\n" % name)
-        obj = gdb
-    else:
-        if gdb.parameter("verbose"):
-            gdb.write("Registering %s pretty-printer for %s ...\n" %
-                      (printer.name, obj.filename))
-
-    if hasattr(printer, "name"):
-        if not isinstance(printer.name, basestring):
-            raise TypeError("printer name is not a string")
-        # If printer provides a name, make sure it doesn't contain ";".
-        # Semicolon is used by the info/enable/disable pretty-printer commands
-        # to delimit subprinters.
-        if printer.name.find(";") >= 0:
-            raise ValueError("semicolon ';' in printer name")
-        # Also make sure the name is unique.
-        # Alas, we can't do the same for functions and __name__, they could
-        # all have a canonical name like "lookup_function".
-        # PERF: gdb records printers in a list, making this inefficient.
-        i = 0
-        for p in obj.pretty_printers:
-            if hasattr(p, "name") and p.name == printer.name:
-                if replace:
-                    del obj.pretty_printers[i]
-                    break
-                else:
-                  raise RuntimeError("pretty-printer already registered: %s" %
-                                     printer.name)
-            i = i + 1
-
-    obj.pretty_printers.insert(0, printer)
-
-
-class RegexpCollectionPrettyPrinter(PrettyPrinter):
-    """Class for implementing a collection of regular-expression based pretty-printers.
-
-    Intended usage:
-
-    pretty_printer = RegexpCollectionPrettyPrinter("my_library")
-    pretty_printer.add_printer("myclass1", "^myclass1$", MyClass1Printer)
-    ...
-    pretty_printer.add_printer("myclassN", "^myclassN$", MyClassNPrinter)
-    register_pretty_printer(obj, pretty_printer)
-    """
-
-    class RegexpSubprinter(SubPrettyPrinter):
-        def __init__(self, name, regexp, gen_printer):
-            super(RegexpCollectionPrettyPrinter.RegexpSubprinter, self).__init__(name)
-            self.regexp = regexp
-            self.gen_printer = gen_printer
-            self.compiled_re = re.compile(regexp)
-
-    def __init__(self, name):
-        super(RegexpCollectionPrettyPrinter, self).__init__(name, [])
-
-    def add_printer(self, name, regexp, gen_printer):
-        """Add a printer to the list.
-
-        The printer is added to the end of the list.
-
-        Arguments:
-            name: The name of the subprinter.
-            regexp: The regular expression, as a string.
-            gen_printer: A function/method that given a value returns an
-                object to pretty-print it.
-
-        Returns:
-            Nothing.
-        """
-
-        # NOTE: A previous version made the name of each printer the regexp.
-        # That makes it awkward to pass to the enable/disable commands (it's
-        # cumbersome to make a regexp of a regexp).  So now the name is a
-        # separate parameter.
-
-        self.subprinters.append(self.RegexpSubprinter(name, regexp,
-                                                      gen_printer))
-
-    def __call__(self, val):
-        """Lookup the pretty-printer for the provided value."""
-
-        # Get the type name.
-        typename = gdb.types.get_basic_type(val.type).tag
-        if not typename:
-            return None
-
-        # Iterate over table of type regexps to determine
-        # if a printer is registered for that type.
-        # Return an instantiation of the printer if found.
-        for printer in self.subprinters:
-            if printer.enabled and printer.compiled_re.search(typename):
-                return printer.gen_printer(val)
-
-        # Cannot find a pretty printer.  Return None.
-        return None
-
-# A helper class for printing enum types.  This class is instantiated
-# with a list of enumerators to print a particular Value.
-class _EnumInstance:
-    def __init__(self, enumerators, val):
-        self.enumerators = enumerators
-        self.val = val
-
-    def to_string(self):
-        flag_list = []
-        v = long(self.val)
-        any_found = False
-        for (e_name, e_value) in self.enumerators:
-            if v & e_value != 0:
-                flag_list.append(e_name)
-                v = v & ~e_value
-                any_found = True
-        if not any_found or v != 0:
-            # Leftover value.
-            flag_list.append('<unknown: 0x%x>' % v)
-        return "0x%x [%s]" % (self.val, " | ".join(flag_list))
-
-class FlagEnumerationPrinter(PrettyPrinter):
-    """A pretty-printer which can be used to print a flag-style enumeration.
-    A flag-style enumeration is one where the enumerators are or'd
-    together to create values.  The new printer will print these
-    symbolically using '|' notation.  The printer must be registered
-    manually.  This printer is most useful when an enum is flag-like,
-    but has some overlap.  GDB's built-in printing will not handle
-    this case, but this printer will attempt to."""
-
-    def __init__(self, enum_type):
-        super(FlagEnumerationPrinter, self).__init__(enum_type)
-        self.initialized = False
-
-    def __call__(self, val):
-        if not self.initialized:
-            self.initialized = True
-            flags = gdb.lookup_type(self.name)
-            self.enumerators = []
-            for field in flags.fields():
-                self.enumerators.append((field.name, field.enumval))
-            # Sorting the enumerators by value usually does the right
-            # thing.
-            self.enumerators.sort(key = lambda x: x.enumval)
-
-        if self.enabled:
-            return _EnumInstance(self.enumerators, val)
-        else:
-            return None
diff --git a/share/gdb/python/gdb/prompt.py b/share/gdb/python/gdb/prompt.py
deleted file mode 100644
index d99f2ea..0000000
--- a/share/gdb/python/gdb/prompt.py
+++ /dev/null
@@ -1,148 +0,0 @@
-# Extended prompt utilities.
-# Copyright (C) 2011-2014 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/>.
-
-""" Extended prompt library functions."""
-
-import gdb
-import os
-
-def _prompt_pwd(ignore):
-    "The current working directory."
-    return os.getcwdu()
-
-def _prompt_object_attr(func, what, attr, nattr):
-    """Internal worker for fetching GDB attributes."""
-    if attr is None:
-        attr = nattr
-    try:
-        obj = func()
-    except gdb.error:
-        return '<no %s>' % what
-    if hasattr(obj, attr):
-        result = getattr(obj, attr)
-        if callable(result):
-            result = result()
-        return result
-    else:
-        return '<no attribute %s on current %s>' % (attr, what)
-
-def _prompt_frame(attr):
-    "The selected frame; an argument names a frame parameter."
-    return _prompt_object_attr(gdb.selected_frame, 'frame', attr, 'name')
-
-def _prompt_thread(attr):
-    "The selected thread; an argument names a thread parameter."
-    return _prompt_object_attr(gdb.selected_thread, 'thread', attr, 'num')
-
-def _prompt_version(attr):
-    "The version of GDB."
-    return gdb.VERSION
-
-def _prompt_esc(attr):
-    "The ESC character."
-    return '\033'
-
-def _prompt_bs(attr):
-    "A backslash."
-    return '\\'
-
-def _prompt_n(attr):
-    "A newline."
-    return '\n'
-
-def _prompt_r(attr):
-    "A carriage return."
-    return '\r'
-
-def _prompt_param(attr):
-    "A parameter's value; the argument names the parameter."
-    return gdb.parameter(attr)
-
-def _prompt_noprint_begin(attr):
-    "Begins a sequence of non-printing characters."
-    return '\001'
-
-def _prompt_noprint_end(attr):
-     "Ends a sequence of non-printing characters."
-     return '\002'
-
-prompt_substitutions = {
-    'e': _prompt_esc,
-    '\\': _prompt_bs,
-    'n': _prompt_n,
-    'r': _prompt_r,
-    'v': _prompt_version,
-    'w': _prompt_pwd,
-    'f': _prompt_frame,
-    't': _prompt_thread,
-    'p': _prompt_param,
-    '[': _prompt_noprint_begin,
-    ']': _prompt_noprint_end
-}
-
-def prompt_help():
-    """Generate help dynamically from the __doc__ strings of attribute
-    functions."""
-
-    result = ''
-    keys = sorted (prompt_substitutions.keys())
-    for key in keys:
-        result += '  \\%s\t%s\n' % (key, prompt_substitutions[key].__doc__)
-    result += """
-A substitution can be used in a simple form, like "\\f".
-An argument can also be passed to it, like "\\f{name}".
-The meaning of the argument depends on the particular substitution."""
-    return result
-
-def substitute_prompt(prompt):
-    "Perform substitutions on PROMPT."
-
-    result = ''
-    plen = len(prompt)
-    i = 0
-    while i < plen:
-        if prompt[i] == '\\':
-            i = i + 1
-            if i >= plen:
-                break
-            cmdch = prompt[i]
-
-            if cmdch in prompt_substitutions:
-                cmd = prompt_substitutions[cmdch]
-
-                if i + 1 < plen and prompt[i + 1] == '{':
-                    j = i + 1
-                    while j < plen and prompt[j] != '}':
-                        j = j + 1
-                    # Just ignore formatting errors.
-                    if j >= plen or prompt[j] != '}':
-                        arg = None
-                    else:
-                        arg = prompt[i + 2 : j]
-                        i = j
-                else:
-                    arg = None
-                result += str(cmd(arg))
-            else:
-                # Unrecognized escapes are turned into the escaped
-                # character itself.
-                result += prompt[i]
-        else:
-            result += prompt[i]
-
-        i = i + 1
-
-    return result
diff --git a/share/gdb/python/gdb/types.py b/share/gdb/python/gdb/types.py
deleted file mode 100644
index 5fa4eab..0000000
--- a/share/gdb/python/gdb/types.py
+++ /dev/null
@@ -1,176 +0,0 @@
-# Type utilities.
-# Copyright (C) 2010-2014 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/>.
-
-"""Utilities for working with gdb.Types."""
-
-import gdb
-
-
-def get_basic_type(type_):
-    """Return the "basic" type of a type.
-
-    Arguments:
-        type_: The type to reduce to its basic type.
-
-    Returns:
-        type_ with const/volatile is stripped away,
-        and typedefs/references converted to the underlying type.
-    """
-
-    while (type_.code == gdb.TYPE_CODE_REF or
-           type_.code == gdb.TYPE_CODE_TYPEDEF):
-        if type_.code == gdb.TYPE_CODE_REF:
-            type_ = type_.target()
-        else:
-            type_ = type_.strip_typedefs()
-    return type_.unqualified()
-
-
-def has_field(type_, field):
-    """Return True if a type has the specified field.
-
-    Arguments:
-        type_: The type to examine.
-            It must be one of gdb.TYPE_CODE_STRUCT, gdb.TYPE_CODE_UNION.
-        field: The name of the field to look up.
-
-    Returns:
-        True if the field is present either in type_ or any baseclass.
-
-    Raises:
-        TypeError: The type is not a struct or union.
-    """
-
-    type_ = get_basic_type(type_)
-    if (type_.code != gdb.TYPE_CODE_STRUCT and
-        type_.code != gdb.TYPE_CODE_UNION):
-        raise TypeError("not a struct or union")
-    for f in type_.fields():
-        if f.is_base_class:
-            if has_field(f.type, field):
-                return True
-        else:
-            # NOTE: f.name could be None
-            if f.name == field:
-                return True
-    return False
-
-
-def make_enum_dict(enum_type):
-    """Return a dictionary from a program's enum type.
-
-    Arguments:
-        enum_type: The enum to compute the dictionary for.
-
-    Returns:
-        The dictionary of the enum.
-
-    Raises:
-        TypeError: The type is not an enum.
-    """
-
-    if enum_type.code != gdb.TYPE_CODE_ENUM:
-        raise TypeError("not an enum type")
-    enum_dict = {}
-    for field in enum_type.fields():
-        # The enum's value is stored in "enumval".
-        enum_dict[field.name] = field.enumval
-    return enum_dict
-
-
-def deep_items (type_):
-    """Return an iterator that recursively traverses anonymous fields.
-
-    Arguments:
-        type_: The type to traverse.  It should be one of
-        gdb.TYPE_CODE_STRUCT or gdb.TYPE_CODE_UNION.
-
-    Returns:
-        an iterator similar to gdb.Type.iteritems(), i.e., it returns
-        pairs of key, value, but for any anonymous struct or union
-        field that field is traversed recursively, depth-first.
-    """
-    for k, v in type_.iteritems ():
-        if k:
-            yield k, v
-        else:
-            for i in deep_items (v.type):
-                yield i
-
-class TypePrinter(object):
-    """The base class for type printers.
-
-    Instances of this type can be used to substitute type names during
-    'ptype'.
-
-    A type printer must have at least 'name' and 'enabled' attributes,
-    and supply an 'instantiate' method.
-
-    The 'instantiate' method must either return None, or return an
-    object which has a 'recognize' method.  This method must accept a
-    gdb.Type argument and either return None, meaning that the type
-    was not recognized, or a string naming the type.
-    """
-
-    def __init__(self, name):
-        self.name = name
-        self.enabled = True
-
-    def instantiate(self):
-        return None
-
-# Helper function for computing the list of type recognizers.
-def _get_some_type_recognizers(result, plist):
-    for printer in plist:
-        if printer.enabled:
-            inst = printer.instantiate()
-            if inst is not None:
-                result.append(inst)
-    return None
-
-def get_type_recognizers():
-    "Return a list of the enabled type recognizers for the current context."
-    result = []
-
-    # First try the objfiles.
-    for objfile in gdb.objfiles():
-        _get_some_type_recognizers(result, objfile.type_printers)
-    # Now try the program space.
-    _get_some_type_recognizers(result, gdb.current_progspace().type_printers)
-    # Finally, globals.
-    _get_some_type_recognizers(result, gdb.type_printers)
-
-    return result
-
-def apply_type_recognizers(recognizers, type_obj):
-    """Apply the given list of type recognizers to the type TYPE_OBJ.
-    If any recognizer in the list recognizes TYPE_OBJ, returns the name
-    given by the recognizer.  Otherwise, this returns None."""
-    for r in recognizers:
-        result = r.recognize(type_obj)
-        if result is not None:
-            return result
-    return None
-
-def register_type_printer(locus, printer):
-    """Register a type printer.
-    PRINTER is the type printer instance.
-    LOCUS is either an objfile, a program space, or None, indicating
-    global registration."""
-
-    if locus is None:
-        locus = gdb
-    locus.type_printers.insert(0, printer)
diff --git a/share/gdb/syscalls/amd64-linux.xml b/share/gdb/syscalls/amd64-linux.xml
deleted file mode 100644
index 6a04218..0000000
--- a/share/gdb/syscalls/amd64-linux.xml
+++ /dev/null
@@ -1,314 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2009-2014 Free Software Foundation, Inc.
-
-     Copying and distribution of this file, with or without modification,
-     are permitted in any medium without royalty provided the copyright
-     notice and this notice are preserved.  -->
-
-<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
-
-<!-- This file was generated using the following file:
-     
-     /usr/src/linux/arch/x86/include/asm/unistd_64.h
-
-     The file mentioned above belongs to the Linux Kernel.  -->
-
-<syscalls_info>
-  <syscall name="read" number="0"/>
-  <syscall name="write" number="1"/>
-  <syscall name="open" number="2"/>
-  <syscall name="close" number="3"/>
-  <syscall name="stat" number="4"/>
-  <syscall name="fstat" number="5"/>
-  <syscall name="lstat" number="6"/>
-  <syscall name="poll" number="7"/>
-  <syscall name="lseek" number="8"/>
-  <syscall name="mmap" number="9"/>
-  <syscall name="mprotect" number="10"/>
-  <syscall name="munmap" number="11"/>
-  <syscall name="brk" number="12"/>
-  <syscall name="rt_sigaction" number="13"/>
-  <syscall name="rt_sigprocmask" number="14"/>
-  <syscall name="rt_sigreturn" number="15"/>
-  <syscall name="ioctl" number="16"/>
-  <syscall name="pread64" number="17"/>
-  <syscall name="pwrite64" number="18"/>
-  <syscall name="readv" number="19"/>
-  <syscall name="writev" number="20"/>
-  <syscall name="access" number="21"/>
-  <syscall name="pipe" number="22"/>
-  <syscall name="select" number="23"/>
-  <syscall name="sched_yield" number="24"/>
-  <syscall name="mremap" number="25"/>
-  <syscall name="msync" number="26"/>
-  <syscall name="mincore" number="27"/>
-  <syscall name="madvise" number="28"/>
-  <syscall name="shmget" number="29"/>
-  <syscall name="shmat" number="30"/>
-  <syscall name="shmctl" number="31"/>
-  <syscall name="dup" number="32"/>
-  <syscall name="dup2" number="33"/>
-  <syscall name="pause" number="34"/>
-  <syscall name="nanosleep" number="35"/>
-  <syscall name="getitimer" number="36"/>
-  <syscall name="alarm" number="37"/>
-  <syscall name="setitimer" number="38"/>
-  <syscall name="getpid" number="39"/>
-  <syscall name="sendfile" number="40"/>
-  <syscall name="socket" number="41"/>
-  <syscall name="connect" number="42"/>
-  <syscall name="accept" number="43"/>
-  <syscall name="sendto" number="44"/>
-  <syscall name="recvfrom" number="45"/>
-  <syscall name="sendmsg" number="46"/>
-  <syscall name="recvmsg" number="47"/>
-  <syscall name="shutdown" number="48"/>
-  <syscall name="bind" number="49"/>
-  <syscall name="listen" number="50"/>
-  <syscall name="getsockname" number="51"/>
-  <syscall name="getpeername" number="52"/>
-  <syscall name="socketpair" number="53"/>
-  <syscall name="setsockopt" number="54"/>
-  <syscall name="getsockopt" number="55"/>
-  <syscall name="clone" number="56"/>
-  <syscall name="fork" number="57"/>
-  <syscall name="vfork" number="58"/>
-  <syscall name="execve" number="59"/>
-  <syscall name="exit" number="60"/>
-  <syscall name="wait4" number="61"/>
-  <syscall name="kill" number="62"/>
-  <syscall name="uname" number="63"/>
-  <syscall name="semget" number="64"/>
-  <syscall name="semop" number="65"/>
-  <syscall name="semctl" number="66"/>
-  <syscall name="shmdt" number="67"/>
-  <syscall name="msgget" number="68"/>
-  <syscall name="msgsnd" number="69"/>
-  <syscall name="msgrcv" number="70"/>
-  <syscall name="msgctl" number="71"/>
-  <syscall name="fcntl" number="72"/>
-  <syscall name="flock" number="73"/>
-  <syscall name="fsync" number="74"/>
-  <syscall name="fdatasync" number="75"/>
-  <syscall name="truncate" number="76"/>
-  <syscall name="ftruncate" number="77"/>
-  <syscall name="getdents" number="78"/>
-  <syscall name="getcwd" number="79"/>
-  <syscall name="chdir" number="80"/>
-  <syscall name="fchdir" number="81"/>
-  <syscall name="rename" number="82"/>
-  <syscall name="mkdir" number="83"/>
-  <syscall name="rmdir" number="84"/>
-  <syscall name="creat" number="85"/>
-  <syscall name="link" number="86"/>
-  <syscall name="unlink" number="87"/>
-  <syscall name="symlink" number="88"/>
-  <syscall name="readlink" number="89"/>
-  <syscall name="chmod" number="90"/>
-  <syscall name="fchmod" number="91"/>
-  <syscall name="chown" number="92"/>
-  <syscall name="fchown" number="93"/>
-  <syscall name="lchown" number="94"/>
-  <syscall name="umask" number="95"/>
-  <syscall name="gettimeofday" number="96"/>
-  <syscall name="getrlimit" number="97"/>
-  <syscall name="getrusage" number="98"/>
-  <syscall name="sysinfo" number="99"/>
-  <syscall name="times" number="100"/>
-  <syscall name="ptrace" number="101"/>
-  <syscall name="getuid" number="102"/>
-  <syscall name="syslog" number="103"/>
-  <syscall name="getgid" number="104"/>
-  <syscall name="setuid" number="105"/>
-  <syscall name="setgid" number="106"/>
-  <syscall name="geteuid" number="107"/>
-  <syscall name="getegid" number="108"/>
-  <syscall name="setpgid" number="109"/>
-  <syscall name="getppid" number="110"/>
-  <syscall name="getpgrp" number="111"/>
-  <syscall name="setsid" number="112"/>
-  <syscall name="setreuid" number="113"/>
-  <syscall name="setregid" number="114"/>
-  <syscall name="getgroups" number="115"/>
-  <syscall name="setgroups" number="116"/>
-  <syscall name="setresuid" number="117"/>
-  <syscall name="getresuid" number="118"/>
-  <syscall name="setresgid" number="119"/>
-  <syscall name="getresgid" number="120"/>
-  <syscall name="getpgid" number="121"/>
-  <syscall name="setfsuid" number="122"/>
-  <syscall name="setfsgid" number="123"/>
-  <syscall name="getsid" number="124"/>
-  <syscall name="capget" number="125"/>
-  <syscall name="capset" number="126"/>
-  <syscall name="rt_sigpending" number="127"/>
-  <syscall name="rt_sigtimedwait" number="128"/>
-  <syscall name="rt_sigqueueinfo" number="129"/>
-  <syscall name="rt_sigsuspend" number="130"/>
-  <syscall name="sigaltstack" number="131"/>
-  <syscall name="utime" number="132"/>
-  <syscall name="mknod" number="133"/>
-  <syscall name="uselib" number="134"/>
-  <syscall name="personality" number="135"/>
-  <syscall name="ustat" number="136"/>
-  <syscall name="statfs" number="137"/>
-  <syscall name="fstatfs" number="138"/>
-  <syscall name="sysfs" number="139"/>
-  <syscall name="getpriority" number="140"/>
-  <syscall name="setpriority" number="141"/>
-  <syscall name="sched_setparam" number="142"/>
-  <syscall name="sched_getparam" number="143"/>
-  <syscall name="sched_setscheduler" number="144"/>
-  <syscall name="sched_getscheduler" number="145"/>
-  <syscall name="sched_get_priority_max" number="146"/>
-  <syscall name="sched_get_priority_min" number="147"/>
-  <syscall name="sched_rr_get_interval" number="148"/>
-  <syscall name="mlock" number="149"/>
-  <syscall name="munlock" number="150"/>
-  <syscall name="mlockall" number="151"/>
-  <syscall name="munlockall" number="152"/>
-  <syscall name="vhangup" number="153"/>
-  <syscall name="modify_ldt" number="154"/>
-  <syscall name="pivot_root" number="155"/>
-  <syscall name="_sysctl" number="156"/>
-  <syscall name="prctl" number="157"/>
-  <syscall name="arch_prctl" number="158"/>
-  <syscall name="adjtimex" number="159"/>
-  <syscall name="setrlimit" number="160"/>
-  <syscall name="chroot" number="161"/>
-  <syscall name="sync" number="162"/>
-  <syscall name="acct" number="163"/>
-  <syscall name="settimeofday" number="164"/>
-  <syscall name="mount" number="165"/>
-  <syscall name="umount2" number="166"/>
-  <syscall name="swapon" number="167"/>
-  <syscall name="swapoff" number="168"/>
-  <syscall name="reboot" number="169"/>
-  <syscall name="sethostname" number="170"/>
-  <syscall name="setdomainname" number="171"/>
-  <syscall name="iopl" number="172"/>
-  <syscall name="ioperm" number="173"/>
-  <syscall name="create_module" number="174"/>
-  <syscall name="init_module" number="175"/>
-  <syscall name="delete_module" number="176"/>
-  <syscall name="get_kernel_syms" number="177"/>
-  <syscall name="query_module" number="178"/>
-  <syscall name="quotactl" number="179"/>
-  <syscall name="nfsservctl" number="180"/>
-  <syscall name="getpmsg" number="181"/>
-  <syscall name="putpmsg" number="182"/>
-  <syscall name="afs_syscall" number="183"/>
-  <syscall name="tuxcall" number="184"/>
-  <syscall name="security" number="185"/>
-  <syscall name="gettid" number="186"/>
-  <syscall name="readahead" number="187"/>
-  <syscall name="setxattr" number="188"/>
-  <syscall name="lsetxattr" number="189"/>
-  <syscall name="fsetxattr" number="190"/>
-  <syscall name="getxattr" number="191"/>
-  <syscall name="lgetxattr" number="192"/>
-  <syscall name="fgetxattr" number="193"/>
-  <syscall name="listxattr" number="194"/>
-  <syscall name="llistxattr" number="195"/>
-  <syscall name="flistxattr" number="196"/>
-  <syscall name="removexattr" number="197"/>
-  <syscall name="lremovexattr" number="198"/>
-  <syscall name="fremovexattr" number="199"/>
-  <syscall name="tkill" number="200"/>
-  <syscall name="time" number="201"/>
-  <syscall name="futex" number="202"/>
-  <syscall name="sched_setaffinity" number="203"/>
-  <syscall name="sched_getaffinity" number="204"/>
-  <syscall name="set_thread_area" number="205"/>
-  <syscall name="io_setup" number="206"/>
-  <syscall name="io_destroy" number="207"/>
-  <syscall name="io_getevents" number="208"/>
-  <syscall name="io_submit" number="209"/>
-  <syscall name="io_cancel" number="210"/>
-  <syscall name="get_thread_area" number="211"/>
-  <syscall name="lookup_dcookie" number="212"/>
-  <syscall name="epoll_create" number="213"/>
-  <syscall name="epoll_ctl_old" number="214"/>
-  <syscall name="epoll_wait_old" number="215"/>
-  <syscall name="remap_file_pages" number="216"/>
-  <syscall name="getdents64" number="217"/>
-  <syscall name="set_tid_address" number="218"/>
-  <syscall name="restart_syscall" number="219"/>
-  <syscall name="semtimedop" number="220"/>
-  <syscall name="fadvise64" number="221"/>
-  <syscall name="timer_create" number="222"/>
-  <syscall name="timer_settime" number="223"/>
-  <syscall name="timer_gettime" number="224"/>
-  <syscall name="timer_getoverrun" number="225"/>
-  <syscall name="timer_delete" number="226"/>
-  <syscall name="clock_settime" number="227"/>
-  <syscall name="clock_gettime" number="228"/>
-  <syscall name="clock_getres" number="229"/>
-  <syscall name="clock_nanosleep" number="230"/>
-  <syscall name="exit_group" number="231"/>
-  <syscall name="epoll_wait" number="232"/>
-  <syscall name="epoll_ctl" number="233"/>
-  <syscall name="tgkill" number="234"/>
-  <syscall name="utimes" number="235"/>
-  <syscall name="vserver" number="236"/>
-  <syscall name="mbind" number="237"/>
-  <syscall name="set_mempolicy" number="238"/>
-  <syscall name="get_mempolicy" number="239"/>
-  <syscall name="mq_open" number="240"/>
-  <syscall name="mq_unlink" number="241"/>
-  <syscall name="mq_timedsend" number="242"/>
-  <syscall name="mq_timedreceive" number="243"/>
-  <syscall name="mq_notify" number="244"/>
-  <syscall name="mq_getsetattr" number="245"/>
-  <syscall name="kexec_load" number="246"/>
-  <syscall name="waitid" number="247"/>
-  <syscall name="add_key" number="248"/>
-  <syscall name="request_key" number="249"/>
-  <syscall name="keyctl" number="250"/>
-  <syscall name="ioprio_set" number="251"/>
-  <syscall name="ioprio_get" number="252"/>
-  <syscall name="inotify_init" number="253"/>
-  <syscall name="inotify_add_watch" number="254"/>
-  <syscall name="inotify_rm_watch" number="255"/>
-  <syscall name="migrate_pages" number="256"/>
-  <syscall name="openat" number="257"/>
-  <syscall name="mkdirat" number="258"/>
-  <syscall name="mknodat" number="259"/>
-  <syscall name="fchownat" number="260"/>
-  <syscall name="futimesat" number="261"/>
-  <syscall name="newfstatat" number="262"/>
-  <syscall name="unlinkat" number="263"/>
-  <syscall name="renameat" number="264"/>
-  <syscall name="linkat" number="265"/>
-  <syscall name="symlinkat" number="266"/>
-  <syscall name="readlinkat" number="267"/>
-  <syscall name="fchmodat" number="268"/>
-  <syscall name="faccessat" number="269"/>
-  <syscall name="pselect6" number="270"/>
-  <syscall name="ppoll" number="271"/>
-  <syscall name="unshare" number="272"/>
-  <syscall name="set_robust_list" number="273"/>
-  <syscall name="get_robust_list" number="274"/>
-  <syscall name="splice" number="275"/>
-  <syscall name="tee" number="276"/>
-  <syscall name="sync_file_range" number="277"/>
-  <syscall name="vmsplice" number="278"/>
-  <syscall name="move_pages" number="279"/>
-  <syscall name="utimensat" number="280"/>
-  <syscall name="epoll_pwait" number="281"/>
-  <syscall name="signalfd" number="282"/>
-  <syscall name="timerfd_create" number="283"/>
-  <syscall name="eventfd" number="284"/>
-  <syscall name="fallocate" number="285"/>
-  <syscall name="timerfd_settime" number="286"/>
-  <syscall name="timerfd_gettime" number="287"/>
-  <syscall name="accept4" number="288"/>
-  <syscall name="signalfd4" number="289"/>
-  <syscall name="eventfd2" number="290"/>
-  <syscall name="epoll_create1" number="291"/>
-  <syscall name="dup3" number="292"/>
-  <syscall name="pipe2" number="293"/>
-  <syscall name="inotify_init1" number="294"/>
-  <syscall name="preadv" number="295"/>
-  <syscall name="pwritev" number="296"/>
-</syscalls_info>
diff --git a/share/gdb/syscalls/arm-linux.xml b/share/gdb/syscalls/arm-linux.xml
deleted file mode 100644
index 9d989bd..0000000
--- a/share/gdb/syscalls/arm-linux.xml
+++ /dev/null
@@ -1,398 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2009-2014 Free Software Foundation, Inc.
-
-     Copying and distribution of this file, with or without modification,
-     are permitted in any medium without royalty provided the copyright
-     notice and this notice are preserved.  This file is offered as-is,
-     without any warranty. -->
-
-<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
-
-<!-- This file was generated using the following file:
-
-     linux/arch/arm/include/uapi/asm/unistd.h
-
-     The file mentioned above belongs to the Linux Kernel.
-     Some small hand-edits were made. -->
-
-<syscalls_info>
-  <syscall name="restart_syscall" number="0"/>
-  <syscall name="exit" number="1"/>
-  <syscall name="fork" number="2"/>
-  <syscall name="read" number="3"/>
-  <syscall name="write" number="4"/>
-  <syscall name="open" number="5"/>
-  <syscall name="close" number="6"/>
-  <syscall name="waitpid" number="7"/> <!-- removed -->
-  <syscall name="creat" number="8"/>
-  <syscall name="link" number="9"/>
-  <syscall name="unlink" number="10"/>
-  <syscall name="execve" number="11"/>
-  <syscall name="chdir" number="12"/>
-  <syscall name="time" number="13"/>
-  <syscall name="mknod" number="14"/>
-  <syscall name="chmod" number="15"/>
-  <syscall name="lchown" number="16"/>
-  <syscall name="break" number="17"/> <!-- removed -->
-  <syscall name="oldstat" number="18"/> <!-- removed -->
-  <syscall name="lseek" number="19"/>
-  <syscall name="getpid" number="20"/>
-  <syscall name="mount" number="21"/>
-  <syscall name="umount" number="22"/>
-  <syscall name="setuid" number="23"/>
-  <syscall name="getuid" number="24"/>
-  <syscall name="stime" number="25"/>
-  <syscall name="ptrace" number="26"/>
-  <syscall name="alarm" number="27"/>
-  <syscall name="oldfstat" number="28"/> <!-- removed -->
-  <syscall name="pause" number="29"/>
-  <syscall name="utime" number="30"/>
-  <syscall name="stty" number="31"/> <!-- removed -->
-  <syscall name="gtty" number="32"/> <!-- removed -->
-  <syscall name="access" number="33"/>
-  <syscall name="nice" number="34"/>
-  <syscall name="ftime" number="35"/> <!-- removed -->
-  <syscall name="sync" number="36"/>
-  <syscall name="kill" number="37"/>
-  <syscall name="rename" number="38"/>
-  <syscall name="mkdir" number="39"/>
-  <syscall name="rmdir" number="40"/>
-  <syscall name="dup" number="41"/>
-  <syscall name="pipe" number="42"/>
-  <syscall name="times" number="43"/>
-  <syscall name="prof" number="44"/> <!-- removed -->
-  <syscall name="brk" number="45"/>
-  <syscall name="setgid" number="46"/>
-  <syscall name="getgid" number="47"/>
-  <syscall name="signal" number="48"/> <!-- removed -->
-  <syscall name="geteuid" number="49"/>
-  <syscall name="getegid" number="50"/>
-  <syscall name="acct" number="51"/>
-  <syscall name="umount2" number="52"/>
-  <syscall name="lock" number="53"/> <!-- removed -->
-  <syscall name="ioctl" number="54"/>
-  <syscall name="fcntl" number="55"/>
-  <syscall name="mpx" number="56"/> <!-- removed -->
-  <syscall name="setpgid" number="57"/>
-  <syscall name="ulimit" number="58"/> <!-- removed -->
-  <syscall name="oldolduname" number="59"/> <!-- removed -->
-  <syscall name="umask" number="60"/>
-  <syscall name="chroot" number="61"/>
-  <syscall name="ustat" number="62"/>
-  <syscall name="dup2" number="63"/>
-  <syscall name="getppid" number="64"/>
-  <syscall name="getpgrp" number="65"/>
-  <syscall name="setsid" number="66"/>
-  <syscall name="sigaction" number="67"/>
-  <syscall name="sgetmask" number="68"/> <!-- removed -->
-  <syscall name="ssetmask" number="69"/> <!-- removed -->
-  <syscall name="setreuid" number="70"/>
-  <syscall name="setregid" number="71"/>
-  <syscall name="sigsuspend" number="72"/>
-  <syscall name="sigpending" number="73"/>
-  <syscall name="sethostname" number="74"/>
-  <syscall name="setrlimit" number="75"/>
-  <syscall name="getrlimit" number="76"/>
-  <syscall name="getrusage" number="77"/>
-  <syscall name="gettimeofday" number="78"/>
-  <syscall name="settimeofday" number="79"/>
-  <syscall name="getgroups" number="80"/>
-  <syscall name="setgroups" number="81"/>
-  <syscall name="select" number="82"/>
-  <syscall name="symlink" number="83"/>
-  <syscall name="oldlstat" number="84"/> <!-- removed -->
-  <syscall name="readlink" number="85"/>
-  <syscall name="uselib" number="86"/>
-  <syscall name="swapon" number="87"/>
-  <syscall name="reboot" number="88"/>
-  <syscall name="readdir" number="89"/>
-  <syscall name="mmap" number="90"/>
-  <syscall name="munmap" number="91"/>
-  <syscall name="truncate" number="92"/>
-  <syscall name="ftruncate" number="93"/>
-  <syscall name="fchmod" number="94"/>
-  <syscall name="fchown" number="95"/>
-  <syscall name="getpriority" number="96"/>
-  <syscall name="setpriority" number="97"/>
-  <syscall name="profil" number="98"/> <!-- removed -->
-  <syscall name="statfs" number="99"/>
-  <syscall name="fstatfs" number="100"/>
-  <syscall name="ioperm" number="101"/> <!-- removed -->
-  <syscall name="socketcall" number="102"/>
-  <syscall name="syslog" number="103"/>
-  <syscall name="setitimer" number="104"/>
-  <syscall name="getitimer" number="105"/>
-  <syscall name="stat" number="106"/>
-  <syscall name="lstat" number="107"/>
-  <syscall name="fstat" number="108"/>
-  <syscall name="olduname" number="109"/> <!-- removed -->
-  <syscall name="iopl" number="110"/> <!-- removed -->
-  <syscall name="vhangup" number="111"/>
-  <syscall name="idle" number="112"/> <!-- removed -->
-  <syscall name="syscall" number="113"/>
-  <syscall name="wait4" number="114"/>
-  <syscall name="swapoff" number="115"/>
-  <syscall name="sysinfo" number="116"/>
-  <syscall name="ipc" number="117"/>
-  <syscall name="fsync" number="118"/>
-  <syscall name="sigreturn" number="119"/>
-  <syscall name="clone" number="120"/>
-  <syscall name="setdomainname" number="121"/>
-  <syscall name="uname" number="122"/>
-  <syscall name="modify_ldt" number="123"/> <!-- removed -->
-  <syscall name="adjtimex" number="124"/>
-  <syscall name="mprotect" number="125"/>
-  <syscall name="sigprocmask" number="126"/>
-  <syscall name="create_module" number="127"/> <!-- removed -->
-  <syscall name="init_module" number="128"/>
-  <syscall name="delete_module" number="129"/>
-  <syscall name="get_kernel_syms" number="130"/> <!-- removed -->
-  <syscall name="quotactl" number="131"/>
-  <syscall name="getpgid" number="132"/>
-  <syscall name="fchdir" number="133"/>
-  <syscall name="bdflush" number="134"/>
-  <syscall name="sysfs" number="135"/>
-  <syscall name="personality" number="136"/>
-  <syscall name="afs_syscall" number="137"/> <!-- removed -->
-  <syscall name="setfsuid" number="138"/>
-  <syscall name="setfsgid" number="139"/>
-  <syscall name="_llseek" number="140"/>
-  <syscall name="getdents" number="141"/>
-  <syscall name="_newselect" number="142"/>
-  <syscall name="flock" number="143"/>
-  <syscall name="msync" number="144"/>
-  <syscall name="readv" number="145"/>
-  <syscall name="writev" number="146"/>
-  <syscall name="getsid" number="147"/>
-  <syscall name="fdatasync" number="148"/>
-  <syscall name="_sysctl" number="149"/>
-  <syscall name="mlock" number="150"/>
-  <syscall name="munlock" number="151"/>
-  <syscall name="mlockall" number="152"/>
-  <syscall name="munlockall" number="153"/>
-  <syscall name="sched_setparam" number="154"/>
-  <syscall name="sched_getparam" number="155"/>
-  <syscall name="sched_setscheduler" number="156"/>
-  <syscall name="sched_getscheduler" number="157"/>
-  <syscall name="sched_yield" number="158"/>
-  <syscall name="sched_get_priority_max" number="159"/>
-  <syscall name="sched_get_priority_min" number="160"/>
-  <syscall name="sched_rr_get_interval" number="161"/>
-  <syscall name="nanosleep" number="162"/>
-  <syscall name="mremap" number="163"/>
-  <syscall name="setresuid" number="164"/>
-  <syscall name="getresuid" number="165"/>
-  <syscall name="vm86" number="166"/> <!-- removed -->
-  <syscall name="query_module" number="167"/> <!-- removed -->
-  <syscall name="poll" number="168"/>
-  <syscall name="nfsservctl" number="169"/>
-  <syscall name="setresgid" number="170"/>
-  <syscall name="getresgid" number="171"/>
-  <syscall name="prctl" number="172"/>
-  <syscall name="rt_sigreturn" number="173"/>
-  <syscall name="rt_sigaction" number="174"/>
-  <syscall name="rt_sigprocmask" number="175"/>
-  <syscall name="rt_sigpending" number="176"/>
-  <syscall name="rt_sigtimedwait" number="177"/>
-  <syscall name="rt_sigqueueinfo" number="178"/>
-  <syscall name="rt_sigsuspend" number="179"/>
-  <syscall name="pread64" number="180"/>
-  <syscall name="pwrite64" number="181"/>
-  <syscall name="chown" number="182"/>
-  <syscall name="getcwd" number="183"/>
-  <syscall name="capget" number="184"/>
-  <syscall name="capset" number="185"/>
-  <syscall name="sigaltstack" number="186"/>
-  <syscall name="sendfile" number="187"/>
-  <syscall name="vfork" number="190"/>
-  <syscall name="ugetrlimit" number="191"/>
-  <syscall name="mmap2" number="192"/>
-  <syscall name="truncate64" number="193"/>
-  <syscall name="ftruncate64" number="194"/>
-  <syscall name="stat64" number="195"/>
-  <syscall name="lstat64" number="196"/>
-  <syscall name="fstat64" number="197"/>
-  <syscall name="lchown32" number="198"/>
-  <syscall name="getuid32" number="199"/>
-  <syscall name="getgid32" number="200"/>
-  <syscall name="geteuid32" number="201"/>
-  <syscall name="getegid32" number="202"/>
-  <syscall name="setreuid32" number="203"/>
-  <syscall name="setregid32" number="204"/>
-  <syscall name="getgroups32" number="205"/>
-  <syscall name="setgroups32" number="206"/>
-  <syscall name="fchown32" number="207"/>
-  <syscall name="setresuid32" number="208"/>
-  <syscall name="getresuid32" number="209"/>
-  <syscall name="setresgid32" number="210"/>
-  <syscall name="getresgid32" number="211"/>
-  <syscall name="chown32" number="212"/>
-  <syscall name="setuid32" number="213"/>
-  <syscall name="setgid32" number="214"/>
-  <syscall name="setfsuid32" number="215"/>
-  <syscall name="setfsgid32" number="216"/>
-  <syscall name="getdents64" number="217"/>
-  <syscall name="pivot_root" number="218"/>
-  <syscall name="mincore" number="219"/>
-  <syscall name="madvise" number="220"/>
-  <syscall name="fcntl64" number="221"/>
-  <syscall name="gettid" number="224"/>
-  <syscall name="readahead" number="225"/>
-  <syscall name="setxattr" number="226"/>
-  <syscall name="lsetxattr" number="227"/>
-  <syscall name="fsetxattr" number="228"/>
-  <syscall name="getxattr" number="229"/>
-  <syscall name="lgetxattr" number="230"/>
-  <syscall name="fgetxattr" number="231"/>
-  <syscall name="listxattr" number="232"/>
-  <syscall name="llistxattr" number="233"/>
-  <syscall name="flistxattr" number="234"/>
-  <syscall name="removexattr" number="235"/>
-  <syscall name="lremovexattr" number="236"/>
-  <syscall name="fremovexattr" number="237"/>
-  <syscall name="tkill" number="238"/>
-  <syscall name="sendfile64" number="239"/>
-  <syscall name="futex" number="240"/>
-  <syscall name="sched_setaffinity" number="241"/>
-  <syscall name="sched_getaffinity" number="242"/>
-  <syscall name="io_setup" number="243"/>
-  <syscall name="io_destroy" number="244"/>
-  <syscall name="io_getevents" number="245"/>
-  <syscall name="io_submit" number="246"/>
-  <syscall name="io_cancel" number="247"/>
-  <syscall name="exit_group" number="248"/>
-  <syscall name="lookup_dcookie" number="249"/>
-  <syscall name="epoll_create" number="250"/>
-  <syscall name="epoll_ctl" number="251"/>
-  <syscall name="epoll_wait" number="252"/>
-  <syscall name="remap_file_pages" number="253"/>
-  <syscall name="set_tid_address" number="256"/>
-  <syscall name="timer_create" number="257"/>
-  <syscall name="timer_settime" number="258"/>
-  <syscall name="timer_gettime" number="259"/>
-  <syscall name="timer_getoverrun" number="260"/>
-  <syscall name="timer_delete" number="261"/>
-  <syscall name="clock_settime" number="262"/>
-  <syscall name="clock_gettime" number="263"/>
-  <syscall name="clock_getres" number="264"/>
-  <syscall name="clock_nanosleep" number="265"/>
-  <syscall name="statfs64" number="266"/>
-  <syscall name="fstatfs64" number="267"/>
-  <syscall name="tgkill" number="268"/>
-  <syscall name="utimes" number="269"/>
-  <syscall name="arm_fadvise64_64" number="270"/>
-  <syscall name="pciconfig_iobase" number="271"/>
-  <syscall name="pciconfig_read" number="272"/>
-  <syscall name="pciconfig_write" number="273"/>
-  <syscall name="mq_open" number="274"/>
-  <syscall name="mq_unlink" number="275"/>
-  <syscall name="mq_timedsend" number="276"/>
-  <syscall name="mq_timedreceive" number="277"/>
-  <syscall name="mq_notify" number="278"/>
-  <syscall name="mq_getsetattr" number="279"/>
-  <syscall name="waitid" number="280"/>
-  <syscall name="socket" number="281"/>
-  <syscall name="bind" number="282"/>
-  <syscall name="connect" number="283"/>
-  <syscall name="listen" number="284"/>
-  <syscall name="accept" number="285"/>
-  <syscall name="getsockname" number="286"/>
-  <syscall name="getpeername" number="287"/>
-  <syscall name="socketpair" number="288"/>
-  <syscall name="send" number="289"/>
-  <syscall name="sendto" number="290"/>
-  <syscall name="recv" number="291"/>
-  <syscall name="recvfrom" number="292"/>
-  <syscall name="shutdown" number="293"/>
-  <syscall name="setsockopt" number="294"/>
-  <syscall name="getsockopt" number="295"/>
-  <syscall name="sendmsg" number="296"/>
-  <syscall name="recvmsg" number="297"/>
-  <syscall name="semop" number="298"/>
-  <syscall name="semget" number="299"/>
-  <syscall name="semctl" number="300"/>
-  <syscall name="msgsnd" number="301"/>
-  <syscall name="msgrcv" number="302"/>
-  <syscall name="msgget" number="303"/>
-  <syscall name="msgctl" number="304"/>
-  <syscall name="shmat" number="305"/>
-  <syscall name="shmdt" number="306"/>
-  <syscall name="shmget" number="307"/>
-  <syscall name="shmctl" number="308"/>
-  <syscall name="add_key" number="309"/>
-  <syscall name="request_key" number="310"/>
-  <syscall name="keyctl" number="311"/>
-  <syscall name="semtimedop" number="312"/>
-  <syscall name="vserver" number="313"/>
-  <syscall name="ioprio_set" number="314"/>
-  <syscall name="ioprio_get" number="315"/>
-  <syscall name="inotify_init" number="316"/>
-  <syscall name="inotify_add_watch" number="317"/>
-  <syscall name="inotify_rm_watch" number="318"/>
-  <syscall name="mbind" number="319"/>
-  <syscall name="get_mempolicy" number="320"/>
-  <syscall name="set_mempolicy" number="321"/>
-  <syscall name="openat" number="322"/>
-  <syscall name="mkdirat" number="323"/>
-  <syscall name="mknodat" number="324"/>
-  <syscall name="fchownat" number="325"/>
-  <syscall name="futimesat" number="326"/>
-  <syscall name="fstatat64" number="327"/>
-  <syscall name="unlinkat" number="328"/>
-  <syscall name="renameat" number="329"/>
-  <syscall name="linkat" number="330"/>
-  <syscall name="symlinkat" number="331"/>
-  <syscall name="readlinkat" number="332"/>
-  <syscall name="fchmodat" number="333"/>
-  <syscall name="faccessat" number="334"/>
-  <syscall name="pselect6" number="335"/>
-  <syscall name="ppoll" number="336"/>
-  <syscall name="unshare" number="337"/>
-  <syscall name="set_robust_list" number="338"/>
-  <syscall name="get_robust_list" number="339"/>
-  <syscall name="splice" number="340"/>
-  <syscall name="arm_sync_file_range" number="341"/>
-  <syscall name="tee" number="342"/>
-  <syscall name="vmsplice" number="343"/>
-  <syscall name="move_pages" number="344"/>
-  <syscall name="getcpu" number="345"/>
-  <syscall name="epoll_pwait" number="346"/>
-  <syscall name="kexec_load" number="347"/>
-  <syscall name="utimensat" number="348"/>
-  <syscall name="signalfd" number="349"/>
-  <syscall name="timerfd_create" number="350"/>
-  <syscall name="eventfd" number="351"/>
-  <syscall name="fallocate" number="352"/>
-  <syscall name="timerfd_settime" number="353"/>
-  <syscall name="timerfd_gettime" number="354"/>
-  <syscall name="signalfd4" number="355"/>
-  <syscall name="eventfd2" number="356"/>
-  <syscall name="epoll_create1" number="357"/>
-  <syscall name="dup3" number="358"/>
-  <syscall name="pipe2" number="359"/>
-  <syscall name="inotify_init1" number="360"/>
-  <syscall name="preadv" number="361"/>
-  <syscall name="pwritev" number="362"/>
-  <syscall name="rt_tgsigqueueinfo" number="363"/>
-  <syscall name="perf_event_open" number="364"/>
-  <syscall name="recvmmsg" number="365"/>
-  <syscall name="accept4" number="366"/>
-  <syscall name="fanotify_init" number="367"/>
-  <syscall name="fanotify_mark" number="368"/>
-  <syscall name="prlimit64" number="369"/>
-  <syscall name="name_to_handle_at" number="370"/>
-  <syscall name="open_by_handle_at" number="371"/>
-  <syscall name="clock_adjtime" number="372"/>
-  <syscall name="syncfs" number="373"/>
-  <syscall name="sendmmsg" number="374"/>
-  <syscall name="setns" number="375"/>
-  <syscall name="process_vm_readv" number="376"/>
-  <syscall name="process_vm_writev" number="377"/>
-  <syscall name="kcmp" number="378"/>
-  <syscall name="finit_module" number="379"/>
-  <syscall name="ARM_breakpoint" number="983041"/>
-  <syscall name="ARM_cacheflush" number="983042"/>
-  <syscall name="ARM_usr26" number="983043"/>
-  <syscall name="ARM_usr32" number="983044"/>
-  <syscall name="ARM_set_tls" number="983045"/>
-</syscalls_info>
diff --git a/share/gdb/syscalls/gdb-syscalls.dtd b/share/gdb/syscalls/gdb-syscalls.dtd
deleted file mode 100644
index 3ad3625..0000000
--- a/share/gdb/syscalls/gdb-syscalls.dtd
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- Copyright (C) 2009-2014 Free Software Foundation, Inc.
-
-     Copying and distribution of this file, with or without modification,
-     are permitted in any medium without royalty provided the copyright
-     notice and this notice are preserved.  -->
-
-<!-- The root element of a syscall info is <syscalls-info>.  -->
-
-<!ELEMENT syscalls-info		(syscall*)>
-
-<!ELEMENT syscall		EMPTY>
-<!ATTLIST syscall
-	name			CDATA	#REQUIRED
-	number			CDATA	#REQUIRED>
diff --git a/share/gdb/syscalls/i386-linux.xml b/share/gdb/syscalls/i386-linux.xml
deleted file mode 100644
index 3d890bd..0000000
--- a/share/gdb/syscalls/i386-linux.xml
+++ /dev/null
@@ -1,340 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2009-2014 Free Software Foundation, Inc.
-
-     Copying and distribution of this file, with or without modification,
-     are permitted in any medium without royalty provided the copyright
-     notice and this notice are preserved.  -->
-
-<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
-
-<!-- This file was generated using the following file:
-     
-     /usr/src/linux/arch/x86/include/asm/unistd_32.h
-
-     The file mentioned above belongs to the Linux Kernel.  -->
-
-<syscalls_info>
-  <syscall name="restart_syscall" number="0"/>
-  <syscall name="exit" number="1"/>
-  <syscall name="fork" number="2"/>
-  <syscall name="read" number="3"/>
-  <syscall name="write" number="4"/>
-  <syscall name="open" number="5"/>
-  <syscall name="close" number="6"/>
-  <syscall name="waitpid" number="7"/>
-  <syscall name="creat" number="8"/>
-  <syscall name="link" number="9"/>
-  <syscall name="unlink" number="10"/>
-  <syscall name="execve" number="11"/>
-  <syscall name="chdir" number="12"/>
-  <syscall name="time" number="13"/>
-  <syscall name="mknod" number="14"/>
-  <syscall name="chmod" number="15"/>
-  <syscall name="lchown" number="16"/>
-  <syscall name="break" number="17"/>
-  <syscall name="oldstat" number="18"/>
-  <syscall name="lseek" number="19"/>
-  <syscall name="getpid" number="20"/>
-  <syscall name="mount" number="21"/>
-  <syscall name="umount" number="22"/>
-  <syscall name="setuid" number="23"/>
-  <syscall name="getuid" number="24"/>
-  <syscall name="stime" number="25"/>
-  <syscall name="ptrace" number="26"/>
-  <syscall name="alarm" number="27"/>
-  <syscall name="oldfstat" number="28"/>
-  <syscall name="pause" number="29"/>
-  <syscall name="utime" number="30"/>
-  <syscall name="stty" number="31"/>
-  <syscall name="gtty" number="32"/>
-  <syscall name="access" number="33"/>
-  <syscall name="nice" number="34"/>
-  <syscall name="ftime" number="35"/>
-  <syscall name="sync" number="36"/>
-  <syscall name="kill" number="37"/>
-  <syscall name="rename" number="38"/>
-  <syscall name="mkdir" number="39"/>
-  <syscall name="rmdir" number="40"/>
-  <syscall name="dup" number="41"/>
-  <syscall name="pipe" number="42"/>
-  <syscall name="times" number="43"/>
-  <syscall name="prof" number="44"/>
-  <syscall name="brk" number="45"/>
-  <syscall name="setgid" number="46"/>
-  <syscall name="getgid" number="47"/>
-  <syscall name="signal" number="48"/>
-  <syscall name="geteuid" number="49"/>
-  <syscall name="getegid" number="50"/>
-  <syscall name="acct" number="51"/>
-  <syscall name="umount2" number="52"/>
-  <syscall name="lock" number="53"/>
-  <syscall name="ioctl" number="54"/>
-  <syscall name="fcntl" number="55"/>
-  <syscall name="mpx" number="56"/>
-  <syscall name="setpgid" number="57"/>
-  <syscall name="ulimit" number="58"/>
-  <syscall name="oldolduname" number="59"/>
-  <syscall name="umask" number="60"/>
-  <syscall name="chroot" number="61"/>
-  <syscall name="ustat" number="62"/>
-  <syscall name="dup2" number="63"/>
-  <syscall name="getppid" number="64"/>
-  <syscall name="getpgrp" number="65"/>
-  <syscall name="setsid" number="66"/>
-  <syscall name="sigaction" number="67"/>
-  <syscall name="sgetmask" number="68"/>
-  <syscall name="ssetmask" number="69"/>
-  <syscall name="setreuid" number="70"/>
-  <syscall name="setregid" number="71"/>
-  <syscall name="sigsuspend" number="72"/>
-  <syscall name="sigpending" number="73"/>
-  <syscall name="sethostname" number="74"/>
-  <syscall name="setrlimit" number="75"/>
-  <syscall name="getrlimit" number="76"/>
-  <syscall name="getrusage" number="77"/>
-  <syscall name="gettimeofday" number="78"/>
-  <syscall name="settimeofday" number="79"/>
-  <syscall name="getgroups" number="80"/>
-  <syscall name="setgroups" number="81"/>
-  <syscall name="select" number="82"/>
-  <syscall name="symlink" number="83"/>
-  <syscall name="oldlstat" number="84"/>
-  <syscall name="readlink" number="85"/>
-  <syscall name="uselib" number="86"/>
-  <syscall name="swapon" number="87"/>
-  <syscall name="reboot" number="88"/>
-  <syscall name="readdir" number="89"/>
-  <syscall name="mmap" number="90"/>
-  <syscall name="munmap" number="91"/>
-  <syscall name="truncate" number="92"/>
-  <syscall name="ftruncate" number="93"/>
-  <syscall name="fchmod" number="94"/>
-  <syscall name="fchown" number="95"/>
-  <syscall name="getpriority" number="96"/>
-  <syscall name="setpriority" number="97"/>
-  <syscall name="profil" number="98"/>
-  <syscall name="statfs" number="99"/>
-  <syscall name="fstatfs" number="100"/>
-  <syscall name="ioperm" number="101"/>
-  <syscall name="socketcall" number="102"/>
-  <syscall name="syslog" number="103"/>
-  <syscall name="setitimer" number="104"/>
-  <syscall name="getitimer" number="105"/>
-  <syscall name="stat" number="106"/>
-  <syscall name="lstat" number="107"/>
-  <syscall name="fstat" number="108"/>
-  <syscall name="olduname" number="109"/>
-  <syscall name="iopl" number="110"/>
-  <syscall name="vhangup" number="111"/>
-  <syscall name="idle" number="112"/>
-  <syscall name="vm86old" number="113"/>
-  <syscall name="wait4" number="114"/>
-  <syscall name="swapoff" number="115"/>
-  <syscall name="sysinfo" number="116"/>
-  <syscall name="ipc" number="117"/>
-  <syscall name="fsync" number="118"/>
-  <syscall name="sigreturn" number="119"/>
-  <syscall name="clone" number="120"/>
-  <syscall name="setdomainname" number="121"/>
-  <syscall name="uname" number="122"/>
-  <syscall name="modify_ldt" number="123"/>
-  <syscall name="adjtimex" number="124"/>
-  <syscall name="mprotect" number="125"/>
-  <syscall name="sigprocmask" number="126"/>
-  <syscall name="create_module" number="127"/>
-  <syscall name="init_module" number="128"/>
-  <syscall name="delete_module" number="129"/>
-  <syscall name="get_kernel_syms" number="130"/>
-  <syscall name="quotactl" number="131"/>
-  <syscall name="getpgid" number="132"/>
-  <syscall name="fchdir" number="133"/>
-  <syscall name="bdflush" number="134"/>
-  <syscall name="sysfs" number="135"/>
-  <syscall name="personality" number="136"/>
-  <syscall name="afs_syscall" number="137"/>
-  <syscall name="setfsuid" number="138"/>
-  <syscall name="setfsgid" number="139"/>
-  <syscall name="_llseek" number="140"/>
-  <syscall name="getdents" number="141"/>
-  <syscall name="_newselect" number="142"/>
-  <syscall name="flock" number="143"/>
-  <syscall name="msync" number="144"/>
-  <syscall name="readv" number="145"/>
-  <syscall name="writev" number="146"/>
-  <syscall name="getsid" number="147"/>
-  <syscall name="fdatasync" number="148"/>
-  <syscall name="_sysctl" number="149"/>
-  <syscall name="mlock" number="150"/>
-  <syscall name="munlock" number="151"/>
-  <syscall name="mlockall" number="152"/>
-  <syscall name="munlockall" number="153"/>
-  <syscall name="sched_setparam" number="154"/>
-  <syscall name="sched_getparam" number="155"/>
-  <syscall name="sched_setscheduler" number="156"/>
-  <syscall name="sched_getscheduler" number="157"/>
-  <syscall name="sched_yield" number="158"/>
-  <syscall name="sched_get_priority_max" number="159"/>
-  <syscall name="sched_get_priority_min" number="160"/>
-  <syscall name="sched_rr_get_interval" number="161"/>
-  <syscall name="nanosleep" number="162"/>
-  <syscall name="mremap" number="163"/>
-  <syscall name="setresuid" number="164"/>
-  <syscall name="getresuid" number="165"/>
-  <syscall name="vm86" number="166"/>
-  <syscall name="query_module" number="167"/>
-  <syscall name="poll" number="168"/>
-  <syscall name="nfsservctl" number="169"/>
-  <syscall name="setresgid" number="170"/>
-  <syscall name="getresgid" number="171"/>
-  <syscall name="prctl" number="172"/>
-  <syscall name="rt_sigreturn" number="173"/>
-  <syscall name="rt_sigaction" number="174"/>
-  <syscall name="rt_sigprocmask" number="175"/>
-  <syscall name="rt_sigpending" number="176"/>
-  <syscall name="rt_sigtimedwait" number="177"/>
-  <syscall name="rt_sigqueueinfo" number="178"/>
-  <syscall name="rt_sigsuspend" number="179"/>
-  <syscall name="pread64" number="180"/>
-  <syscall name="pwrite64" number="181"/>
-  <syscall name="chown" number="182"/>
-  <syscall name="getcwd" number="183"/>
-  <syscall name="capget" number="184"/>
-  <syscall name="capset" number="185"/>
-  <syscall name="sigaltstack" number="186"/>
-  <syscall name="sendfile" number="187"/>
-  <syscall name="getpmsg" number="188"/>
-  <syscall name="putpmsg" number="189"/>
-  <syscall name="vfork" number="190"/>
-  <syscall name="ugetrlimit" number="191"/>
-  <syscall name="mmap2" number="192"/>
-  <syscall name="truncate64" number="193"/>
-  <syscall name="ftruncate64" number="194"/>
-  <syscall name="stat64" number="195"/>
-  <syscall name="lstat64" number="196"/>
-  <syscall name="fstat64" number="197"/>
-  <syscall name="lchown32" number="198"/>
-  <syscall name="getuid32" number="199"/>
-  <syscall name="getgid32" number="200"/>
-  <syscall name="geteuid32" number="201"/>
-  <syscall name="getegid32" number="202"/>
-  <syscall name="setreuid32" number="203"/>
-  <syscall name="setregid32" number="204"/>
-  <syscall name="getgroups32" number="205"/>
-  <syscall name="setgroups32" number="206"/>
-  <syscall name="fchown32" number="207"/>
-  <syscall name="setresuid32" number="208"/>
-  <syscall name="getresuid32" number="209"/>
-  <syscall name="setresgid32" number="210"/>
-  <syscall name="getresgid32" number="211"/>
-  <syscall name="chown32" number="212"/>
-  <syscall name="setuid32" number="213"/>
-  <syscall name="setgid32" number="214"/>
-  <syscall name="setfsuid32" number="215"/>
-  <syscall name="setfsgid32" number="216"/>
-  <syscall name="pivot_root" number="217"/>
-  <syscall name="mincore" number="218"/>
-  <syscall name="madvise" number="219"/>
-  <syscall name="madvise1" number="220"/>
-  <syscall name="getdents64" number="221"/>
-  <syscall name="fcntl64" number="222"/>
-  <syscall name="gettid" number="224"/>
-  <syscall name="readahead" number="225"/>
-  <syscall name="setxattr" number="226"/>
-  <syscall name="lsetxattr" number="227"/>
-  <syscall name="fsetxattr" number="228"/>
-  <syscall name="getxattr" number="229"/>
-  <syscall name="lgetxattr" number="230"/>
-  <syscall name="fgetxattr" number="231"/>
-  <syscall name="listxattr" number="232"/>
-  <syscall name="llistxattr" number="233"/>
-  <syscall name="flistxattr" number="234"/>
-  <syscall name="removexattr" number="235"/>
-  <syscall name="lremovexattr" number="236"/>
-  <syscall name="fremovexattr" number="237"/>
-  <syscall name="tkill" number="238"/>
-  <syscall name="sendfile64" number="239"/>
-  <syscall name="futex" number="240"/>
-  <syscall name="sched_setaffinity" number="241"/>
-  <syscall name="sched_getaffinity" number="242"/>
-  <syscall name="set_thread_area" number="243"/>
-  <syscall name="get_thread_area" number="244"/>
-  <syscall name="io_setup" number="245"/>
-  <syscall name="io_destroy" number="246"/>
-  <syscall name="io_getevents" number="247"/>
-  <syscall name="io_submit" number="248"/>
-  <syscall name="io_cancel" number="249"/>
-  <syscall name="fadvise64" number="250"/>
-  <syscall name="exit_group" number="252"/>
-  <syscall name="lookup_dcookie" number="253"/>
-  <syscall name="epoll_create" number="254"/>
-  <syscall name="epoll_ctl" number="255"/>
-  <syscall name="epoll_wait" number="256"/>
-  <syscall name="remap_file_pages" number="257"/>
-  <syscall name="set_tid_address" number="258"/>
-  <syscall name="timer_create" number="259"/>
-  <syscall name="timer_settime" number="260"/>
-  <syscall name="timer_gettime" number="261"/>
-  <syscall name="timer_getoverrun" number="262"/>
-  <syscall name="timer_delete" number="263"/>
-  <syscall name="clock_settime" number="264"/>
-  <syscall name="clock_gettime" number="265"/>
-  <syscall name="clock_getres" number="266"/>
-  <syscall name="clock_nanosleep" number="267"/>
-  <syscall name="statfs64" number="268"/>
-  <syscall name="fstatfs64" number="269"/>
-  <syscall name="tgkill" number="270"/>
-  <syscall name="utimes" number="271"/>
-  <syscall name="fadvise64_64" number="272"/>
-  <syscall name="vserver" number="273"/>
-  <syscall name="mbind" number="274"/>
-  <syscall name="get_mempolicy" number="275"/>
-  <syscall name="set_mempolicy" number="276"/>
-  <syscall name="mq_open" number="277"/>
-  <syscall name="mq_unlink" number="278"/>
-  <syscall name="mq_timedsend" number="279"/>
-  <syscall name="mq_timedreceive" number="280"/>
-  <syscall name="mq_notify" number="281"/>
-  <syscall name="mq_getsetattr" number="282"/>
-  <syscall name="kexec_load" number="283"/>
-  <syscall name="waitid" number="284"/>
-  <syscall name="add_key" number="286"/>
-  <syscall name="request_key" number="287"/>
-  <syscall name="keyctl" number="288"/>
-  <syscall name="ioprio_set" number="289"/>
-  <syscall name="ioprio_get" number="290"/>
-  <syscall name="inotify_init" number="291"/>
-  <syscall name="inotify_add_watch" number="292"/>
-  <syscall name="inotify_rm_watch" number="293"/>
-  <syscall name="migrate_pages" number="294"/>
-  <syscall name="openat" number="295"/>
-  <syscall name="mkdirat" number="296"/>
-  <syscall name="mknodat" number="297"/>
-  <syscall name="fchownat" number="298"/>
-  <syscall name="futimesat" number="299"/>
-  <syscall name="fstatat64" number="300"/>
-  <syscall name="unlinkat" number="301"/>
-  <syscall name="renameat" number="302"/>
-  <syscall name="linkat" number="303"/>
-  <syscall name="symlinkat" number="304"/>
-  <syscall name="readlinkat" number="305"/>
-  <syscall name="fchmodat" number="306"/>
-  <syscall name="faccessat" number="307"/>
-  <syscall name="pselect6" number="308"/>
-  <syscall name="ppoll" number="309"/>
-  <syscall name="unshare" number="310"/>
-  <syscall name="set_robust_list" number="311"/>
-  <syscall name="get_robust_list" number="312"/>
-  <syscall name="splice" number="313"/>
-  <syscall name="sync_file_range" number="314"/>
-  <syscall name="tee" number="315"/>
-  <syscall name="vmsplice" number="316"/>
-  <syscall name="move_pages" number="317"/>
-  <syscall name="getcpu" number="318"/>
-  <syscall name="epoll_pwait" number="319"/>
-  <syscall name="utimensat" number="320"/>
-  <syscall name="signalfd" number="321"/>
-  <syscall name="timerfd_create" number="322"/>
-  <syscall name="eventfd" number="323"/>
-  <syscall name="fallocate" number="324"/>
-  <syscall name="timerfd_settime" number="325"/>
-</syscalls_info>
diff --git a/share/gdb/syscalls/mips-n32-linux.xml b/share/gdb/syscalls/mips-n32-linux.xml
deleted file mode 100644
index 5c7a95d..0000000
--- a/share/gdb/syscalls/mips-n32-linux.xml
+++ /dev/null
@@ -1,319 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2011-2014 Free Software Foundation, Inc.
-
-     Copying and distribution of this file, with or without modification,
-     are permitted in any medium without royalty provided the copyright
-     notice and this notice are preserved.  -->
-
-<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
-
-<!-- This file was generated using the following file:
-     
-     /usr/src/linux/arch/mips/include/asm/unistd.h
-
-     The file mentioned above belongs to the Linux Kernel.  -->
-
-<syscalls_info>
-  <syscall name="read" number="6000"/>
-  <syscall name="write" number="6001"/>
-  <syscall name="open" number="6002"/>
-  <syscall name="close" number="6003"/>
-  <syscall name="stat" number="6004"/>
-  <syscall name="fstat" number="6005"/>
-  <syscall name="lstat" number="6006"/>
-  <syscall name="poll" number="6007"/>
-  <syscall name="lseek" number="6008"/>
-  <syscall name="mmap" number="6009"/>
-  <syscall name="mprotect" number="6010"/>
-  <syscall name="munmap" number="6011"/>
-  <syscall name="brk" number="6012"/>
-  <syscall name="rt_sigaction" number="6013"/>
-  <syscall name="rt_sigprocmask" number="6014"/>
-  <syscall name="ioctl" number="6015"/>
-  <syscall name="pread64" number="6016"/>
-  <syscall name="pwrite64" number="6017"/>
-  <syscall name="readv" number="6018"/>
-  <syscall name="writev" number="6019"/>
-  <syscall name="access" number="6020"/>
-  <syscall name="pipe" number="6021"/>
-  <syscall name="_newselect" number="6022"/>
-  <syscall name="sched_yield" number="6023"/>
-  <syscall name="mremap" number="6024"/>
-  <syscall name="msync" number="6025"/>
-  <syscall name="mincore" number="6026"/>
-  <syscall name="madvise" number="6027"/>
-  <syscall name="shmget" number="6028"/>
-  <syscall name="shmat" number="6029"/>
-  <syscall name="shmctl" number="6030"/>
-  <syscall name="dup" number="6031"/>
-  <syscall name="dup2" number="6032"/>
-  <syscall name="pause" number="6033"/>
-  <syscall name="nanosleep" number="6034"/>
-  <syscall name="getitimer" number="6035"/>
-  <syscall name="setitimer" number="6036"/>
-  <syscall name="alarm" number="6037"/>
-  <syscall name="getpid" number="6038"/>
-  <syscall name="sendfile" number="6039"/>
-  <syscall name="socket" number="6040"/>
-  <syscall name="connect" number="6041"/>
-  <syscall name="accept" number="6042"/>
-  <syscall name="sendto" number="6043"/>
-  <syscall name="recvfrom" number="6044"/>
-  <syscall name="sendmsg" number="6045"/>
-  <syscall name="recvmsg" number="6046"/>
-  <syscall name="shutdown" number="6047"/>
-  <syscall name="bind" number="6048"/>
-  <syscall name="listen" number="6049"/>
-  <syscall name="getsockname" number="6050"/>
-  <syscall name="getpeername" number="6051"/>
-  <syscall name="socketpair" number="6052"/>
-  <syscall name="setsockopt" number="6053"/>
-  <syscall name="getsockopt" number="6054"/>
-  <syscall name="clone" number="6055"/>
-  <syscall name="fork" number="6056"/>
-  <syscall name="execve" number="6057"/>
-  <syscall name="exit" number="6058"/>
-  <syscall name="wait4" number="6059"/>
-  <syscall name="kill" number="6060"/>
-  <syscall name="uname" number="6061"/>
-  <syscall name="semget" number="6062"/>
-  <syscall name="semop" number="6063"/>
-  <syscall name="semctl" number="6064"/>
-  <syscall name="shmdt" number="6065"/>
-  <syscall name="msgget" number="6066"/>
-  <syscall name="msgsnd" number="6067"/>
-  <syscall name="msgrcv" number="6068"/>
-  <syscall name="msgctl" number="6069"/>
-  <syscall name="fcntl" number="6070"/>
-  <syscall name="flock" number="6071"/>
-  <syscall name="fsync" number="6072"/>
-  <syscall name="fdatasync" number="6073"/>
-  <syscall name="truncate" number="6074"/>
-  <syscall name="ftruncate" number="6075"/>
-  <syscall name="getdents" number="6076"/>
-  <syscall name="getcwd" number="6077"/>
-  <syscall name="chdir" number="6078"/>
-  <syscall name="fchdir" number="6079"/>
-  <syscall name="rename" number="6080"/>
-  <syscall name="mkdir" number="6081"/>
-  <syscall name="rmdir" number="6082"/>
-  <syscall name="creat" number="6083"/>
-  <syscall name="link" number="6084"/>
-  <syscall name="unlink" number="6085"/>
-  <syscall name="symlink" number="6086"/>
-  <syscall name="readlink" number="6087"/>
-  <syscall name="chmod" number="6088"/>
-  <syscall name="fchmod" number="6089"/>
-  <syscall name="chown" number="6090"/>
-  <syscall name="fchown" number="6091"/>
-  <syscall name="lchown" number="6092"/>
-  <syscall name="umask" number="6093"/>
-  <syscall name="gettimeofday" number="6094"/>
-  <syscall name="getrlimit" number="6095"/>
-  <syscall name="getrusage" number="6096"/>
-  <syscall name="sysinfo" number="6097"/>
-  <syscall name="times" number="6098"/>
-  <syscall name="ptrace" number="6099"/>
-  <syscall name="getuid" number="6100"/>
-  <syscall name="syslog" number="6101"/>
-  <syscall name="getgid" number="6102"/>
-  <syscall name="setuid" number="6103"/>
-  <syscall name="setgid" number="6104"/>
-  <syscall name="geteuid" number="6105"/>
-  <syscall name="getegid" number="6106"/>
-  <syscall name="setpgid" number="6107"/>
-  <syscall name="getppid" number="6108"/>
-  <syscall name="getpgrp" number="6109"/>
-  <syscall name="setsid" number="6110"/>
-  <syscall name="setreuid" number="6111"/>
-  <syscall name="setregid" number="6112"/>
-  <syscall name="getgroups" number="6113"/>
-  <syscall name="setgroups" number="6114"/>
-  <syscall name="setresuid" number="6115"/>
-  <syscall name="getresuid" number="6116"/>
-  <syscall name="setresgid" number="6117"/>
-  <syscall name="getresgid" number="6118"/>
-  <syscall name="getpgid" number="6119"/>
-  <syscall name="setfsuid" number="6120"/>
-  <syscall name="setfsgid" number="6121"/>
-  <syscall name="getsid" number="6122"/>
-  <syscall name="capget" number="6123"/>
-  <syscall name="capset" number="6124"/>
-  <syscall name="rt_sigpending" number="6125"/>
-  <syscall name="rt_sigtimedwait" number="6126"/>
-  <syscall name="rt_sigqueueinfo" number="6127"/>
-  <syscall name="rt_sigsuspend" number="6128"/>
-  <syscall name="sigaltstack" number="6129"/>
-  <syscall name="utime" number="6130"/>
-  <syscall name="mknod" number="6131"/>
-  <syscall name="personality" number="6132"/>
-  <syscall name="ustat" number="6133"/>
-  <syscall name="statfs" number="6134"/>
-  <syscall name="fstatfs" number="6135"/>
-  <syscall name="sysfs" number="6136"/>
-  <syscall name="getpriority" number="6137"/>
-  <syscall name="setpriority" number="6138"/>
-  <syscall name="sched_setparam" number="6139"/>
-  <syscall name="sched_getparam" number="6140"/>
-  <syscall name="sched_setscheduler" number="6141"/>
-  <syscall name="sched_getscheduler" number="6142"/>
-  <syscall name="sched_get_priority_max" number="6143"/>
-  <syscall name="sched_get_priority_min" number="6144"/>
-  <syscall name="sched_rr_get_interval" number="6145"/>
-  <syscall name="mlock" number="6146"/>
-  <syscall name="munlock" number="6147"/>
-  <syscall name="mlockall" number="6148"/>
-  <syscall name="munlockall" number="6149"/>
-  <syscall name="vhangup" number="6150"/>
-  <syscall name="pivot_root" number="6151"/>
-  <syscall name="_sysctl" number="6152"/>
-  <syscall name="prctl" number="6153"/>
-  <syscall name="adjtimex" number="6154"/>
-  <syscall name="setrlimit" number="6155"/>
-  <syscall name="chroot" number="6156"/>
-  <syscall name="sync" number="6157"/>
-  <syscall name="acct" number="6158"/>
-  <syscall name="settimeofday" number="6159"/>
-  <syscall name="mount" number="6160"/>
-  <syscall name="umount2" number="6161"/>
-  <syscall name="swapon" number="6162"/>
-  <syscall name="swapoff" number="6163"/>
-  <syscall name="reboot" number="6164"/>
-  <syscall name="sethostname" number="6165"/>
-  <syscall name="setdomainname" number="6166"/>
-  <syscall name="create_module" number="6167"/>
-  <syscall name="init_module" number="6168"/>
-  <syscall name="delete_module" number="6169"/>
-  <syscall name="get_kernel_syms" number="6170"/>
-  <syscall name="query_module" number="6171"/>
-  <syscall name="quotactl" number="6172"/>
-  <syscall name="nfsservctl" number="6173"/>
-  <syscall name="getpmsg" number="6174"/>
-  <syscall name="putpmsg" number="6175"/>
-  <syscall name="afs_syscall" number="6176"/>
-  <syscall name="reserved177" number="6177"/>
-  <syscall name="gettid" number="6178"/>
-  <syscall name="readahead" number="6179"/>
-  <syscall name="setxattr" number="6180"/>
-  <syscall name="lsetxattr" number="6181"/>
-  <syscall name="fsetxattr" number="6182"/>
-  <syscall name="getxattr" number="6183"/>
-  <syscall name="lgetxattr" number="6184"/>
-  <syscall name="fgetxattr" number="6185"/>
-  <syscall name="listxattr" number="6186"/>
-  <syscall name="llistxattr" number="6187"/>
-  <syscall name="flistxattr" number="6188"/>
-  <syscall name="removexattr" number="6189"/>
-  <syscall name="lremovexattr" number="6190"/>
-  <syscall name="fremovexattr" number="6191"/>
-  <syscall name="tkill" number="6192"/>
-  <syscall name="reserved193" number="6193"/>
-  <syscall name="futex" number="6194"/>
-  <syscall name="sched_setaffinity" number="6195"/>
-  <syscall name="sched_getaffinity" number="6196"/>
-  <syscall name="cacheflush" number="6197"/>
-  <syscall name="cachectl" number="6198"/>
-  <syscall name="sysmips" number="6199"/>
-  <syscall name="io_setup" number="6200"/>
-  <syscall name="io_destroy" number="6201"/>
-  <syscall name="io_getevents" number="6202"/>
-  <syscall name="io_submit" number="6203"/>
-  <syscall name="io_cancel" number="6204"/>
-  <syscall name="exit_group" number="6205"/>
-  <syscall name="lookup_dcookie" number="6206"/>
-  <syscall name="epoll_create" number="6207"/>
-  <syscall name="epoll_ctl" number="6208"/>
-  <syscall name="epoll_wait" number="6209"/>
-  <syscall name="remap_file_pages" number="6210"/>
-  <syscall name="rt_sigreturn" number="6211"/>
-  <syscall name="fcntl64" number="6212"/>
-  <syscall name="set_tid_address" number="6213"/>
-  <syscall name="restart_syscall" number="6214"/>
-  <syscall name="semtimedop" number="6215"/>
-  <syscall name="fadvise64" number="6216"/>
-  <syscall name="statfs64" number="6217"/>
-  <syscall name="fstatfs64" number="6218"/>
-  <syscall name="sendfile64" number="6219"/>
-  <syscall name="timer_create" number="6220"/>
-  <syscall name="timer_settime" number="6221"/>
-  <syscall name="timer_gettime" number="6222"/>
-  <syscall name="timer_getoverrun" number="6223"/>
-  <syscall name="timer_delete" number="6224"/>
-  <syscall name="clock_settime" number="6225"/>
-  <syscall name="clock_gettime" number="6226"/>
-  <syscall name="clock_getres" number="6227"/>
-  <syscall name="clock_nanosleep" number="6228"/>
-  <syscall name="tgkill" number="6229"/>
-  <syscall name="utimes" number="6230"/>
-  <syscall name="mbind" number="6231"/>
-  <syscall name="get_mempolicy" number="6232"/>
-  <syscall name="set_mempolicy" number="6233"/>
-  <syscall name="mq_open" number="6234"/>
-  <syscall name="mq_unlink" number="6235"/>
-  <syscall name="mq_timedsend" number="6236"/>
-  <syscall name="mq_timedreceive" number="6237"/>
-  <syscall name="mq_notify" number="6238"/>
-  <syscall name="mq_getsetattr" number="6239"/>
-  <syscall name="vserver" number="6240"/>
-  <syscall name="waitid" number="6241"/>
-  <syscall name="add_key" number="6243"/>
-  <syscall name="request_key" number="6244"/>
-  <syscall name="keyctl" number="6245"/>
-  <syscall name="set_thread_area" number="6246"/>
-  <syscall name="inotify_init" number="6247"/>
-  <syscall name="inotify_add_watch" number="6248"/>
-  <syscall name="inotify_rm_watch" number="6249"/>
-  <syscall name="migrate_pages" number="6250"/>
-  <syscall name="openat" number="6251"/>
-  <syscall name="mkdirat" number="6252"/>
-  <syscall name="mknodat" number="6253"/>
-  <syscall name="fchownat" number="6254"/>
-  <syscall name="futimesat" number="6255"/>
-  <syscall name="newfstatat" number="6256"/>
-  <syscall name="unlinkat" number="6257"/>
-  <syscall name="renameat" number="6258"/>
-  <syscall name="linkat" number="6259"/>
-  <syscall name="symlinkat" number="6260"/>
-  <syscall name="readlinkat" number="6261"/>
-  <syscall name="fchmodat" number="6262"/>
-  <syscall name="faccessat" number="6263"/>
-  <syscall name="pselect6" number="6264"/>
-  <syscall name="ppoll" number="6265"/>
-  <syscall name="unshare" number="6266"/>
-  <syscall name="splice" number="6267"/>
-  <syscall name="sync_file_range" number="6268"/>
-  <syscall name="tee" number="6269"/>
-  <syscall name="vmsplice" number="6270"/>
-  <syscall name="move_pages" number="6271"/>
-  <syscall name="set_robust_list" number="6272"/>
-  <syscall name="get_robust_list" number="6273"/>
-  <syscall name="kexec_load" number="6274"/>
-  <syscall name="getcpu" number="6275"/>
-  <syscall name="epoll_pwait" number="6276"/>
-  <syscall name="ioprio_set" number="6277"/>
-  <syscall name="ioprio_get" number="6278"/>
-  <syscall name="utimensat" number="6279"/>
-  <syscall name="signalfd" number="6280"/>
-  <syscall name="timerfd" number="6281"/>
-  <syscall name="eventfd" number="6282"/>
-  <syscall name="fallocate" number="6283"/>
-  <syscall name="timerfd_create" number="6284"/>
-  <syscall name="timerfd_gettime" number="6285"/>
-  <syscall name="timerfd_settime" number="6286"/>
-  <syscall name="signalfd4" number="6287"/>
-  <syscall name="eventfd2" number="6288"/>
-  <syscall name="epoll_create1" number="6289"/>
-  <syscall name="dup3" number="6290"/>
-  <syscall name="pipe2" number="6291"/>
-  <syscall name="inotify_init1" number="6292"/>
-  <syscall name="preadv" number="6293"/>
-  <syscall name="pwritev" number="6294"/>
-  <syscall name="rt_tgsigqueueinfo" number="6295"/>
-  <syscall name="perf_event_open" number="6296"/>
-  <syscall name="accept4" number="6297"/>
-  <syscall name="recvmmsg" number="6298"/>
-  <syscall name="getdents64" number="6299"/>
-  <syscall name="fanotify_init" number="6300"/>
-  <syscall name="fanotify_mark" number="6301"/>
-  <syscall name="prlimit64" number="6302"/>
-</syscalls_info>
diff --git a/share/gdb/syscalls/mips-n64-linux.xml b/share/gdb/syscalls/mips-n64-linux.xml
deleted file mode 100644
index 0a81573..0000000
--- a/share/gdb/syscalls/mips-n64-linux.xml
+++ /dev/null
@@ -1,312 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2011-2014 Free Software Foundation, Inc.
-
-     Copying and distribution of this file, with or without modification,
-     are permitted in any medium without royalty provided the copyright
-     notice and this notice are preserved.  -->
-
-<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
-
-<!-- This file was generated using the following file:
-     
-     /usr/src/linux/arch/mips/include/asm/unistd.h
-
-     The file mentioned above belongs to the Linux Kernel.  -->
-
-<syscalls_info>
-  <syscall name="read" number="5000"/>
-  <syscall name="write" number="5001"/>
-  <syscall name="open" number="5002"/>
-  <syscall name="close" number="5003"/>
-  <syscall name="stat" number="5004"/>
-  <syscall name="fstat" number="5005"/>
-  <syscall name="lstat" number="5006"/>
-  <syscall name="poll" number="5007"/>
-  <syscall name="lseek" number="5008"/>
-  <syscall name="mmap" number="5009"/>
-  <syscall name="mprotect" number="5010"/>
-  <syscall name="munmap" number="5011"/>
-  <syscall name="brk" number="5012"/>
-  <syscall name="rt_sigaction" number="5013"/>
-  <syscall name="rt_sigprocmask" number="5014"/>
-  <syscall name="ioctl" number="5015"/>
-  <syscall name="pread64" number="5016"/>
-  <syscall name="pwrite64" number="5017"/>
-  <syscall name="readv" number="5018"/>
-  <syscall name="writev" number="5019"/>
-  <syscall name="access" number="5020"/>
-  <syscall name="pipe" number="5021"/>
-  <syscall name="_newselect" number="5022"/>
-  <syscall name="sched_yield" number="5023"/>
-  <syscall name="mremap" number="5024"/>
-  <syscall name="msync" number="5025"/>
-  <syscall name="mincore" number="5026"/>
-  <syscall name="madvise" number="5027"/>
-  <syscall name="shmget" number="5028"/>
-  <syscall name="shmat" number="5029"/>
-  <syscall name="shmctl" number="5030"/>
-  <syscall name="dup" number="5031"/>
-  <syscall name="dup2" number="5032"/>
-  <syscall name="pause" number="5033"/>
-  <syscall name="nanosleep" number="5034"/>
-  <syscall name="getitimer" number="5035"/>
-  <syscall name="setitimer" number="5036"/>
-  <syscall name="alarm" number="5037"/>
-  <syscall name="getpid" number="5038"/>
-  <syscall name="sendfile" number="5039"/>
-  <syscall name="socket" number="5040"/>
-  <syscall name="connect" number="5041"/>
-  <syscall name="accept" number="5042"/>
-  <syscall name="sendto" number="5043"/>
-  <syscall name="recvfrom" number="5044"/>
-  <syscall name="sendmsg" number="5045"/>
-  <syscall name="recvmsg" number="5046"/>
-  <syscall name="shutdown" number="5047"/>
-  <syscall name="bind" number="5048"/>
-  <syscall name="listen" number="5049"/>
-  <syscall name="getsockname" number="5050"/>
-  <syscall name="getpeername" number="5051"/>
-  <syscall name="socketpair" number="5052"/>
-  <syscall name="setsockopt" number="5053"/>
-  <syscall name="getsockopt" number="5054"/>
-  <syscall name="clone" number="5055"/>
-  <syscall name="fork" number="5056"/>
-  <syscall name="execve" number="5057"/>
-  <syscall name="exit" number="5058"/>
-  <syscall name="wait4" number="5059"/>
-  <syscall name="kill" number="5060"/>
-  <syscall name="uname" number="5061"/>
-  <syscall name="semget" number="5062"/>
-  <syscall name="semop" number="5063"/>
-  <syscall name="semctl" number="5064"/>
-  <syscall name="shmdt" number="5065"/>
-  <syscall name="msgget" number="5066"/>
-  <syscall name="msgsnd" number="5067"/>
-  <syscall name="msgrcv" number="5068"/>
-  <syscall name="msgctl" number="5069"/>
-  <syscall name="fcntl" number="5070"/>
-  <syscall name="flock" number="5071"/>
-  <syscall name="fsync" number="5072"/>
-  <syscall name="fdatasync" number="5073"/>
-  <syscall name="truncate" number="5074"/>
-  <syscall name="ftruncate" number="5075"/>
-  <syscall name="getdents" number="5076"/>
-  <syscall name="getcwd" number="5077"/>
-  <syscall name="chdir" number="5078"/>
-  <syscall name="fchdir" number="5079"/>
-  <syscall name="rename" number="5080"/>
-  <syscall name="mkdir" number="5081"/>
-  <syscall name="rmdir" number="5082"/>
-  <syscall name="creat" number="5083"/>
-  <syscall name="link" number="5084"/>
-  <syscall name="unlink" number="5085"/>
-  <syscall name="symlink" number="5086"/>
-  <syscall name="readlink" number="5087"/>
-  <syscall name="chmod" number="5088"/>
-  <syscall name="fchmod" number="5089"/>
-  <syscall name="chown" number="5090"/>
-  <syscall name="fchown" number="5091"/>
-  <syscall name="lchown" number="5092"/>
-  <syscall name="umask" number="5093"/>
-  <syscall name="gettimeofday" number="5094"/>
-  <syscall name="getrlimit" number="5095"/>
-  <syscall name="getrusage" number="5096"/>
-  <syscall name="sysinfo" number="5097"/>
-  <syscall name="times" number="5098"/>
-  <syscall name="ptrace" number="5099"/>
-  <syscall name="getuid" number="5100"/>
-  <syscall name="syslog" number="5101"/>
-  <syscall name="getgid" number="5102"/>
-  <syscall name="setuid" number="5103"/>
-  <syscall name="setgid" number="5104"/>
-  <syscall name="geteuid" number="5105"/>
-  <syscall name="getegid" number="5106"/>
-  <syscall name="setpgid" number="5107"/>
-  <syscall name="getppid" number="5108"/>
-  <syscall name="getpgrp" number="5109"/>
-  <syscall name="setsid" number="5110"/>
-  <syscall name="setreuid" number="5111"/>
-  <syscall name="setregid" number="5112"/>
-  <syscall name="getgroups" number="5113"/>
-  <syscall name="setgroups" number="5114"/>
-  <syscall name="setresuid" number="5115"/>
-  <syscall name="getresuid" number="5116"/>
-  <syscall name="setresgid" number="5117"/>
-  <syscall name="getresgid" number="5118"/>
-  <syscall name="getpgid" number="5119"/>
-  <syscall name="setfsuid" number="5120"/>
-  <syscall name="setfsgid" number="5121"/>
-  <syscall name="getsid" number="5122"/>
-  <syscall name="capget" number="5123"/>
-  <syscall name="capset" number="5124"/>
-  <syscall name="rt_sigpending" number="5125"/>
-  <syscall name="rt_sigtimedwait" number="5126"/>
-  <syscall name="rt_sigqueueinfo" number="5127"/>
-  <syscall name="rt_sigsuspend" number="5128"/>
-  <syscall name="sigaltstack" number="5129"/>
-  <syscall name="utime" number="5130"/>
-  <syscall name="mknod" number="5131"/>
-  <syscall name="personality" number="5132"/>
-  <syscall name="ustat" number="5133"/>
-  <syscall name="statfs" number="5134"/>
-  <syscall name="fstatfs" number="5135"/>
-  <syscall name="sysfs" number="5136"/>
-  <syscall name="getpriority" number="5137"/>
-  <syscall name="setpriority" number="5138"/>
-  <syscall name="sched_setparam" number="5139"/>
-  <syscall name="sched_getparam" number="5140"/>
-  <syscall name="sched_setscheduler" number="5141"/>
-  <syscall name="sched_getscheduler" number="5142"/>
-  <syscall name="sched_get_priority_max" number="5143"/>
-  <syscall name="sched_get_priority_min" number="5144"/>
-  <syscall name="sched_rr_get_interval" number="5145"/>
-  <syscall name="mlock" number="5146"/>
-  <syscall name="munlock" number="5147"/>
-  <syscall name="mlockall" number="5148"/>
-  <syscall name="munlockall" number="5149"/>
-  <syscall name="vhangup" number="5150"/>
-  <syscall name="pivot_root" number="5151"/>
-  <syscall name="_sysctl" number="5152"/>
-  <syscall name="prctl" number="5153"/>
-  <syscall name="adjtimex" number="5154"/>
-  <syscall name="setrlimit" number="5155"/>
-  <syscall name="chroot" number="5156"/>
-  <syscall name="sync" number="5157"/>
-  <syscall name="acct" number="5158"/>
-  <syscall name="settimeofday" number="5159"/>
-  <syscall name="mount" number="5160"/>
-  <syscall name="umount2" number="5161"/>
-  <syscall name="swapon" number="5162"/>
-  <syscall name="swapoff" number="5163"/>
-  <syscall name="reboot" number="5164"/>
-  <syscall name="sethostname" number="5165"/>
-  <syscall name="setdomainname" number="5166"/>
-  <syscall name="create_module" number="5167"/>
-  <syscall name="init_module" number="5168"/>
-  <syscall name="delete_module" number="5169"/>
-  <syscall name="get_kernel_syms" number="5170"/>
-  <syscall name="query_module" number="5171"/>
-  <syscall name="quotactl" number="5172"/>
-  <syscall name="nfsservctl" number="5173"/>
-  <syscall name="getpmsg" number="5174"/>
-  <syscall name="putpmsg" number="5175"/>
-  <syscall name="afs_syscall" number="5176"/>
-  <syscall name="gettid" number="5178"/>
-  <syscall name="readahead" number="5179"/>
-  <syscall name="setxattr" number="5180"/>
-  <syscall name="lsetxattr" number="5181"/>
-  <syscall name="fsetxattr" number="5182"/>
-  <syscall name="getxattr" number="5183"/>
-  <syscall name="lgetxattr" number="5184"/>
-  <syscall name="fgetxattr" number="5185"/>
-  <syscall name="listxattr" number="5186"/>
-  <syscall name="llistxattr" number="5187"/>
-  <syscall name="flistxattr" number="5188"/>
-  <syscall name="removexattr" number="5189"/>
-  <syscall name="lremovexattr" number="5190"/>
-  <syscall name="fremovexattr" number="5191"/>
-  <syscall name="tkill" number="5192"/>
-  <syscall name="futex" number="5194"/>
-  <syscall name="sched_setaffinity" number="5195"/>
-  <syscall name="sched_getaffinity" number="5196"/>
-  <syscall name="cacheflush" number="5197"/>
-  <syscall name="cachectl" number="5198"/>
-  <syscall name="sysmips" number="5199"/>
-  <syscall name="io_setup" number="5200"/>
-  <syscall name="io_destroy" number="5201"/>
-  <syscall name="io_getevents" number="5202"/>
-  <syscall name="io_submit" number="5203"/>
-  <syscall name="io_cancel" number="5204"/>
-  <syscall name="exit_group" number="5205"/>
-  <syscall name="lookup_dcookie" number="5206"/>
-  <syscall name="epoll_create" number="5207"/>
-  <syscall name="epoll_ctl" number="5208"/>
-  <syscall name="epoll_wait" number="5209"/>
-  <syscall name="remap_file_pages" number="5210"/>
-  <syscall name="rt_sigreturn" number="5211"/>
-  <syscall name="set_tid_address" number="5212"/>
-  <syscall name="restart_syscall" number="5213"/>
-  <syscall name="semtimedop" number="5214"/>
-  <syscall name="fadvise64" number="5215"/>
-  <syscall name="timer_create" number="5216"/>
-  <syscall name="timer_settime" number="5217"/>
-  <syscall name="timer_gettime" number="5218"/>
-  <syscall name="timer_getoverrun" number="5219"/>
-  <syscall name="timer_delete" number="5220"/>
-  <syscall name="clock_settime" number="5221"/>
-  <syscall name="clock_gettime" number="5222"/>
-  <syscall name="clock_getres" number="5223"/>
-  <syscall name="clock_nanosleep" number="5224"/>
-  <syscall name="tgkill" number="5225"/>
-  <syscall name="utimes" number="5226"/>
-  <syscall name="mbind" number="5227"/>
-  <syscall name="get_mempolicy" number="5228"/>
-  <syscall name="set_mempolicy" number="5229"/>
-  <syscall name="mq_open" number="5230"/>
-  <syscall name="mq_unlink" number="5231"/>
-  <syscall name="mq_timedsend" number="5232"/>
-  <syscall name="mq_timedreceive" number="5233"/>
-  <syscall name="mq_notify" number="5234"/>
-  <syscall name="mq_getsetattr" number="5235"/>
-  <syscall name="vserver" number="5236"/>
-  <syscall name="waitid" number="5237"/>
-  <syscall name="add_key" number="5239"/>
-  <syscall name="request_key" number="5240"/>
-  <syscall name="keyctl" number="5241"/>
-  <syscall name="set_thread_area" number="5242"/>
-  <syscall name="inotify_init" number="5243"/>
-  <syscall name="inotify_add_watch" number="5244"/>
-  <syscall name="inotify_rm_watch" number="5245"/>
-  <syscall name="migrate_pages" number="5246"/>
-  <syscall name="openat" number="5247"/>
-  <syscall name="mkdirat" number="5248"/>
-  <syscall name="mknodat" number="5249"/>
-  <syscall name="fchownat" number="5250"/>
-  <syscall name="futimesat" number="5251"/>
-  <syscall name="newfstatat" number="5252"/>
-  <syscall name="unlinkat" number="5253"/>
-  <syscall name="renameat" number="5254"/>
-  <syscall name="linkat" number="5255"/>
-  <syscall name="symlinkat" number="5256"/>
-  <syscall name="readlinkat" number="5257"/>
-  <syscall name="fchmodat" number="5258"/>
-  <syscall name="faccessat" number="5259"/>
-  <syscall name="pselect6" number="5260"/>
-  <syscall name="ppoll" number="5261"/>
-  <syscall name="unshare" number="5262"/>
-  <syscall name="splice" number="5263"/>
-  <syscall name="sync_file_range" number="5264"/>
-  <syscall name="tee" number="5265"/>
-  <syscall name="vmsplice" number="5266"/>
-  <syscall name="move_pages" number="5267"/>
-  <syscall name="set_robust_list" number="5268"/>
-  <syscall name="get_robust_list" number="5269"/>
-  <syscall name="kexec_load" number="5270"/>
-  <syscall name="getcpu" number="5271"/>
-  <syscall name="epoll_pwait" number="5272"/>
-  <syscall name="ioprio_set" number="5273"/>
-  <syscall name="ioprio_get" number="5274"/>
-  <syscall name="utimensat" number="5275"/>
-  <syscall name="signalfd" number="5276"/>
-  <syscall name="timerfd" number="5277"/>
-  <syscall name="eventfd" number="5278"/>
-  <syscall name="fallocate" number="5279"/>
-  <syscall name="timerfd_create" number="5280"/>
-  <syscall name="timerfd_gettime" number="5281"/>
-  <syscall name="timerfd_settime" number="5282"/>
-  <syscall name="signalfd4" number="5283"/>
-  <syscall name="eventfd2" number="5284"/>
-  <syscall name="epoll_create1" number="5285"/>
-  <syscall name="dup3" number="5286"/>
-  <syscall name="pipe2" number="5287"/>
-  <syscall name="inotify_init1" number="5288"/>
-  <syscall name="preadv" number="5289"/>
-  <syscall name="pwritev" number="5290"/>
-  <syscall name="rt_tgsigqueueinfo" number="5291"/>
-  <syscall name="perf_event_open" number="5292"/>
-  <syscall name="accept4" number="5293"/>
-  <syscall name="recvmmsg" number="5294"/>
-  <syscall name="fanotify_init" number="5295"/>
-  <syscall name="fanotify_mark" number="5296"/>
-  <syscall name="prlimit64" number="5297"/>
-</syscalls_info>
diff --git a/share/gdb/syscalls/mips-o32-linux.xml b/share/gdb/syscalls/mips-o32-linux.xml
deleted file mode 100644
index 97641b6..0000000
--- a/share/gdb/syscalls/mips-o32-linux.xml
+++ /dev/null
@@ -1,347 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2011-2014 Free Software Foundation, Inc.
-
-     Copying and distribution of this file, with or without modification,
-     are permitted in any medium without royalty provided the copyright
-     notice and this notice are preserved.  -->
-
-<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
-
-<!-- This file was generated using the following file:
-     
-     /usr/src/linux/arch/mips/include/asm/unistd.h
-
-     The file mentioned above belongs to the Linux Kernel.  -->
-
-<syscalls_info>
-  <syscall name="syscall" number="4000"/>
-  <syscall name="exit" number="4001"/>
-  <syscall name="fork" number="4002"/>
-  <syscall name="read" number="4003"/>
-  <syscall name="write" number="4004"/>
-  <syscall name="open" number="4005"/>
-  <syscall name="close" number="4006"/>
-  <syscall name="waitpid" number="4007"/>
-  <syscall name="creat" number="4008"/>
-  <syscall name="link" number="4009"/>
-  <syscall name="unlink" number="4010"/>
-  <syscall name="execve" number="4011"/>
-  <syscall name="chdir" number="4012"/>
-  <syscall name="time" number="4013"/>
-  <syscall name="mknod" number="4014"/>
-  <syscall name="chmod" number="4015"/>
-  <syscall name="lchown" number="4016"/>
-  <syscall name="break" number="4017"/>
-  <syscall name="lseek" number="4019"/>
-  <syscall name="getpid" number="4020"/>
-  <syscall name="mount" number="4021"/>
-  <syscall name="umount" number="4022"/>
-  <syscall name="setuid" number="4023"/>
-  <syscall name="getuid" number="4024"/>
-  <syscall name="stime" number="4025"/>
-  <syscall name="ptrace" number="4026"/>
-  <syscall name="alarm" number="4027"/>
-  <syscall name="pause" number="4029"/>
-  <syscall name="utime" number="4030"/>
-  <syscall name="stty" number="4031"/>
-  <syscall name="gtty" number="4032"/>
-  <syscall name="access" number="4033"/>
-  <syscall name="nice" number="4034"/>
-  <syscall name="ftime" number="4035"/>
-  <syscall name="sync" number="4036"/>
-  <syscall name="kill" number="4037"/>
-  <syscall name="rename" number="4038"/>
-  <syscall name="mkdir" number="4039"/>
-  <syscall name="rmdir" number="4040"/>
-  <syscall name="dup" number="4041"/>
-  <syscall name="pipe" number="4042"/>
-  <syscall name="times" number="4043"/>
-  <syscall name="prof" number="4044"/>
-  <syscall name="brk" number="4045"/>
-  <syscall name="setgid" number="4046"/>
-  <syscall name="getgid" number="4047"/>
-  <syscall name="signal" number="4048"/>
-  <syscall name="geteuid" number="4049"/>
-  <syscall name="getegid" number="4050"/>
-  <syscall name="acct" number="4051"/>
-  <syscall name="umount2" number="4052"/>
-  <syscall name="lock" number="4053"/>
-  <syscall name="ioctl" number="4054"/>
-  <syscall name="fcntl" number="4055"/>
-  <syscall name="mpx" number="4056"/>
-  <syscall name="setpgid" number="4057"/>
-  <syscall name="ulimit" number="4058"/>
-  <syscall name="umask" number="4060"/>
-  <syscall name="chroot" number="4061"/>
-  <syscall name="ustat" number="4062"/>
-  <syscall name="dup2" number="4063"/>
-  <syscall name="getppid" number="4064"/>
-  <syscall name="getpgrp" number="4065"/>
-  <syscall name="setsid" number="4066"/>
-  <syscall name="sigaction" number="4067"/>
-  <syscall name="sgetmask" number="4068"/>
-  <syscall name="ssetmask" number="4069"/>
-  <syscall name="setreuid" number="4070"/>
-  <syscall name="setregid" number="4071"/>
-  <syscall name="sigsuspend" number="4072"/>
-  <syscall name="sigpending" number="4073"/>
-  <syscall name="sethostname" number="4074"/>
-  <syscall name="setrlimit" number="4075"/>
-  <syscall name="getrlimit" number="4076"/>
-  <syscall name="getrusage" number="4077"/>
-  <syscall name="gettimeofday" number="4078"/>
-  <syscall name="settimeofday" number="4079"/>
-  <syscall name="getgroups" number="4080"/>
-  <syscall name="setgroups" number="4081"/>
-  <syscall name="symlink" number="4083"/>
-  <syscall name="readlink" number="4085"/>
-  <syscall name="uselib" number="4086"/>
-  <syscall name="swapon" number="4087"/>
-  <syscall name="reboot" number="4088"/>
-  <syscall name="readdir" number="4089"/>
-  <syscall name="mmap" number="4090"/>
-  <syscall name="munmap" number="4091"/>
-  <syscall name="truncate" number="4092"/>
-  <syscall name="ftruncate" number="4093"/>
-  <syscall name="fchmod" number="4094"/>
-  <syscall name="fchown" number="4095"/>
-  <syscall name="getpriority" number="4096"/>
-  <syscall name="setpriority" number="4097"/>
-  <syscall name="profil" number="4098"/>
-  <syscall name="statfs" number="4099"/>
-  <syscall name="fstatfs" number="4100"/>
-  <syscall name="ioperm" number="4101"/>
-  <syscall name="socketcall" number="4102"/>
-  <syscall name="syslog" number="4103"/>
-  <syscall name="setitimer" number="4104"/>
-  <syscall name="getitimer" number="4105"/>
-  <syscall name="stat" number="4106"/>
-  <syscall name="lstat" number="4107"/>
-  <syscall name="fstat" number="4108"/>
-  <syscall name="iopl" number="4110"/>
-  <syscall name="vhangup" number="4111"/>
-  <syscall name="idle" number="4112"/>
-  <syscall name="vm86" number="4113"/>
-  <syscall name="wait4" number="4114"/>
-  <syscall name="swapoff" number="4115"/>
-  <syscall name="sysinfo" number="4116"/>
-  <syscall name="ipc" number="4117"/>
-  <syscall name="fsync" number="4118"/>
-  <syscall name="sigreturn" number="4119"/>
-  <syscall name="clone" number="4120"/>
-  <syscall name="setdomainname" number="4121"/>
-  <syscall name="uname" number="4122"/>
-  <syscall name="modify_ldt" number="4123"/>
-  <syscall name="adjtimex" number="4124"/>
-  <syscall name="mprotect" number="4125"/>
-  <syscall name="sigprocmask" number="4126"/>
-  <syscall name="create_module" number="4127"/>
-  <syscall name="init_module" number="4128"/>
-  <syscall name="delete_module" number="4129"/>
-  <syscall name="get_kernel_syms" number="4130"/>
-  <syscall name="quotactl" number="4131"/>
-  <syscall name="getpgid" number="4132"/>
-  <syscall name="fchdir" number="4133"/>
-  <syscall name="bdflush" number="4134"/>
-  <syscall name="sysfs" number="4135"/>
-  <syscall name="personality" number="4136"/>
-  <syscall name="afs_syscall" number="4137"/>
-  <syscall name="setfsuid" number="4138"/>
-  <syscall name="setfsgid" number="4139"/>
-  <syscall name="_llseek" number="4140"/>
-  <syscall name="getdents" number="4141"/>
-  <syscall name="_newselect" number="4142"/>
-  <syscall name="flock" number="4143"/>
-  <syscall name="msync" number="4144"/>
-  <syscall name="readv" number="4145"/>
-  <syscall name="writev" number="4146"/>
-  <syscall name="cacheflush" number="4147"/>
-  <syscall name="cachectl" number="4148"/>
-  <syscall name="sysmips" number="4149"/>
-  <syscall name="getsid" number="4151"/>
-  <syscall name="fdatasync" number="4152"/>
-  <syscall name="_sysctl" number="4153"/>
-  <syscall name="mlock" number="4154"/>
-  <syscall name="munlock" number="4155"/>
-  <syscall name="mlockall" number="4156"/>
-  <syscall name="munlockall" number="4157"/>
-  <syscall name="sched_setparam" number="4158"/>
-  <syscall name="sched_getparam" number="4159"/>
-  <syscall name="sched_setscheduler" number="4160"/>
-  <syscall name="sched_getscheduler" number="4161"/>
-  <syscall name="sched_yield" number="4162"/>
-  <syscall name="sched_get_priority_max" number="4163"/>
-  <syscall name="sched_get_priority_min" number="4164"/>
-  <syscall name="sched_rr_get_interval" number="4165"/>
-  <syscall name="nanosleep" number="4166"/>
-  <syscall name="mremap" number="4167"/>
-  <syscall name="accept" number="4168"/>
-  <syscall name="bind" number="4169"/>
-  <syscall name="connect" number="4170"/>
-  <syscall name="getpeername" number="4171"/>
-  <syscall name="getsockname" number="4172"/>
-  <syscall name="getsockopt" number="4173"/>
-  <syscall name="listen" number="4174"/>
-  <syscall name="recv" number="4175"/>
-  <syscall name="recvfrom" number="4176"/>
-  <syscall name="recvmsg" number="4177"/>
-  <syscall name="send" number="4178"/>
-  <syscall name="sendmsg" number="4179"/>
-  <syscall name="sendto" number="4180"/>
-  <syscall name="setsockopt" number="4181"/>
-  <syscall name="shutdown" number="4182"/>
-  <syscall name="socket" number="4183"/>
-  <syscall name="socketpair" number="4184"/>
-  <syscall name="setresuid" number="4185"/>
-  <syscall name="getresuid" number="4186"/>
-  <syscall name="query_module" number="4187"/>
-  <syscall name="poll" number="4188"/>
-  <syscall name="nfsservctl" number="4189"/>
-  <syscall name="setresgid" number="4190"/>
-  <syscall name="getresgid" number="4191"/>
-  <syscall name="prctl" number="4192"/>
-  <syscall name="rt_sigreturn" number="4193"/>
-  <syscall name="rt_sigaction" number="4194"/>
-  <syscall name="rt_sigprocmask" number="4195"/>
-  <syscall name="rt_sigpending" number="4196"/>
-  <syscall name="rt_sigtimedwait" number="4197"/>
-  <syscall name="rt_sigqueueinfo" number="4198"/>
-  <syscall name="rt_sigsuspend" number="4199"/>
-  <syscall name="pread64" number="4200"/>
-  <syscall name="pwrite64" number="4201"/>
-  <syscall name="chown" number="4202"/>
-  <syscall name="getcwd" number="4203"/>
-  <syscall name="capget" number="4204"/>
-  <syscall name="capset" number="4205"/>
-  <syscall name="sigaltstack" number="4206"/>
-  <syscall name="sendfile" number="4207"/>
-  <syscall name="getpmsg" number="4208"/>
-  <syscall name="putpmsg" number="4209"/>
-  <syscall name="mmap2" number="4210"/>
-  <syscall name="truncate64" number="4211"/>
-  <syscall name="ftruncate64" number="4212"/>
-  <syscall name="stat64" number="4213"/>
-  <syscall name="lstat64" number="4214"/>
-  <syscall name="fstat64" number="4215"/>
-  <syscall name="pivot_root" number="4216"/>
-  <syscall name="mincore" number="4217"/>
-  <syscall name="madvise" number="4218"/>
-  <syscall name="getdents64" number="4219"/>
-  <syscall name="fcntl64" number="4220"/>
-  <syscall name="gettid" number="4222"/>
-  <syscall name="readahead" number="4223"/>
-  <syscall name="setxattr" number="4224"/>
-  <syscall name="lsetxattr" number="4225"/>
-  <syscall name="fsetxattr" number="4226"/>
-  <syscall name="getxattr" number="4227"/>
-  <syscall name="lgetxattr" number="4228"/>
-  <syscall name="fgetxattr" number="4229"/>
-  <syscall name="listxattr" number="4230"/>
-  <syscall name="llistxattr" number="4231"/>
-  <syscall name="flistxattr" number="4232"/>
-  <syscall name="removexattr" number="4233"/>
-  <syscall name="lremovexattr" number="4234"/>
-  <syscall name="fremovexattr" number="4235"/>
-  <syscall name="tkill" number="4236"/>
-  <syscall name="sendfile64" number="4237"/>
-  <syscall name="futex" number="4238"/>
-  <syscall name="sched_setaffinity" number="4239"/>
-  <syscall name="sched_getaffinity" number="4240"/>
-  <syscall name="io_setup" number="4241"/>
-  <syscall name="io_destroy" number="4242"/>
-  <syscall name="io_getevents" number="4243"/>
-  <syscall name="io_submit" number="4244"/>
-  <syscall name="io_cancel" number="4245"/>
-  <syscall name="exit_group" number="4246"/>
-  <syscall name="lookup_dcookie" number="4247"/>
-  <syscall name="epoll_create" number="4248"/>
-  <syscall name="epoll_ctl" number="4249"/>
-  <syscall name="epoll_wait" number="4250"/>
-  <syscall name="remap_file_pages" number="4251"/>
-  <syscall name="set_tid_address" number="4252"/>
-  <syscall name="restart_syscall" number="4253"/>
-  <syscall name="fadvise64" number="4254"/>
-  <syscall name="statfs64" number="4255"/>
-  <syscall name="fstatfs64" number="4256"/>
-  <syscall name="timer_create" number="4257"/>
-  <syscall name="timer_settime" number="4258"/>
-  <syscall name="timer_gettime" number="4259"/>
-  <syscall name="timer_getoverrun" number="4260"/>
-  <syscall name="timer_delete" number="4261"/>
-  <syscall name="clock_settime" number="4262"/>
-  <syscall name="clock_gettime" number="4263"/>
-  <syscall name="clock_getres" number="4264"/>
-  <syscall name="clock_nanosleep" number="4265"/>
-  <syscall name="tgkill" number="4266"/>
-  <syscall name="utimes" number="4267"/>
-  <syscall name="mbind" number="4268"/>
-  <syscall name="get_mempolicy" number="4269"/>
-  <syscall name="set_mempolicy" number="4270"/>
-  <syscall name="mq_open" number="4271"/>
-  <syscall name="mq_unlink" number="4272"/>
-  <syscall name="mq_timedsend" number="4273"/>
-  <syscall name="mq_timedreceive" number="4274"/>
-  <syscall name="mq_notify" number="4275"/>
-  <syscall name="mq_getsetattr" number="4276"/>
-  <syscall name="vserver" number="4277"/>
-  <syscall name="waitid" number="4278"/>
-  <syscall name="add_key" number="4280"/>
-  <syscall name="request_key" number="4281"/>
-  <syscall name="keyctl" number="4282"/>
-  <syscall name="set_thread_area" number="4283"/>
-  <syscall name="inotify_init" number="4284"/>
-  <syscall name="inotify_add_watch" number="4285"/>
-  <syscall name="inotify_rm_watch" number="4286"/>
-  <syscall name="migrate_pages" number="4287"/>
-  <syscall name="openat" number="4288"/>
-  <syscall name="mkdirat" number="4289"/>
-  <syscall name="mknodat" number="4290"/>
-  <syscall name="fchownat" number="4291"/>
-  <syscall name="futimesat" number="4292"/>
-  <syscall name="fstatat64" number="4293"/>
-  <syscall name="unlinkat" number="4294"/>
-  <syscall name="renameat" number="4295"/>
-  <syscall name="linkat" number="4296"/>
-  <syscall name="symlinkat" number="4297"/>
-  <syscall name="readlinkat" number="4298"/>
-  <syscall name="fchmodat" number="4299"/>
-  <syscall name="faccessat" number="4300"/>
-  <syscall name="pselect6" number="4301"/>
-  <syscall name="ppoll" number="4302"/>
-  <syscall name="unshare" number="4303"/>
-  <syscall name="splice" number="4304"/>
-  <syscall name="sync_file_range" number="4305"/>
-  <syscall name="tee" number="4306"/>
-  <syscall name="vmsplice" number="4307"/>
-  <syscall name="move_pages" number="4308"/>
-  <syscall name="set_robust_list" number="4309"/>
-  <syscall name="get_robust_list" number="4310"/>
-  <syscall name="kexec_load" number="4311"/>
-  <syscall name="getcpu" number="4312"/>
-  <syscall name="epoll_pwait" number="4313"/>
-  <syscall name="ioprio_set" number="4314"/>
-  <syscall name="ioprio_get" number="4315"/>
-  <syscall name="utimensat" number="4316"/>
-  <syscall name="signalfd" number="4317"/>
-  <syscall name="timerfd" number="4318"/>
-  <syscall name="eventfd" number="4319"/>
-  <syscall name="fallocate" number="4320"/>
-  <syscall name="timerfd_create" number="4321"/>
-  <syscall name="timerfd_gettime" number="4322"/>
-  <syscall name="timerfd_settime" number="4323"/>
-  <syscall name="signalfd4" number="4324"/>
-  <syscall name="eventfd2" number="4325"/>
-  <syscall name="epoll_create1" number="4326"/>
-  <syscall name="dup3" number="4327"/>
-  <syscall name="pipe2" number="4328"/>
-  <syscall name="inotify_init1" number="4329"/>
-  <syscall name="preadv" number="4330"/>
-  <syscall name="pwritev" number="4331"/>
-  <syscall name="rt_tgsigqueueinfo" number="4332"/>
-  <syscall name="perf_event_open" number="4333"/>
-  <syscall name="accept4" number="4334"/>
-  <syscall name="recvmmsg" number="4335"/>
-  <syscall name="fanotify_init" number="4336"/>
-  <syscall name="fanotify_mark" number="4337"/>
-  <syscall name="prlimit64" number="4338"/>
-</syscalls_info>
diff --git a/share/gdb/syscalls/ppc-linux.xml b/share/gdb/syscalls/ppc-linux.xml
deleted file mode 100644
index b25d08c..0000000
--- a/share/gdb/syscalls/ppc-linux.xml
+++ /dev/null
@@ -1,310 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2009-2014 Free Software Foundation, Inc.
-
-     Copying and distribution of this file, with or without modification,
-     are permitted in any medium without royalty provided the copyright
-     notice and this notice are preserved.  -->
-
-<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
-
-<!-- This file was generated using the following file:
-     
-     /usr/src/linux/arch/powerpc/include/asm/unistd.h
-
-     The file mentioned above belongs to the Linux Kernel.  -->
-
-<syscalls_info>
-  <syscall name="restart_syscall" number="0"/>
-  <syscall name="exit" number="1"/>
-  <syscall name="fork" number="2"/>
-  <syscall name="read" number="3"/>
-  <syscall name="write" number="4"/>
-  <syscall name="open" number="5"/>
-  <syscall name="close" number="6"/>
-  <syscall name="waitpid" number="7"/>
-  <syscall name="creat" number="8"/>
-  <syscall name="link" number="9"/>
-  <syscall name="unlink" number="10"/>
-  <syscall name="execve" number="11"/>
-  <syscall name="chdir" number="12"/>
-  <syscall name="time" number="13"/>
-  <syscall name="mknod" number="14"/>
-  <syscall name="chmod" number="15"/>
-  <syscall name="lchown" number="16"/>
-  <syscall name="break" number="17"/>
-  <syscall name="oldstat" number="18"/>
-  <syscall name="lseek" number="19"/>
-  <syscall name="getpid" number="20"/>
-  <syscall name="mount" number="21"/>
-  <syscall name="umount" number="22"/>
-  <syscall name="setuid" number="23"/>
-  <syscall name="getuid" number="24"/>
-  <syscall name="stime" number="25"/>
-  <syscall name="ptrace" number="26"/>
-  <syscall name="alarm" number="27"/>
-  <syscall name="oldfstat" number="28"/>
-  <syscall name="pause" number="29"/>
-  <syscall name="utime" number="30"/>
-  <syscall name="stty" number="31"/>
-  <syscall name="gtty" number="32"/>
-  <syscall name="access" number="33"/>
-  <syscall name="nice" number="34"/>
-  <syscall name="ftime" number="35"/>
-  <syscall name="sync" number="36"/>
-  <syscall name="kill" number="37"/>
-  <syscall name="rename" number="38"/>
-  <syscall name="mkdir" number="39"/>
-  <syscall name="rmdir" number="40"/>
-  <syscall name="dup" number="41"/>
-  <syscall name="pipe" number="42"/>
-  <syscall name="times" number="43"/>
-  <syscall name="prof" number="44"/>
-  <syscall name="brk" number="45"/>
-  <syscall name="setgid" number="46"/>
-  <syscall name="getgid" number="47"/>
-  <syscall name="signal" number="48"/>
-  <syscall name="geteuid" number="49"/>
-  <syscall name="getegid" number="50"/>
-  <syscall name="acct" number="51"/>
-  <syscall name="umount2" number="52"/>
-  <syscall name="lock" number="53"/>
-  <syscall name="ioctl" number="54"/>
-  <syscall name="fcntl" number="55"/>
-  <syscall name="mpx" number="56"/>
-  <syscall name="setpgid" number="57"/>
-  <syscall name="ulimit" number="58"/>
-  <syscall name="oldolduname" number="59"/>
-  <syscall name="umask" number="60"/>
-  <syscall name="chroot" number="61"/>
-  <syscall name="ustat" number="62"/>
-  <syscall name="dup2" number="63"/>
-  <syscall name="getppid" number="64"/>
-  <syscall name="getpgrp" number="65"/>
-  <syscall name="setsid" number="66"/>
-  <syscall name="sigaction" number="67"/>
-  <syscall name="sgetmask" number="68"/>
-  <syscall name="ssetmask" number="69"/>
-  <syscall name="setreuid" number="70"/>
-  <syscall name="setregid" number="71"/>
-  <syscall name="sigsuspend" number="72"/>
-  <syscall name="sigpending" number="73"/>
-  <syscall name="sethostname" number="74"/>
-  <syscall name="setrlimit" number="75"/>
-  <syscall name="getrlimit" number="76"/>
-  <syscall name="getrusage" number="77"/>
-  <syscall name="gettimeofday" number="78"/>
-  <syscall name="settimeofday" number="79"/>
-  <syscall name="getgroups" number="80"/>
-  <syscall name="setgroups" number="81"/>
-  <syscall name="select" number="82"/>
-  <syscall name="symlink" number="83"/>
-  <syscall name="oldlstat" number="84"/>
-  <syscall name="readlink" number="85"/>
-  <syscall name="uselib" number="86"/>
-  <syscall name="swapon" number="87"/>
-  <syscall name="reboot" number="88"/>
-  <syscall name="readdir" number="89"/>
-  <syscall name="mmap" number="90"/>
-  <syscall name="munmap" number="91"/>
-  <syscall name="truncate" number="92"/>
-  <syscall name="ftruncate" number="93"/>
-  <syscall name="fchmod" number="94"/>
-  <syscall name="fchown" number="95"/>
-  <syscall name="getpriority" number="96"/>
-  <syscall name="setpriority" number="97"/>
-  <syscall name="profil" number="98"/>
-  <syscall name="statfs" number="99"/>
-  <syscall name="fstatfs" number="100"/>
-  <syscall name="ioperm" number="101"/>
-  <syscall name="socketcall" number="102"/>
-  <syscall name="syslog" number="103"/>
-  <syscall name="setitimer" number="104"/>
-  <syscall name="getitimer" number="105"/>
-  <syscall name="stat" number="106"/>
-  <syscall name="lstat" number="107"/>
-  <syscall name="fstat" number="108"/>
-  <syscall name="olduname" number="109"/>
-  <syscall name="iopl" number="110"/>
-  <syscall name="vhangup" number="111"/>
-  <syscall name="idle" number="112"/>
-  <syscall name="vm86" number="113"/>
-  <syscall name="wait4" number="114"/>
-  <syscall name="swapoff" number="115"/>
-  <syscall name="sysinfo" number="116"/>
-  <syscall name="ipc" number="117"/>
-  <syscall name="fsync" number="118"/>
-  <syscall name="sigreturn" number="119"/>
-  <syscall name="clone" number="120"/>
-  <syscall name="setdomainname" number="121"/>
-  <syscall name="uname" number="122"/>
-  <syscall name="modify_ldt" number="123"/>
-  <syscall name="adjtimex" number="124"/>
-  <syscall name="mprotect" number="125"/>
-  <syscall name="sigprocmask" number="126"/>
-  <syscall name="create_module" number="127"/>
-  <syscall name="init_module" number="128"/>
-  <syscall name="delete_module" number="129"/>
-  <syscall name="get_kernel_syms" number="130"/>
-  <syscall name="quotactl" number="131"/>
-  <syscall name="getpgid" number="132"/>
-  <syscall name="fchdir" number="133"/>
-  <syscall name="bdflush" number="134"/>
-  <syscall name="sysfs" number="135"/>
-  <syscall name="personality" number="136"/>
-  <syscall name="afs_syscall" number="137"/>
-  <syscall name="setfsuid" number="138"/>
-  <syscall name="setfsgid" number="139"/>
-  <syscall name="_llseek" number="140"/>
-  <syscall name="getdents" number="141"/>
-  <syscall name="_newselect" number="142"/>
-  <syscall name="flock" number="143"/>
-  <syscall name="msync" number="144"/>
-  <syscall name="readv" number="145"/>
-  <syscall name="writev" number="146"/>
-  <syscall name="getsid" number="147"/>
-  <syscall name="fdatasync" number="148"/>
-  <syscall name="_sysctl" number="149"/>
-  <syscall name="mlock" number="150"/>
-  <syscall name="munlock" number="151"/>
-  <syscall name="mlockall" number="152"/>
-  <syscall name="munlockall" number="153"/>
-  <syscall name="sched_setparam" number="154"/>
-  <syscall name="sched_getparam" number="155"/>
-  <syscall name="sched_setscheduler" number="156"/>
-  <syscall name="sched_getscheduler" number="157"/>
-  <syscall name="sched_yield" number="158"/>
-  <syscall name="sched_get_priority_max" number="159"/>
-  <syscall name="sched_get_priority_min" number="160"/>
-  <syscall name="sched_rr_get_interval" number="161"/>
-  <syscall name="nanosleep" number="162"/>
-  <syscall name="mremap" number="163"/>
-  <syscall name="setresuid" number="164"/>
-  <syscall name="getresuid" number="165"/>
-  <syscall name="query_module" number="166"/>
-  <syscall name="poll" number="167"/>
-  <syscall name="nfsservctl" number="168"/>
-  <syscall name="setresgid" number="169"/>
-  <syscall name="getresgid" number="170"/>
-  <syscall name="prctl" number="171"/>
-  <syscall name="rt_sigreturn" number="172"/>
-  <syscall name="rt_sigaction" number="173"/>
-  <syscall name="rt_sigprocmask" number="174"/>
-  <syscall name="rt_sigpending" number="175"/>
-  <syscall name="rt_sigtimedwait" number="176"/>
-  <syscall name="rt_sigqueueinfo" number="177"/>
-  <syscall name="rt_sigsuspend" number="178"/>
-  <syscall name="pread64" number="179"/>
-  <syscall name="pwrite64" number="180"/>
-  <syscall name="chown" number="181"/>
-  <syscall name="getcwd" number="182"/>
-  <syscall name="capget" number="183"/>
-  <syscall name="capset" number="184"/>
-  <syscall name="sigaltstack" number="185"/>
-  <syscall name="sendfile" number="186"/>
-  <syscall name="getpmsg" number="187"/>
-  <syscall name="putpmsg" number="188"/>
-  <syscall name="vfork" number="189"/>
-  <syscall name="ugetrlimit" number="190"/>
-  <syscall name="readahead" number="191"/>
-  <syscall name="mmap2" number="192"/>
-  <syscall name="truncate64" number="193"/>
-  <syscall name="ftruncate64" number="194"/>
-  <syscall name="stat64" number="195"/>
-  <syscall name="lstat64" number="196"/>
-  <syscall name="fstat64" number="197"/>
-  <syscall name="pciconfig_read" number="198"/>
-  <syscall name="pciconfig_write" number="199"/>
-  <syscall name="pciconfig_iobase" number="200"/>
-  <syscall name="multiplexer" number="201"/>
-  <syscall name="getdents64" number="202"/>
-  <syscall name="pivot_root" number="203"/>
-  <syscall name="fcntl64" number="204"/>
-  <syscall name="madvise" number="205"/>
-  <syscall name="mincore" number="206"/>
-  <syscall name="gettid" number="207"/>
-  <syscall name="tkill" number="208"/>
-  <syscall name="setxattr" number="209"/>
-  <syscall name="lsetxattr" number="210"/>
-  <syscall name="fsetxattr" number="211"/>
-  <syscall name="getxattr" number="212"/>
-  <syscall name="lgetxattr" number="213"/>
-  <syscall name="fgetxattr" number="214"/>
-  <syscall name="listxattr" number="215"/>
-  <syscall name="llistxattr" number="216"/>
-  <syscall name="flistxattr" number="217"/>
-  <syscall name="removexattr" number="218"/>
-  <syscall name="lremovexattr" number="219"/>
-  <syscall name="fremovexattr" number="220"/>
-  <syscall name="futex" number="221"/>
-  <syscall name="sched_setaffinity" number="222"/>
-  <syscall name="sched_getaffinity" number="223"/>
-  <syscall name="tuxcall" number="225"/>
-  <syscall name="sendfile64" number="226"/>
-  <syscall name="io_setup" number="227"/>
-  <syscall name="io_destroy" number="228"/>
-  <syscall name="io_getevents" number="229"/>
-  <syscall name="io_submit" number="230"/>
-  <syscall name="io_cancel" number="231"/>
-  <syscall name="set_tid_address" number="232"/>
-  <syscall name="fadvise64" number="233"/>
-  <syscall name="exit_group" number="234"/>
-  <syscall name="lookup_dcookie" number="235"/>
-  <syscall name="epoll_create" number="236"/>
-  <syscall name="epoll_ctl" number="237"/>
-  <syscall name="epoll_wait" number="238"/>
-  <syscall name="remap_file_pages" number="239"/>
-  <syscall name="timer_create" number="240"/>
-  <syscall name="timer_settime" number="241"/>
-  <syscall name="timer_gettime" number="242"/>
-  <syscall name="timer_getoverrun" number="243"/>
-  <syscall name="timer_delete" number="244"/>
-  <syscall name="clock_settime" number="245"/>
-  <syscall name="clock_gettime" number="246"/>
-  <syscall name="clock_getres" number="247"/>
-  <syscall name="clock_nanosleep" number="248"/>
-  <syscall name="swapcontext" number="249"/>
-  <syscall name="tgkill" number="250"/>
-  <syscall name="utimes" number="251"/>
-  <syscall name="statfs64" number="252"/>
-  <syscall name="fstatfs64" number="253"/>
-  <syscall name="fadvise64_64" number="254"/>
-  <syscall name="rtas" number="255"/>
-  <syscall name="sys_debug_setcontext" number="256"/>
-  <syscall name="mbind" number="259"/>
-  <syscall name="get_mempolicy" number="260"/>
-  <syscall name="set_mempolicy" number="261"/>
-  <syscall name="mq_open" number="262"/>
-  <syscall name="mq_unlink" number="263"/>
-  <syscall name="mq_timedsend" number="264"/>
-  <syscall name="mq_timedreceive" number="265"/>
-  <syscall name="mq_notify" number="266"/>
-  <syscall name="mq_getsetattr" number="267"/>
-  <syscall name="kexec_load" number="268"/>
-  <syscall name="add_key" number="269"/>
-  <syscall name="request_key" number="270"/>
-  <syscall name="keyctl" number="271"/>
-  <syscall name="waitid" number="272"/>
-  <syscall name="ioprio_set" number="273"/>
-  <syscall name="ioprio_get" number="274"/>
-  <syscall name="inotify_init" number="275"/>
-  <syscall name="inotify_add_watch" number="276"/>
-  <syscall name="inotify_rm_watch" number="277"/>
-  <syscall name="spu_run" number="278"/>
-  <syscall name="spu_create" number="279"/>
-  <syscall name="pselect6" number="280"/>
-  <syscall name="ppoll" number="281"/>
-  <syscall name="unshare" number="282"/>
-  <syscall name="openat" number="286"/>
-  <syscall name="mkdirat" number="287"/>
-  <syscall name="mknodat" number="288"/>
-  <syscall name="fchownat" number="289"/>
-  <syscall name="futimesat" number="290"/>
-  <syscall name="fstatat64" number="291"/>
-  <syscall name="unlinkat" number="292"/>
-  <syscall name="renameat" number="293"/>
-  <syscall name="linkat" number="294"/>
-  <syscall name="symlinkat" number="295"/>
-  <syscall name="readlinkat" number="296"/>
-  <syscall name="fchmodat" number="297"/>
-  <syscall name="faccessat" number="298"/>
-</syscalls_info>
diff --git a/share/gdb/syscalls/ppc64-linux.xml b/share/gdb/syscalls/ppc64-linux.xml
deleted file mode 100644
index c31415a..0000000
--- a/share/gdb/syscalls/ppc64-linux.xml
+++ /dev/null
@@ -1,295 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2009-2014 Free Software Foundation, Inc.
-
-     Copying and distribution of this file, with or without modification,
-     are permitted in any medium without royalty provided the copyright
-     notice and this notice are preserved.  -->
-
-<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
-
-<!-- This file was generated using the following file:
-     
-     /usr/src/linux/arch/powerpc/include/asm/unistd.h
-
-     The file mentioned above belongs to the Linux Kernel.  -->
-
-<syscalls_info>
-  <syscall name="restart_syscall" number="0"/>
-  <syscall name="exit" number="1"/>
-  <syscall name="fork" number="2"/>
-  <syscall name="read" number="3"/>
-  <syscall name="write" number="4"/>
-  <syscall name="open" number="5"/>
-  <syscall name="close" number="6"/>
-  <syscall name="waitpid" number="7"/>
-  <syscall name="creat" number="8"/>
-  <syscall name="link" number="9"/>
-  <syscall name="unlink" number="10"/>
-  <syscall name="execve" number="11"/>
-  <syscall name="chdir" number="12"/>
-  <syscall name="time" number="13"/>
-  <syscall name="mknod" number="14"/>
-  <syscall name="chmod" number="15"/>
-  <syscall name="lchown" number="16"/>
-  <syscall name="break" number="17"/>
-  <syscall name="oldstat" number="18"/>
-  <syscall name="lseek" number="19"/>
-  <syscall name="getpid" number="20"/>
-  <syscall name="mount" number="21"/>
-  <syscall name="umount" number="22"/>
-  <syscall name="setuid" number="23"/>
-  <syscall name="getuid" number="24"/>
-  <syscall name="stime" number="25"/>
-  <syscall name="ptrace" number="26"/>
-  <syscall name="alarm" number="27"/>
-  <syscall name="oldfstat" number="28"/>
-  <syscall name="pause" number="29"/>
-  <syscall name="utime" number="30"/>
-  <syscall name="stty" number="31"/>
-  <syscall name="gtty" number="32"/>
-  <syscall name="access" number="33"/>
-  <syscall name="nice" number="34"/>
-  <syscall name="ftime" number="35"/>
-  <syscall name="sync" number="36"/>
-  <syscall name="kill" number="37"/>
-  <syscall name="rename" number="38"/>
-  <syscall name="mkdir" number="39"/>
-  <syscall name="rmdir" number="40"/>
-  <syscall name="dup" number="41"/>
-  <syscall name="pipe" number="42"/>
-  <syscall name="times" number="43"/>
-  <syscall name="prof" number="44"/>
-  <syscall name="brk" number="45"/>
-  <syscall name="setgid" number="46"/>
-  <syscall name="getgid" number="47"/>
-  <syscall name="signal" number="48"/>
-  <syscall name="geteuid" number="49"/>
-  <syscall name="getegid" number="50"/>
-  <syscall name="acct" number="51"/>
-  <syscall name="umount2" number="52"/>
-  <syscall name="lock" number="53"/>
-  <syscall name="ioctl" number="54"/>
-  <syscall name="fcntl" number="55"/>
-  <syscall name="mpx" number="56"/>
-  <syscall name="setpgid" number="57"/>
-  <syscall name="ulimit" number="58"/>
-  <syscall name="oldolduname" number="59"/>
-  <syscall name="umask" number="60"/>
-  <syscall name="chroot" number="61"/>
-  <syscall name="ustat" number="62"/>
-  <syscall name="dup2" number="63"/>
-  <syscall name="getppid" number="64"/>
-  <syscall name="getpgrp" number="65"/>
-  <syscall name="setsid" number="66"/>
-  <syscall name="sigaction" number="67"/>
-  <syscall name="sgetmask" number="68"/>
-  <syscall name="ssetmask" number="69"/>
-  <syscall name="setreuid" number="70"/>
-  <syscall name="setregid" number="71"/>
-  <syscall name="sigsuspend" number="72"/>
-  <syscall name="sigpending" number="73"/>
-  <syscall name="sethostname" number="74"/>
-  <syscall name="setrlimit" number="75"/>
-  <syscall name="getrlimit" number="76"/>
-  <syscall name="getrusage" number="77"/>
-  <syscall name="gettimeofday" number="78"/>
-  <syscall name="settimeofday" number="79"/>
-  <syscall name="getgroups" number="80"/>
-  <syscall name="setgroups" number="81"/>
-  <syscall name="select" number="82"/>
-  <syscall name="symlink" number="83"/>
-  <syscall name="oldlstat" number="84"/>
-  <syscall name="readlink" number="85"/>
-  <syscall name="uselib" number="86"/>
-  <syscall name="swapon" number="87"/>
-  <syscall name="reboot" number="88"/>
-  <syscall name="readdir" number="89"/>
-  <syscall name="mmap" number="90"/>
-  <syscall name="munmap" number="91"/>
-  <syscall name="truncate" number="92"/>
-  <syscall name="ftruncate" number="93"/>
-  <syscall name="fchmod" number="94"/>
-  <syscall name="fchown" number="95"/>
-  <syscall name="getpriority" number="96"/>
-  <syscall name="setpriority" number="97"/>
-  <syscall name="profil" number="98"/>
-  <syscall name="statfs" number="99"/>
-  <syscall name="fstatfs" number="100"/>
-  <syscall name="ioperm" number="101"/>
-  <syscall name="socketcall" number="102"/>
-  <syscall name="syslog" number="103"/>
-  <syscall name="setitimer" number="104"/>
-  <syscall name="getitimer" number="105"/>
-  <syscall name="stat" number="106"/>
-  <syscall name="lstat" number="107"/>
-  <syscall name="fstat" number="108"/>
-  <syscall name="olduname" number="109"/>
-  <syscall name="iopl" number="110"/>
-  <syscall name="vhangup" number="111"/>
-  <syscall name="idle" number="112"/>
-  <syscall name="vm86" number="113"/>
-  <syscall name="wait4" number="114"/>
-  <syscall name="swapoff" number="115"/>
-  <syscall name="sysinfo" number="116"/>
-  <syscall name="ipc" number="117"/>
-  <syscall name="fsync" number="118"/>
-  <syscall name="sigreturn" number="119"/>
-  <syscall name="clone" number="120"/>
-  <syscall name="setdomainname" number="121"/>
-  <syscall name="uname" number="122"/>
-  <syscall name="modify_ldt" number="123"/>
-  <syscall name="adjtimex" number="124"/>
-  <syscall name="mprotect" number="125"/>
-  <syscall name="sigprocmask" number="126"/>
-  <syscall name="create_module" number="127"/>
-  <syscall name="init_module" number="128"/>
-  <syscall name="delete_module" number="129"/>
-  <syscall name="get_kernel_syms" number="130"/>
-  <syscall name="quotactl" number="131"/>
-  <syscall name="getpgid" number="132"/>
-  <syscall name="fchdir" number="133"/>
-  <syscall name="bdflush" number="134"/>
-  <syscall name="sysfs" number="135"/>
-  <syscall name="personality" number="136"/>
-  <syscall name="afs_syscall" number="137"/>
-  <syscall name="setfsuid" number="138"/>
-  <syscall name="setfsgid" number="139"/>
-  <syscall name="_llseek" number="140"/>
-  <syscall name="getdents" number="141"/>
-  <syscall name="_newselect" number="142"/>
-  <syscall name="flock" number="143"/>
-  <syscall name="msync" number="144"/>
-  <syscall name="readv" number="145"/>
-  <syscall name="writev" number="146"/>
-  <syscall name="getsid" number="147"/>
-  <syscall name="fdatasync" number="148"/>
-  <syscall name="_sysctl" number="149"/>
-  <syscall name="mlock" number="150"/>
-  <syscall name="munlock" number="151"/>
-  <syscall name="mlockall" number="152"/>
-  <syscall name="munlockall" number="153"/>
-  <syscall name="sched_setparam" number="154"/>
-  <syscall name="sched_getparam" number="155"/>
-  <syscall name="sched_setscheduler" number="156"/>
-  <syscall name="sched_getscheduler" number="157"/>
-  <syscall name="sched_yield" number="158"/>
-  <syscall name="sched_get_priority_max" number="159"/>
-  <syscall name="sched_get_priority_min" number="160"/>
-  <syscall name="sched_rr_get_interval" number="161"/>
-  <syscall name="nanosleep" number="162"/>
-  <syscall name="mremap" number="163"/>
-  <syscall name="setresuid" number="164"/>
-  <syscall name="getresuid" number="165"/>
-  <syscall name="query_module" number="166"/>
-  <syscall name="poll" number="167"/>
-  <syscall name="nfsservctl" number="168"/>
-  <syscall name="setresgid" number="169"/>
-  <syscall name="getresgid" number="170"/>
-  <syscall name="prctl" number="171"/>
-  <syscall name="rt_sigreturn" number="172"/>
-  <syscall name="rt_sigaction" number="173"/>
-  <syscall name="rt_sigprocmask" number="174"/>
-  <syscall name="rt_sigpending" number="175"/>
-  <syscall name="rt_sigtimedwait" number="176"/>
-  <syscall name="rt_sigqueueinfo" number="177"/>
-  <syscall name="rt_sigsuspend" number="178"/>
-  <syscall name="pread64" number="179"/>
-  <syscall name="pwrite64" number="180"/>
-  <syscall name="chown" number="181"/>
-  <syscall name="getcwd" number="182"/>
-  <syscall name="capget" number="183"/>
-  <syscall name="capset" number="184"/>
-  <syscall name="sigaltstack" number="185"/>
-  <syscall name="sendfile" number="186"/>
-  <syscall name="getpmsg" number="187"/>
-  <syscall name="putpmsg" number="188"/>
-  <syscall name="vfork" number="189"/>
-  <syscall name="ugetrlimit" number="190"/>
-  <syscall name="readahead" number="191"/>
-  <syscall name="pciconfig_read" number="198"/>
-  <syscall name="pciconfig_write" number="199"/>
-  <syscall name="pciconfig_iobase" number="200"/>
-  <syscall name="multiplexer" number="201"/>
-  <syscall name="getdents64" number="202"/>
-  <syscall name="pivot_root" number="203"/>
-  <syscall name="madvise" number="205"/>
-  <syscall name="mincore" number="206"/>
-  <syscall name="gettid" number="207"/>
-  <syscall name="tkill" number="208"/>
-  <syscall name="setxattr" number="209"/>
-  <syscall name="lsetxattr" number="210"/>
-  <syscall name="fsetxattr" number="211"/>
-  <syscall name="getxattr" number="212"/>
-  <syscall name="lgetxattr" number="213"/>
-  <syscall name="fgetxattr" number="214"/>
-  <syscall name="listxattr" number="215"/>
-  <syscall name="llistxattr" number="216"/>
-  <syscall name="flistxattr" number="217"/>
-  <syscall name="removexattr" number="218"/>
-  <syscall name="lremovexattr" number="219"/>
-  <syscall name="fremovexattr" number="220"/>
-  <syscall name="futex" number="221"/>
-  <syscall name="sched_setaffinity" number="222"/>
-  <syscall name="sched_getaffinity" number="223"/>
-  <syscall name="tuxcall" number="225"/>
-  <syscall name="io_setup" number="227"/>
-  <syscall name="io_destroy" number="228"/>
-  <syscall name="io_getevents" number="229"/>
-  <syscall name="io_submit" number="230"/>
-  <syscall name="io_cancel" number="231"/>
-  <syscall name="set_tid_address" number="232"/>
-  <syscall name="fadvise64" number="233"/>
-  <syscall name="exit_group" number="234"/>
-  <syscall name="lookup_dcookie" number="235"/>
-  <syscall name="epoll_create" number="236"/>
-  <syscall name="epoll_ctl" number="237"/>
-  <syscall name="epoll_wait" number="238"/>
-  <syscall name="remap_file_pages" number="239"/>
-  <syscall name="timer_create" number="240"/>
-  <syscall name="timer_settime" number="241"/>
-  <syscall name="timer_gettime" number="242"/>
-  <syscall name="timer_getoverrun" number="243"/>
-  <syscall name="timer_delete" number="244"/>
-  <syscall name="clock_settime" number="245"/>
-  <syscall name="clock_gettime" number="246"/>
-  <syscall name="clock_getres" number="247"/>
-  <syscall name="clock_nanosleep" number="248"/>
-  <syscall name="swapcontext" number="249"/>
-  <syscall name="tgkill" number="250"/>
-  <syscall name="utimes" number="251"/>
-  <syscall name="statfs64" number="252"/>
-  <syscall name="fstatfs64" number="253"/>
-  <syscall name="rtas" number="255"/>
-  <syscall name="sys_debug_setcontext" number="256"/>
-  <syscall name="mbind" number="259"/>
-  <syscall name="get_mempolicy" number="260"/>
-  <syscall name="set_mempolicy" number="261"/>
-  <syscall name="mq_open" number="262"/>
-  <syscall name="mq_unlink" number="263"/>
-  <syscall name="mq_timedsend" number="264"/>
-  <syscall name="mq_timedreceive" number="265"/>
-  <syscall name="mq_notify" number="266"/>
-  <syscall name="mq_getsetattr" number="267"/>
-  <syscall name="kexec_load" number="268"/>
-  <syscall name="add_key" number="269"/>
-  <syscall name="request_key" number="270"/>
-  <syscall name="keyctl" number="271"/>
-  <syscall name="waitid" number="272"/>
-  <syscall name="ioprio_set" number="273"/>
-  <syscall name="ioprio_get" number="274"/>
-  <syscall name="inotify_init" number="275"/>
-  <syscall name="inotify_add_watch" number="276"/>
-  <syscall name="inotify_rm_watch" number="277"/>
-  <syscall name="spu_run" number="278"/>
-  <syscall name="spu_create" number="279"/>
-  <syscall name="pselect6" number="280"/>
-  <syscall name="ppoll" number="281"/>
-  <syscall name="unshare" number="282"/>
-  <syscall name="unlinkat" number="286"/>
-  <syscall name="renameat" number="287"/>
-  <syscall name="linkat" number="288"/>
-  <syscall name="symlinkat" number="289"/>
-  <syscall name="readlinkat" number="290"/>
-  <syscall name="fchmodat" number="291"/>
-  <syscall name="faccessat" number="292"/>
-</syscalls_info>
diff --git a/share/gdb/syscalls/sparc-linux.xml b/share/gdb/syscalls/sparc-linux.xml
deleted file mode 100644
index 24d8612..0000000
--- a/share/gdb/syscalls/sparc-linux.xml
+++ /dev/null
@@ -1,344 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2010-2014 Free Software Foundation, Inc.
-
-     Copying and distribution of this file, with or without modification,
-     are permitted in any medium without royalty provided the copyright
-     notice and this notice are preserved.  -->
-
-<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
-
-<!-- This file was generated using the following file:
-     
-     /usr/src/linux/arch/sparc/include/asm/unistd.h
-
-     The file mentioned above belongs to the Linux Kernel.  -->
-
-<syscalls_info>
-  <syscall name="restart_syscall" number="0"/>
-  <syscall name="exit" number="1"/>
-  <syscall name="fork" number="2"/>
-  <syscall name="read" number="3"/>
-  <syscall name="write" number="4"/>
-  <syscall name="open" number="5"/>
-  <syscall name="close" number="6"/>
-  <syscall name="wait4" number="7"/>
-  <syscall name="creat" number="8"/>
-  <syscall name="link" number="9"/>
-  <syscall name="unlink" number="10"/>
-  <syscall name="execv" number="11"/>
-  <syscall name="chdir" number="12"/>
-  <syscall name="chown"	number="13"/>
-  <syscall name="mknod" number="14"/>
-  <syscall name="chmod" number="15"/>
-  <syscall name="lchown" number="16"/>
-  <syscall name="brk" number="17"/>
-  <syscall name="perfctr" number="18"/>
-  <syscall name="lseek" number="19"/>
-  <syscall name="getpid" number="20"/>
-  <syscall name="capget" number="21"/>
-  <syscall name="capset" number="22"/>
-  <syscall name="setuid" number="23"/>
-  <syscall name="getuid" number="24"/>
-  <syscall name="vmsplice" number="25"/>
-  <syscall name="ptrace" number="26"/>
-  <syscall name="alarm" number="27"/>
-  <syscall name="sigaltstack" number="28"/>
-  <syscall name="pause" number="29"/>
-  <syscall name="utime" number="30"/>
-  <syscall name="lchown32" number="31"/>
-  <syscall name="fchown32" number="32"/>
-  <syscall name="access" number="33"/>
-  <syscall name="nice" number="34"/>
-  <syscall name="chown32" number="35"/>
-  <syscall name="sync" number="36"/>
-  <syscall name="kill" number="37"/>
-  <syscall name="stat" number="38"/>
-  <syscall name="sendfile" number="39"/>
-  <syscall name="lstat" number="40"/>
-  <syscall name="dup" number="41"/>
-  <syscall name="pipe" number="42"/>
-  <syscall name="times" number="43"/>
-  <syscall name="getuid32" number="44"/>
-  <syscall name="umount2" number="45"/>
-  <syscall name="setgid" number="46"/>
-  <syscall name="getgid" number="47"/>
-  <syscall name="signal" number="48"/>
-  <syscall name="geteuid" number="49"/>
-  <syscall name="getegid" number="50"/>
-  <syscall name="acct" number="51"/>
-  <syscall name="getgid32" number="53"/>
-  <syscall name="ioctl" number="54"/>
-  <syscall name="reboot" number="55"/>
-  <syscall name="mmap2" number="56"/>
-  <syscall name="symlink" number="57"/>
-  <syscall name="readlink" number="58"/>
-  <syscall name="execve" number="59"/>
-  <syscall name="umask" number="60"/>
-  <syscall name="chroot" number="61"/>
-  <syscall name="fstat" number="62"/>
-  <syscall name="fstat64" number="63"/>
-  <syscall name="getpagesize" number="64"/>
-  <syscall name="msync" number="65"/>
-  <syscall name="vfork" number="66"/>
-  <syscall name="pread64" number="67"/>
-  <syscall name="pwrite64" number="68"/>
-  <syscall name="geteuid32" number="69"/>
-  <syscall name="getegid32" number="70"/>
-  <syscall name="mmap" number="71"/>
-  <syscall name="setreuid32" number="72"/>
-  <syscall name="munmap" number="73"/>
-  <syscall name="mprotect" number="74"/>
-  <syscall name="madvise" number="75"/>
-  <syscall name="vhangup" number="76"/>
-  <syscall name="truncate64" number="77"/>
-  <syscall name="mincore" number="78"/>
-  <syscall name="getgroups" number="79"/>
-  <syscall name="setgroups" number="80"/>
-  <syscall name="getpgrp" number="81"/>
-  <syscall name="setgroups32" number="82"/>
-  <syscall name="setitimer" number="83"/>
-  <syscall name="ftruncate64" number="84"/>
-  <syscall name="swapon" number="85"/>
-  <syscall name="getitimer" number="86"/>
-  <syscall name="setuid32" number="87"/>
-  <syscall name="sethostname" number="88"/>
-  <syscall name="setgid32" number="89"/>
-  <syscall name="dup2" number="90"/>
-  <syscall name="setfsuid32" number="91"/>
-  <syscall name="fcntl" number="92"/>
-  <syscall name="select" number="93"/>
-  <syscall name="setfsgid32" number="94"/>
-  <syscall name="fsync" number="95"/>
-  <syscall name="setpriority" number="96"/>
-  <syscall name="socket" number="97"/>
-  <syscall name="connect" number="98"/>
-  <syscall name="accept" number="99"/>
-  <syscall name="getpriority" number="100"/>
-  <syscall name="rt_sigreturn" number="101"/>
-  <syscall name="rt_sigaction" number="102"/>
-  <syscall name="rt_sigprocmask" number="103"/>
-  <syscall name="rt_sigpending" number="104"/>
-  <syscall name="rt_sigtimedwait" number="105"/>
-  <syscall name="rt_sigqueueinfo" number="106"/>
-  <syscall name="rt_sigsuspend" number="107"/>
-  <syscall name="setresuid32" number="108"/>
-  <syscall name="getresuid32" number="109"/>
-  <syscall name="setresgid32" number="110"/>
-  <syscall name="getresgid32" number="111"/>
-  <syscall name="setregid32" number="112"/>
-  <syscall name="recvmsg" number="113"/>
-  <syscall name="sendmsg" number="114"/>
-  <syscall name="getgroups32" number="115"/>
-  <syscall name="gettimeofday" number="116"/>
-  <syscall name="getrusage" number="117"/>
-  <syscall name="getsockopt" number="118"/>
-  <syscall name="getcwd" number="119"/>
-  <syscall name="readv" number="120"/>
-  <syscall name="writev" number="121"/>
-  <syscall name="settimeofday" number="122"/>
-  <syscall name="fchown" number="123"/>
-  <syscall name="fchmod" number="124"/>
-  <syscall name="recvfrom" number="125"/>
-  <syscall name="setreuid" number="126"/>
-  <syscall name="setregid" number="127"/>
-  <syscall name="rename" number="128"/>
-  <syscall name="truncate" number="129"/>
-  <syscall name="ftruncate" number="130"/>
-  <syscall name="flock" number="131"/>
-  <syscall name="lstat64" number="132"/>
-  <syscall name="sendto" number="133"/>
-  <syscall name="shutdown" number="134"/>
-  <syscall name="socketpair" number="135"/>
-  <syscall name="mkdir" number="136"/>
-  <syscall name="rmdir" number="137"/>
-  <syscall name="utimes" number="138"/>
-  <syscall name="stat64" number="139"/>
-  <syscall name="sendfile64" number="140"/>
-  <syscall name="getpeername" number="141"/>
-  <syscall name="futex" number="142"/>
-  <syscall name="gettid" number="143"/>
-  <syscall name="getrlimit" number="144"/>
-  <syscall name="setrlimit" number="145"/>
-  <syscall name="pivot_root" number="146"/>
-  <syscall name="prctl" number="147"/>
-  <syscall name="pciconfig_read" number="148"/>
-  <syscall name="pciconfig_write" number="149"/>
-  <syscall name="getsockname" number="150"/>
-  <syscall name="inotify_init" number="151"/>
-  <syscall name="inotify_add_watch" number="152"/>
-  <syscall name="poll" number="153"/>
-  <syscall name="getdents64" number="154"/>
-  <syscall name="fcntl64" number="155"/>
-  <syscall name="inotify_rm_watch" number="156"/>
-  <syscall name="statfs" number="157"/>
-  <syscall name="fstatfs" number="158"/>
-  <syscall name="umount" number="159"/>
-  <syscall name="sched_set_affinity" number="160"/>
-  <syscall name="sched_get_affinity" number="161"/>
-  <syscall name="getdomainname" number="162"/>
-  <syscall name="setdomainname" number="163"/>
-  <syscall name="quotactl" number="165"/>
-  <syscall name="set_tid_address" number="166"/>
-  <syscall name="mount" number="167"/>
-  <syscall name="ustat" number="168"/>
-  <syscall name="setxattr" number="169"/>
-  <syscall name="lsetxattr" number="170"/>
-  <syscall name="fsetxattr" number="171"/>
-  <syscall name="getxattr" number="172"/>
-  <syscall name="lgetxattr" number="173"/>
-  <syscall name="getdents" number="174"/>
-  <syscall name="setsid" number="175"/>
-  <syscall name="fchdir" number="176"/>
-  <syscall name="fgetxattr" number="177"/>
-  <syscall name="listxattr" number="178"/>
-  <syscall name="llistxattr" number="179"/>
-  <syscall name="flistxattr" number="180"/>
-  <syscall name="removexattr" number="181"/>
-  <syscall name="lremovexattr" number="182"/>
-  <syscall name="sigpending" number="183"/>
-  <syscall name="query_module" number="184"/>
-  <syscall name="setpgid" number="185"/>
-  <syscall name="fremovexattr" number="186"/>
-  <syscall name="tkill" number="187"/>
-  <syscall name="exit_group" number="188"/>
-  <syscall name="uname" number="189"/>
-  <syscall name="init_module" number="190"/>
-  <syscall name="personality" number="191"/>
-  <syscall name="remap_file_pages" number="192"/>
-  <syscall name="epoll_create" number="193"/>
-  <syscall name="epoll_ctl" number="194"/>
-  <syscall name="epoll_wait" number="195"/>
-  <syscall name="ioprio_set" number="196"/>
-  <syscall name="getppid" number="197"/>
-  <syscall name="sigaction" number="198"/>
-  <syscall name="sgetmask" number="199"/>
-  <syscall name="ssetmask" number="200"/>
-  <syscall name="sigsuspend" number="201"/>
-  <syscall name="oldlstat" number="202"/>
-  <syscall name="uselib" number="203"/>
-  <syscall name="readdir" number="204"/>
-  <syscall name="readahead" number="205"/>
-  <syscall name="socketcall" number="206"/>
-  <syscall name="syslog" number="207"/>
-  <syscall name="lookup_dcookie" number="208"/>
-  <syscall name="fadvise64" number="209"/>
-  <syscall name="fadvise64_64" number="210"/>
-  <syscall name="tgkill" number="211"/>
-  <syscall name="waitpid" number="212"/>
-  <syscall name="swapoff" number="213"/>
-  <syscall name="sysinfo" number="214"/>
-  <syscall name="ipc" number="215"/>
-  <syscall name="sigreturn" number="216"/>
-  <syscall name="clone" number="217"/>
-  <syscall name="ioprio_get" number="218"/>
-  <syscall name="adjtimex" number="219"/>
-  <syscall name="sigprocmask" number="220"/>
-  <syscall name="create_module" number="221"/>
-  <syscall name="delete_module" number="222"/>
-  <syscall name="get_kernel_syms" number="223"/>
-  <syscall name="getpgid" number="224"/>
-  <syscall name="bdflush" number="225"/>
-  <syscall name="sysfs" number="226"/>
-  <syscall name="afs_syscall" number="227"/>
-  <syscall name="setfsuid" number="228"/>
-  <syscall name="setfsgid" number="229"/>
-  <syscall name="_newselect" number="230"/>
-  <syscall name="time" number="231"/>
-  <syscall name="splice" number="232"/>
-  <syscall name="stime" number="233"/>
-  <syscall name="statfs64" number="234"/>
-  <syscall name="fstatfs64" number="235"/>
-  <syscall name="_llseek" number="236"/>
-  <syscall name="mlock" number="237"/>
-  <syscall name="munlock" number="238"/>
-  <syscall name="mlockall" number="239"/>
-  <syscall name="munlockall" number="240"/>
-  <syscall name="sched_setparam" number="241"/>
-  <syscall name="sched_getparam" number="242"/>
-  <syscall name="sched_setscheduler" number="243"/>
-  <syscall name="sched_getscheduler" number="244"/>
-  <syscall name="sched_yield" number="245"/>
-  <syscall name="sched_get_priority_max" number="246"/>
-  <syscall name="sched_get_priority_min" number="247"/>
-  <syscall name="sched_rr_get_interval" number="248"/>
-  <syscall name="nanosleep" number="249"/>
-  <syscall name="mremap" number="250"/>
-  <syscall name="_sysctl" number="251"/>
-  <syscall name="getsid" number="252"/>
-  <syscall name="fdatasync" number="253"/>
-  <syscall name="nfsservctl" number="254"/>
-  <syscall name="sync_file_range" number="255"/>
-  <syscall name="clock_settime" number="256"/>
-  <syscall name="clock_gettime" number="257"/>
-  <syscall name="clock_getres" number="258"/>
-  <syscall name="clock_nanosleep" number="259"/>
-  <syscall name="sched_getaffinity" number="260"/>
-  <syscall name="sched_setaffinity" number="261"/>
-  <syscall name="timer_settime" number="262"/>
-  <syscall name="timer_gettime" number="263"/>
-  <syscall name="timer_getoverrun" number="264"/>
-  <syscall name="timer_delete" number="265"/>
-  <syscall name="timer_create" number="266"/>
-  <syscall name="vserver" number="267"/>
-  <syscall name="io_setup" number="268"/>
-  <syscall name="io_destroy" number="269"/>
-  <syscall name="io_submit" number="270"/>
-  <syscall name="io_cancel" number="271"/>
-  <syscall name="io_getevents" number="272"/>
-  <syscall name="mq_open" number="273"/>
-  <syscall name="mq_unlink" number="274"/>
-  <syscall name="mq_timedsend" number="275"/>
-  <syscall name="mq_timedreceive" number="276"/>
-  <syscall name="mq_notify" number="277"/>
-  <syscall name="mq_getsetattr" number="278"/>
-  <syscall name="waitid" number="279"/>
-  <syscall name="tee" number="280"/>
-  <syscall name="add_key" number="281"/>
-  <syscall name="request_key" number="282"/>
-  <syscall name="keyctl" number="283"/>
-  <syscall name="openat" number="284"/>
-  <syscall name="mkdirat" number="285"/>
-  <syscall name="mknodat" number="286"/>
-  <syscall name="fchownat" number="287"/>
-  <syscall name="futimesat" number="288"/>
-  <syscall name="fstatat64" number="289"/>
-  <syscall name="unlinkat" number="290"/>
-  <syscall name="renameat" number="291"/>
-  <syscall name="linkat" number="292"/>
-  <syscall name="symlinkat" number="293"/>
-  <syscall name="readlinkat" number="294"/>
-  <syscall name="fchmodat" number="295"/>
-  <syscall name="faccessat" number="296"/>
-  <syscall name="pselect6" number="297"/>
-  <syscall name="ppoll" number="298"/>
-  <syscall name="unshare" number="299"/>
-  <syscall name="set_robust_list" number="300"/>
-  <syscall name="get_robust_list" number="301"/>
-  <syscall name="migrate_pages" number="302"/>
-  <syscall name="mbind" number="303"/>
-  <syscall name="get_mempolicy" number="304"/>
-  <syscall name="set_mempolicy" number="305"/>
-  <syscall name="kexec_load" number="306"/>
-  <syscall name="move_pages" number="307"/>
-  <syscall name="getcpu" number="308"/>
-  <syscall name="epoll_pwait" number="309"/>
-  <syscall name="utimensat" number="310"/>
-  <syscall name="signalfd" number="311"/>
-  <syscall name="timerfd_create" number="312"/>
-  <syscall name="eventfd" number="313"/>
-  <syscall name="fallocate" number="314"/>
-  <syscall name="timerfd_settime" number="315"/>
-  <syscall name="timerfd_gettime" number="316"/>
-  <syscall name="signalfd4" number="317"/>
-  <syscall name="eventfd2" number="318"/>
-  <syscall name="epoll_create1" number="319"/>
-  <syscall name="dup3" number="320"/>
-  <syscall name="pipe2" number="321"/>
-  <syscall name="inotify_init1" number="322"/>
-  <syscall name="accept4" number="323"/>
-  <syscall name="preadv" number="324"/>
-  <syscall name="pwritev" number="325"/>
-  <syscall name="rt_tgsigqueueinfo" number="326"/>
-  <syscall name="perf_event_open" number="327"/>
-  <syscall name="recvmmsg" number="328"/>
-</syscalls_info>
diff --git a/share/gdb/syscalls/sparc64-linux.xml b/share/gdb/syscalls/sparc64-linux.xml
deleted file mode 100644
index 13c0cb7..0000000
--- a/share/gdb/syscalls/sparc64-linux.xml
+++ /dev/null
@@ -1,326 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2010-2014 Free Software Foundation, Inc.
-
-     Copying and distribution of this file, with or without modification,
-     are permitted in any medium without royalty provided the copyright
-     notice and this notice are preserved.  -->
-
-<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
-
-<!-- This file was generated using the following file:
-     
-     /usr/src/linux/arch/sparc/include/asm/unistd.h
-
-     The file mentioned above belongs to the Linux Kernel.  -->
-
-<syscalls_info>
-  <syscall name="restart_syscall" number="0"/>
-  <syscall name="exit" number="1"/>
-  <syscall name="fork" number="2"/>
-  <syscall name="read" number="3"/>
-  <syscall name="write" number="4"/>
-  <syscall name="open" number="5"/>
-  <syscall name="close" number="6"/>
-  <syscall name="wait4" number="7"/>
-  <syscall name="creat" number="8"/>
-  <syscall name="link" number="9"/>
-  <syscall name="unlink" number="10"/>
-  <syscall name="execv" number="11"/>
-  <syscall name="chdir" number="12"/>
-  <syscall name="chown"	number="13"/>
-  <syscall name="mknod" number="14"/>
-  <syscall name="chmod" number="15"/>
-  <syscall name="lchown" number="16"/>
-  <syscall name="brk" number="17"/>
-  <syscall name="perfctr" number="18"/>
-  <syscall name="lseek" number="19"/>
-  <syscall name="getpid" number="20"/>
-  <syscall name="capget" number="21"/>
-  <syscall name="capset" number="22"/>
-  <syscall name="setuid" number="23"/>
-  <syscall name="getuid" number="24"/>
-  <syscall name="vmsplice" number="25"/>
-  <syscall name="ptrace" number="26"/>
-  <syscall name="alarm" number="27"/>
-  <syscall name="sigaltstack" number="28"/>
-  <syscall name="pause" number="29"/>
-  <syscall name="utime" number="30"/>
-  <syscall name="access" number="33"/>
-  <syscall name="nice" number="34"/>
-  <syscall name="sync" number="36"/>
-  <syscall name="kill" number="37"/>
-  <syscall name="stat" number="38"/>
-  <syscall name="sendfile" number="39"/>
-  <syscall name="lstat" number="40"/>
-  <syscall name="dup" number="41"/>
-  <syscall name="pipe" number="42"/>
-  <syscall name="times" number="43"/>
-  <syscall name="umount2" number="45"/>
-  <syscall name="setgid" number="46"/>
-  <syscall name="getgid" number="47"/>
-  <syscall name="signal" number="48"/>
-  <syscall name="geteuid" number="49"/>
-  <syscall name="getegid" number="50"/>
-  <syscall name="acct" number="51"/>
-  <syscall name="memory_ordering" number="52"/>
-  <syscall name="ioctl" number="54"/>
-  <syscall name="reboot" number="55"/>
-  <syscall name="symlink" number="57"/>
-  <syscall name="readlink" number="58"/>
-  <syscall name="execve" number="59"/>
-  <syscall name="umask" number="60"/>
-  <syscall name="chroot" number="61"/>
-  <syscall name="fstat" number="62"/>
-  <syscall name="fstat64" number="63"/>
-  <syscall name="getpagesize" number="64"/>
-  <syscall name="msync" number="65"/>
-  <syscall name="vfork" number="66"/>
-  <syscall name="pread64" number="67"/>
-  <syscall name="pwrite64" number="68"/>
-  <syscall name="mmap" number="71"/>
-  <syscall name="munmap" number="73"/>
-  <syscall name="mprotect" number="74"/>
-  <syscall name="madvise" number="75"/>
-  <syscall name="vhangup" number="76"/>
-  <syscall name="mincore" number="78"/>
-  <syscall name="getgroups" number="79"/>
-  <syscall name="setgroups" number="80"/>
-  <syscall name="getpgrp" number="81"/>
-  <syscall name="setitimer" number="83"/>
-  <syscall name="swapon" number="85"/>
-  <syscall name="getitimer" number="86"/>
-  <syscall name="sethostname" number="88"/>
-  <syscall name="dup2" number="90"/>
-  <syscall name="fcntl" number="92"/>
-  <syscall name="select" number="93"/>
-  <syscall name="fsync" number="95"/>
-  <syscall name="setpriority" number="96"/>
-  <syscall name="socket" number="97"/>
-  <syscall name="connect" number="98"/>
-  <syscall name="accept" number="99"/>
-  <syscall name="getpriority" number="100"/>
-  <syscall name="rt_sigreturn" number="101"/>
-  <syscall name="rt_sigaction" number="102"/>
-  <syscall name="rt_sigprocmask" number="103"/>
-  <syscall name="rt_sigpending" number="104"/>
-  <syscall name="rt_sigtimedwait" number="105"/>
-  <syscall name="rt_sigqueueinfo" number="106"/>
-  <syscall name="rt_sigsuspend" number="107"/>
-  <syscall name="setresuid" number="108"/>
-  <syscall name="getresuid" number="109"/>
-  <syscall name="setresgid" number="110"/>
-  <syscall name="getresgid" number="111"/>
-  <syscall name="recvmsg" number="113"/>
-  <syscall name="sendmsg" number="114"/>
-  <syscall name="gettimeofday" number="116"/>
-  <syscall name="getrusage" number="117"/>
-  <syscall name="getsockopt" number="118"/>
-  <syscall name="getcwd" number="119"/>
-  <syscall name="readv" number="120"/>
-  <syscall name="writev" number="121"/>
-  <syscall name="settimeofday" number="122"/>
-  <syscall name="fchown" number="123"/>
-  <syscall name="fchmod" number="124"/>
-  <syscall name="recvfrom" number="125"/>
-  <syscall name="setreuid" number="126"/>
-  <syscall name="setregid" number="127"/>
-  <syscall name="rename" number="128"/>
-  <syscall name="truncate" number="129"/>
-  <syscall name="ftruncate" number="130"/>
-  <syscall name="flock" number="131"/>
-  <syscall name="lstat64" number="132"/>
-  <syscall name="sendto" number="133"/>
-  <syscall name="shutdown" number="134"/>
-  <syscall name="socketpair" number="135"/>
-  <syscall name="mkdir" number="136"/>
-  <syscall name="rmdir" number="137"/>
-  <syscall name="utimes" number="138"/>
-  <syscall name="stat64" number="139"/>
-  <syscall name="sendfile64" number="140"/>
-  <syscall name="getpeername" number="141"/>
-  <syscall name="futex" number="142"/>
-  <syscall name="gettid" number="143"/>
-  <syscall name="getrlimit" number="144"/>
-  <syscall name="setrlimit" number="145"/>
-  <syscall name="pivot_root" number="146"/>
-  <syscall name="prctl" number="147"/>
-  <syscall name="pciconfig_read" number="148"/>
-  <syscall name="pciconfig_write" number="149"/>
-  <syscall name="getsockname" number="150"/>
-  <syscall name="inotify_init" number="151"/>
-  <syscall name="inotify_add_watch" number="152"/>
-  <syscall name="poll" number="153"/>
-  <syscall name="getdents64" number="154"/>
-  <syscall name="inotify_rm_watch" number="156"/>
-  <syscall name="statfs" number="157"/>
-  <syscall name="fstatfs" number="158"/>
-  <syscall name="umount" number="159"/>
-  <syscall name="sched_set_affinity" number="160"/>
-  <syscall name="sched_get_affinity" number="161"/>
-  <syscall name="getdomainname" number="162"/>
-  <syscall name="setdomainname" number="163"/>
-  <syscall name="utrap_install" number="164"/>
-  <syscall name="quotactl" number="165"/>
-  <syscall name="set_tid_address" number="166"/>
-  <syscall name="mount" number="167"/>
-  <syscall name="ustat" number="168"/>
-  <syscall name="setxattr" number="169"/>
-  <syscall name="lsetxattr" number="170"/>
-  <syscall name="fsetxattr" number="171"/>
-  <syscall name="getxattr" number="172"/>
-  <syscall name="lgetxattr" number="173"/>
-  <syscall name="getdents" number="174"/>
-  <syscall name="setsid" number="175"/>
-  <syscall name="fchdir" number="176"/>
-  <syscall name="fgetxattr" number="177"/>
-  <syscall name="listxattr" number="178"/>
-  <syscall name="llistxattr" number="179"/>
-  <syscall name="flistxattr" number="180"/>
-  <syscall name="removexattr" number="181"/>
-  <syscall name="lremovexattr" number="182"/>
-  <syscall name="sigpending" number="183"/>
-  <syscall name="query_module" number="184"/>
-  <syscall name="setpgid" number="185"/>
-  <syscall name="fremovexattr" number="186"/>
-  <syscall name="tkill" number="187"/>
-  <syscall name="exit_group" number="188"/>
-  <syscall name="uname" number="189"/>
-  <syscall name="init_module" number="190"/>
-  <syscall name="personality" number="191"/>
-  <syscall name="remap_file_pages" number="192"/>
-  <syscall name="epoll_create" number="193"/>
-  <syscall name="epoll_ctl" number="194"/>
-  <syscall name="epoll_wait" number="195"/>
-  <syscall name="ioprio_set" number="196"/>
-  <syscall name="getppid" number="197"/>
-  <syscall name="sigaction" number="198"/>
-  <syscall name="sgetmask" number="199"/>
-  <syscall name="ssetmask" number="200"/>
-  <syscall name="sigsuspend" number="201"/>
-  <syscall name="oldlstat" number="202"/>
-  <syscall name="uselib" number="203"/>
-  <syscall name="readdir" number="204"/>
-  <syscall name="readahead" number="205"/>
-  <syscall name="socketcall" number="206"/>
-  <syscall name="syslog" number="207"/>
-  <syscall name="lookup_dcookie" number="208"/>
-  <syscall name="fadvise64" number="209"/>
-  <syscall name="fadvise64_64" number="210"/>
-  <syscall name="tgkill" number="211"/>
-  <syscall name="waitpid" number="212"/>
-  <syscall name="swapoff" number="213"/>
-  <syscall name="sysinfo" number="214"/>
-  <syscall name="ipc" number="215"/>
-  <syscall name="sigreturn" number="216"/>
-  <syscall name="clone" number="217"/>
-  <syscall name="ioprio_get" number="218"/>
-  <syscall name="adjtimex" number="219"/>
-  <syscall name="sigprocmask" number="220"/>
-  <syscall name="create_module" number="221"/>
-  <syscall name="delete_module" number="222"/>
-  <syscall name="get_kernel_syms" number="223"/>
-  <syscall name="getpgid" number="224"/>
-  <syscall name="bdflush" number="225"/>
-  <syscall name="sysfs" number="226"/>
-  <syscall name="afs_syscall" number="227"/>
-  <syscall name="setfsuid" number="228"/>
-  <syscall name="setfsgid" number="229"/>
-  <syscall name="_newselect" number="230"/>
-  <syscall name="splice" number="232"/>
-  <syscall name="stime" number="233"/>
-  <syscall name="statfs64" number="234"/>
-  <syscall name="fstatfs64" number="235"/>
-  <syscall name="_llseek" number="236"/>
-  <syscall name="mlock" number="237"/>
-  <syscall name="munlock" number="238"/>
-  <syscall name="mlockall" number="239"/>
-  <syscall name="munlockall" number="240"/>
-  <syscall name="sched_setparam" number="241"/>
-  <syscall name="sched_getparam" number="242"/>
-  <syscall name="sched_setscheduler" number="243"/>
-  <syscall name="sched_getscheduler" number="244"/>
-  <syscall name="sched_yield" number="245"/>
-  <syscall name="sched_get_priority_max" number="246"/>
-  <syscall name="sched_get_priority_min" number="247"/>
-  <syscall name="sched_rr_get_interval" number="248"/>
-  <syscall name="nanosleep" number="249"/>
-  <syscall name="mremap" number="250"/>
-  <syscall name="_sysctl" number="251"/>
-  <syscall name="getsid" number="252"/>
-  <syscall name="fdatasync" number="253"/>
-  <syscall name="nfsservctl" number="254"/>
-  <syscall name="sync_file_range" number="255"/>
-  <syscall name="clock_settime" number="256"/>
-  <syscall name="clock_gettime" number="257"/>
-  <syscall name="clock_getres" number="258"/>
-  <syscall name="clock_nanosleep" number="259"/>
-  <syscall name="sched_getaffinity" number="260"/>
-  <syscall name="sched_setaffinity" number="261"/>
-  <syscall name="timer_settime" number="262"/>
-  <syscall name="timer_gettime" number="263"/>
-  <syscall name="timer_getoverrun" number="264"/>
-  <syscall name="timer_delete" number="265"/>
-  <syscall name="timer_create" number="266"/>
-  <syscall name="vserver" number="267"/>
-  <syscall name="io_setup" number="268"/>
-  <syscall name="io_destroy" number="269"/>
-  <syscall name="io_submit" number="270"/>
-  <syscall name="io_cancel" number="271"/>
-  <syscall name="io_getevents" number="272"/>
-  <syscall name="mq_open" number="273"/>
-  <syscall name="mq_unlink" number="274"/>
-  <syscall name="mq_timedsend" number="275"/>
-  <syscall name="mq_timedreceive" number="276"/>
-  <syscall name="mq_notify" number="277"/>
-  <syscall name="mq_getsetattr" number="278"/>
-  <syscall name="waitid" number="279"/>
-  <syscall name="tee" number="280"/>
-  <syscall name="add_key" number="281"/>
-  <syscall name="request_key" number="282"/>
-  <syscall name="keyctl" number="283"/>
-  <syscall name="openat" number="284"/>
-  <syscall name="mkdirat" number="285"/>
-  <syscall name="mknodat" number="286"/>
-  <syscall name="fchownat" number="287"/>
-  <syscall name="futimesat" number="288"/>
-  <syscall name="fstatat64" number="289"/>
-  <syscall name="unlinkat" number="290"/>
-  <syscall name="renameat" number="291"/>
-  <syscall name="linkat" number="292"/>
-  <syscall name="symlinkat" number="293"/>
-  <syscall name="readlinkat" number="294"/>
-  <syscall name="fchmodat" number="295"/>
-  <syscall name="faccessat" number="296"/>
-  <syscall name="pselect6" number="297"/>
-  <syscall name="ppoll" number="298"/>
-  <syscall name="unshare" number="299"/>
-  <syscall name="set_robust_list" number="300"/>
-  <syscall name="get_robust_list" number="301"/>
-  <syscall name="migrate_pages" number="302"/>
-  <syscall name="mbind" number="303"/>
-  <syscall name="get_mempolicy" number="304"/>
-  <syscall name="set_mempolicy" number="305"/>
-  <syscall name="kexec_load" number="306"/>
-  <syscall name="move_pages" number="307"/>
-  <syscall name="getcpu" number="308"/>
-  <syscall name="epoll_pwait" number="309"/>
-  <syscall name="utimensat" number="310"/>
-  <syscall name="signalfd" number="311"/>
-  <syscall name="timerfd_create" number="312"/>
-  <syscall name="eventfd" number="313"/>
-  <syscall name="fallocate" number="314"/>
-  <syscall name="timerfd_settime" number="315"/>
-  <syscall name="timerfd_gettime" number="316"/>
-  <syscall name="signalfd4" number="317"/>
-  <syscall name="eventfd2" number="318"/>
-  <syscall name="epoll_create1" number="319"/>
-  <syscall name="dup3" number="320"/>
-  <syscall name="pipe2" number="321"/>
-  <syscall name="inotify_init1" number="322"/>
-  <syscall name="accept4" number="323"/>
-  <syscall name="preadv" number="324"/>
-  <syscall name="pwritev" number="325"/>
-  <syscall name="rt_tgsigqueueinfo" number="326"/>
-  <syscall name="perf_event_open" number="327"/>
-  <syscall name="recvmmsg" number="328"/>
-</syscalls_info>
diff --git a/share/gdb/system-gdbinit/elinos.py b/share/gdb/system-gdbinit/elinos.py
deleted file mode 100644
index cd35aed..0000000
--- a/share/gdb/system-gdbinit/elinos.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright (C) 2011-2014 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/>.
-
-"""Configure GDB using the ELinOS environment."""
-
-import os
-import glob
-import gdb
-
-
-def warn(msg):
-    print "warning: %s" % msg
-
-
-def get_elinos_environment():
-    """Return the ELinOS environment.
-
-    If the ELinOS environment is properly set up, return a dictionary
-    which contains:
-      * The path to the ELinOS project at key 'project';
-      * The path to the ELinOS CDK at key 'cdk';
-      * The ELinOS target name at key 'target' (Eg. 'i486-linux');
-      * A list of Xenomai install prefixes (which could be empty, if
-        the ELinOS project does not include Xenomai) at key 'xenomai'.
-
-    If one of these cannot be found, print a warning; the corresponding
-    value in the returned dictionary will be None.
-    """
-    result = {}
-    for key in ("project", "cdk", "target"):
-        var = "ELINOS_" + key.upper()
-        if var in os.environ:
-            result[key] = os.environ[var]
-        else:
-            warn("%s not set" % var)
-            result[key] = None
-
-    if result["project"] is not None:
-        result["xenomai"] = glob.glob(result["project"] + "/xenomai-[0-9.]*")
-    else:
-        result["xenomai"] = []
-
-    return result
-
-
-def elinos_init():
-    """Initialize debugger environment for ELinOS.
-
-    Let the debugger know where to find the ELinOS libraries on host. This
-    assumes that an ELinOS environment is properly set up. If some environment
-    variables are missing, warn about which library may be missing.
-    """
-    elinos_env = get_elinos_environment()
-
-    solib_dirs = []
-
-    # System libraries
-    if None in (elinos_env[key] for key in ("cdk", "target")):
-        warn("ELinOS system libraries will not be loaded")
-    else:
-        solib_prefix = "%s/%s" % (elinos_env["cdk"], elinos_env["target"])
-        solib_dirs += ["%s/%s" % (solib_prefix, "lib")]
-        gdb.execute("set solib-absolute-prefix %s" % solib_prefix)
-
-    # Xenomai libraries. Those are optional, so have a lighter warning
-    # if they cannot be located.
-    if elinos_env["project"] is None:
-        warn("Xenomai libraries may not be loaded")
-    else:
-        for dir in elinos_env['xenomai']:
-            solib_dirs += ["%s/%s"
-                           % (dir, "xenomai-build/usr/realtime/lib")]
-
-    if len(solib_dirs) != 0:
-        gdb.execute("set solib-search-path %s" % ":".join(solib_dirs))
-
-
-if __name__ == "__main__":
-    elinos_init()
diff --git a/share/gdb/system-gdbinit/wrs-linux.py b/share/gdb/system-gdbinit/wrs-linux.py
deleted file mode 100644
index 54ec9ec..0000000
--- a/share/gdb/system-gdbinit/wrs-linux.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (C) 2011-2014 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/>.
-
-"""Configure GDB using the WRS/Linux environment."""
-
-import os
-
-if 'ENV_PREFIX' in os.environ:
-    gdb.execute('set sysroot %s' % os.environ['ENV_PREFIX'])
-
-else:
-    print "warning: ENV_PREFIX environment variable missing."
-    print "The debugger will probably be unable to find the correct system libraries"
