Merge "[linux-x86] Refresh gcc prebuilts for arm Refresh gcc 4.9 prebuilts for arm. This new prebuilts: (1) provide corex-a53 erranum 835769 workaround, (2) fix a few compiler bugs."
diff --git a/SOURCES b/SOURCES
new file mode 100644
index 0000000..2d9b19e
--- /dev/null
+++ b/SOURCES
@@ -0,0 +1,53 @@
+Using built-in specs.
+COLLECT_GCC=bin/arm-linux-androideabi-gcc
+COLLECT_LTO_WRAPPER=/usr/local/google/home/xur/work/AOSP_CP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/../libexec/gcc/arm-linux-androideabi/4.9.x-google/lto-wrapper
+Target: arm-linux-androideabi
+Configured with: /tmp/AOSP-toolchain/build/../gcc/gcc-4.9/configure --prefix=/tmp/ndk-xur/build/toolchain/prefix --target=arm-linux-androideabi --host=x86_64-linux-gnu --build=x86_64-linux-gnu --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/tmp/ndk-xur/build/toolchain/temp-install --with-mpfr=/tmp/ndk-xur/build/toolchain/temp-install --with-mpc=/tmp/ndk-xur/build/toolchain/temp-install --with-cloog=/tmp/ndk-xur/build/toolchain/temp-install --with-isl=/tmp/ndk-xur/build/toolchain/temp-install --with-ppl=/tmp/ndk-xur/build/toolchain/temp-install --disable-ppl-version-check --disable-cloog-version-check --disable-isl-version-check --enable-cloog-backend=isl --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared --disable-tls --disable-libitm --with-float=soft --with-fpu=vfp --with-arch=armv5te --enable-target-optspace --enable-initfini-array --disable-nls --prefix=/tmp/ndk-xur/build/toolchain/prefix --with-sysroot=/tmp/ndk-xur/build/toolchain/prefix/sysroot --with-binutils-version=2.24 --with-mpfr-version=3.1.1 --with-mpc-version=1.0.1 --with-gmp-version=5.0.5 --with-gcc-version=4.9 --with-gdb-version=7.7 --with-gxx-include-dir=/tmp/ndk-xur/build/toolchain/prefix/include/c++/4.9 --with-bugurl=http://source.android.com/source/report-bugs.html --disable-bootstrap --disable-libquadmath --enable-plugins --enable-libgomp --disable-libsanitizer --enable-gold --enable-graphite=yes --with-cloog-version=0.18.0 --with-isl-version=0.11.1 --enable-eh-frame-hdr-for-static --with-arch=armv5te --program-transform-name='s&^&arm-linux-androideabi-&' --enable-gold=default
+Thread model: posix
+gcc version 4.9.x-google 20140827 (prerelease) (GCC) 
+
+gcc:
+commit ba21122c63b06a70b620c8990c517b87198ad05b
+Author: Rong Xu <xur@google.com>
+
+    [4.9] Restore recog state after finding pre-madd instruction.
+    This patch backports svn r216853 from upsteam gcc-4.9 branch that
+    fixed a bug introduced in fixing cortex a53 erratum 835769.
+
+binutils:
+commit c8e1636493f7d40bb0ba37501e9a6f67cd062a31
+Author: Rong Xu <xur@google.com>
+
+    [2.24] Cortex-A53 erratum 835769 linker workaround
+
+gdb:
+commit 4d4fc852868e03aa125d19ec0ad7e7fbc157c81c
+Merge: 500f3b2 668248d
+Author: Andrew Hsieh <andrewhsieh@google.com>
+
+    Merge "Add MIPS R6 support."
+
+gmp:
+commit e6b9669dafc6a5f83c80b4b4176359b78bccdc90
+Author: David 'Digit' Turner <digit@google.com>
+
+    Add gmp-5.0.5.tar.bz2
+
+mpfr:
+commit bfcf1bfa38469208aaad8873cd4c68781061d90f
+Author: Andrew Hsieh <andrewhsieh@google.com>
+
+    add mpfr-3.1.1.tar.bz2
+
+build:
+commit 75542e77b565c2af968e48c1b12b32f343d913ae
+Author: Andrew Hsieh <andrewhsieh@google.com>
+
+    Fix binutils-2.24 detection
+
+expat:
+commit 40172a0ae9d40a068f1e1a48ffcf6a1ccf765ed5
+Author: Jing Yu <jingyu@google.com>
+
+    expat package for building gdb-7.3
+
diff --git a/arm-linux-androideabi/lib/armv7-a/hard/libatomic.a b/arm-linux-androideabi/lib/armv7-a/hard/libatomic.a
index 1d38efe..b4b53ed 100644
--- a/arm-linux-androideabi/lib/armv7-a/hard/libatomic.a
+++ b/arm-linux-androideabi/lib/armv7-a/hard/libatomic.a
Binary files differ
diff --git a/arm-linux-androideabi/lib/armv7-a/hard/libgomp.a b/arm-linux-androideabi/lib/armv7-a/hard/libgomp.a
index 3978f63..7f28153 100644
--- a/arm-linux-androideabi/lib/armv7-a/hard/libgomp.a
+++ b/arm-linux-androideabi/lib/armv7-a/hard/libgomp.a
Binary files differ
diff --git a/arm-linux-androideabi/lib/armv7-a/libatomic.a b/arm-linux-androideabi/lib/armv7-a/libatomic.a
index cff305d..29501b5 100644
--- a/arm-linux-androideabi/lib/armv7-a/libatomic.a
+++ b/arm-linux-androideabi/lib/armv7-a/libatomic.a
Binary files differ
diff --git a/arm-linux-androideabi/lib/armv7-a/libgomp.a b/arm-linux-androideabi/lib/armv7-a/libgomp.a
index 449462a..9c4bf52 100644
--- a/arm-linux-androideabi/lib/armv7-a/libgomp.a
+++ b/arm-linux-androideabi/lib/armv7-a/libgomp.a
Binary files differ
diff --git a/arm-linux-androideabi/lib/armv7-a/thumb/hard/libatomic.a b/arm-linux-androideabi/lib/armv7-a/thumb/hard/libatomic.a
index eba8869..2d7ff4e 100644
--- a/arm-linux-androideabi/lib/armv7-a/thumb/hard/libatomic.a
+++ b/arm-linux-androideabi/lib/armv7-a/thumb/hard/libatomic.a
Binary files differ
diff --git a/arm-linux-androideabi/lib/armv7-a/thumb/hard/libgomp.a b/arm-linux-androideabi/lib/armv7-a/thumb/hard/libgomp.a
index 6dbab06..b2cea0d 100644
--- a/arm-linux-androideabi/lib/armv7-a/thumb/hard/libgomp.a
+++ b/arm-linux-androideabi/lib/armv7-a/thumb/hard/libgomp.a
Binary files differ
diff --git a/arm-linux-androideabi/lib/armv7-a/thumb/libatomic.a b/arm-linux-androideabi/lib/armv7-a/thumb/libatomic.a
index f4eae27..bc95f9f 100644
--- a/arm-linux-androideabi/lib/armv7-a/thumb/libatomic.a
+++ b/arm-linux-androideabi/lib/armv7-a/thumb/libatomic.a
Binary files differ
diff --git a/arm-linux-androideabi/lib/armv7-a/thumb/libgomp.a b/arm-linux-androideabi/lib/armv7-a/thumb/libgomp.a
index efc2811..ae5d239 100644
--- a/arm-linux-androideabi/lib/armv7-a/thumb/libgomp.a
+++ b/arm-linux-androideabi/lib/armv7-a/thumb/libgomp.a
Binary files differ
diff --git a/arm-linux-androideabi/lib/libatomic.a b/arm-linux-androideabi/lib/libatomic.a
index d4a7e40..dcc5a9d 100644
--- a/arm-linux-androideabi/lib/libatomic.a
+++ b/arm-linux-androideabi/lib/libatomic.a
Binary files differ
diff --git a/arm-linux-androideabi/lib/libgomp.a b/arm-linux-androideabi/lib/libgomp.a
index fb61f19..ad79628 100644
--- a/arm-linux-androideabi/lib/libgomp.a
+++ b/arm-linux-androideabi/lib/libgomp.a
Binary files differ
diff --git a/arm-linux-androideabi/lib/thumb/libatomic.a b/arm-linux-androideabi/lib/thumb/libatomic.a
index a65d96c..d3341a8 100644
--- a/arm-linux-androideabi/lib/thumb/libatomic.a
+++ b/arm-linux-androideabi/lib/thumb/libatomic.a
Binary files differ
diff --git a/arm-linux-androideabi/lib/thumb/libgomp.a b/arm-linux-androideabi/lib/thumb/libgomp.a
index 0f43f02..0b56e5a 100644
--- a/arm-linux-androideabi/lib/thumb/libgomp.a
+++ b/arm-linux-androideabi/lib/thumb/libgomp.a
Binary files differ
diff --git a/bin/arm-linux-androideabi-addr2line b/bin/arm-linux-androideabi-addr2line
index e10ac55..cfb2a4c 100755
--- a/bin/arm-linux-androideabi-addr2line
+++ b/bin/arm-linux-androideabi-addr2line
Binary files differ
diff --git a/bin/arm-linux-androideabi-ar b/bin/arm-linux-androideabi-ar
index f63d4a9..b3f8eae 100755
--- a/bin/arm-linux-androideabi-ar
+++ b/bin/arm-linux-androideabi-ar
Binary files differ
diff --git a/bin/arm-linux-androideabi-as b/bin/arm-linux-androideabi-as
index 55a80f4..069f232 100755
--- a/bin/arm-linux-androideabi-as
+++ b/bin/arm-linux-androideabi-as
Binary files differ
diff --git a/bin/arm-linux-androideabi-c++filt b/bin/arm-linux-androideabi-c++filt
index e335886..2b27e73 100755
--- a/bin/arm-linux-androideabi-c++filt
+++ b/bin/arm-linux-androideabi-c++filt
Binary files differ
diff --git a/bin/arm-linux-androideabi-cpp b/bin/arm-linux-androideabi-cpp
index c4649af..9977df9 100755
--- a/bin/arm-linux-androideabi-cpp
+++ b/bin/arm-linux-androideabi-cpp
Binary files differ
diff --git a/bin/arm-linux-androideabi-dwp b/bin/arm-linux-androideabi-dwp
index 00343b3..d1b4cd5 100755
--- a/bin/arm-linux-androideabi-dwp
+++ b/bin/arm-linux-androideabi-dwp
Binary files differ
diff --git a/bin/arm-linux-androideabi-elfedit b/bin/arm-linux-androideabi-elfedit
index 8eedeab..349664b 100755
--- a/bin/arm-linux-androideabi-elfedit
+++ b/bin/arm-linux-androideabi-elfedit
Binary files differ
diff --git a/bin/arm-linux-androideabi-g++ b/bin/arm-linux-androideabi-g++
index 4234417..7665326 100755
--- a/bin/arm-linux-androideabi-g++
+++ b/bin/arm-linux-androideabi-g++
Binary files differ
diff --git a/bin/arm-linux-androideabi-gcc b/bin/arm-linux-androideabi-gcc
index c97bf9f..cefef43 100755
--- a/bin/arm-linux-androideabi-gcc
+++ b/bin/arm-linux-androideabi-gcc
Binary files differ
diff --git a/bin/arm-linux-androideabi-gcc-4.9.x-google b/bin/arm-linux-androideabi-gcc-4.9.x-google
index c97bf9f..cefef43 100755
--- a/bin/arm-linux-androideabi-gcc-4.9.x-google
+++ b/bin/arm-linux-androideabi-gcc-4.9.x-google
Binary files differ
diff --git a/bin/arm-linux-androideabi-gcov b/bin/arm-linux-androideabi-gcov
index 0dfd176..2cad5fd 100755
--- a/bin/arm-linux-androideabi-gcov
+++ b/bin/arm-linux-androideabi-gcov
Binary files differ
diff --git a/bin/arm-linux-androideabi-gcov-tool b/bin/arm-linux-androideabi-gcov-tool
index 862a03d..f0da92f 100755
--- a/bin/arm-linux-androideabi-gcov-tool
+++ b/bin/arm-linux-androideabi-gcov-tool
Binary files differ
diff --git a/bin/arm-linux-androideabi-gdb b/bin/arm-linux-androideabi-gdb
index 451e0f8..c8b2021 100755
--- a/bin/arm-linux-androideabi-gdb
+++ b/bin/arm-linux-androideabi-gdb
Binary files differ
diff --git a/bin/arm-linux-androideabi-gprof b/bin/arm-linux-androideabi-gprof
index 71b04d0..09d5651 100755
--- a/bin/arm-linux-androideabi-gprof
+++ b/bin/arm-linux-androideabi-gprof
Binary files differ
diff --git a/bin/arm-linux-androideabi-ld.bfd b/bin/arm-linux-androideabi-ld.bfd
index 9b0ca49..5697ffb 100755
--- a/bin/arm-linux-androideabi-ld.bfd
+++ b/bin/arm-linux-androideabi-ld.bfd
Binary files differ
diff --git a/bin/arm-linux-androideabi-ld.gold b/bin/arm-linux-androideabi-ld.gold
index b475f1f..5cf5a72 100755
--- a/bin/arm-linux-androideabi-ld.gold
+++ b/bin/arm-linux-androideabi-ld.gold
Binary files differ
diff --git a/bin/arm-linux-androideabi-nm b/bin/arm-linux-androideabi-nm
index 74efd8e..a838196 100755
--- a/bin/arm-linux-androideabi-nm
+++ b/bin/arm-linux-androideabi-nm
Binary files differ
diff --git a/bin/arm-linux-androideabi-objcopy b/bin/arm-linux-androideabi-objcopy
index 7ceec7e..5f01a62 100755
--- a/bin/arm-linux-androideabi-objcopy
+++ b/bin/arm-linux-androideabi-objcopy
Binary files differ
diff --git a/bin/arm-linux-androideabi-objdump b/bin/arm-linux-androideabi-objdump
index 9ebbbec..81561c8 100755
--- a/bin/arm-linux-androideabi-objdump
+++ b/bin/arm-linux-androideabi-objdump
Binary files differ
diff --git a/bin/arm-linux-androideabi-ranlib b/bin/arm-linux-androideabi-ranlib
index e6ad4cc..4d9cd3b 100755
--- a/bin/arm-linux-androideabi-ranlib
+++ b/bin/arm-linux-androideabi-ranlib
Binary files differ
diff --git a/bin/arm-linux-androideabi-readelf b/bin/arm-linux-androideabi-readelf
index 968f52a..33f8662 100755
--- a/bin/arm-linux-androideabi-readelf
+++ b/bin/arm-linux-androideabi-readelf
Binary files differ
diff --git a/bin/arm-linux-androideabi-size b/bin/arm-linux-androideabi-size
index 2eddf00..fb17ff6 100755
--- a/bin/arm-linux-androideabi-size
+++ b/bin/arm-linux-androideabi-size
Binary files differ
diff --git a/bin/arm-linux-androideabi-strings b/bin/arm-linux-androideabi-strings
index 7be47c6..2258d17 100755
--- a/bin/arm-linux-androideabi-strings
+++ b/bin/arm-linux-androideabi-strings
Binary files differ
diff --git a/bin/arm-linux-androideabi-strip b/bin/arm-linux-androideabi-strip
index cbb9fea..a0277b2 100755
--- a/bin/arm-linux-androideabi-strip
+++ b/bin/arm-linux-androideabi-strip
Binary files differ
diff --git a/include/gdb/jit-reader.h b/include/gdb/jit-reader.h
index 7cff81a..e9599a2 100644
--- a/include/gdb/jit-reader.h
+++ b/include/gdb/jit-reader.h
@@ -1,6 +1,6 @@
 /* JIT declarations for GDB, the GNU Debugger.
 
-   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   Copyright (C) 2011-2014 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/crtbegin.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/crtbegin.o
index 3a122ac..c96be3c 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/crtbegin.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/crtbegin.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/crtbeginS.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/crtbeginS.o
index 285a463..1bd23a7 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/crtbeginS.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/crtbeginT.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/crtbeginT.o
index 3a122ac..c96be3c 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/crtbeginT.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/crtbegin.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/crtbegin.o
index 0157718..f116956 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/crtbegin.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/crtbegin.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/crtbeginS.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/crtbeginS.o
index 6bbdcfb..337ed54 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/crtbeginS.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/crtbeginT.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/crtbeginT.o
index 0157718..f116956 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/crtbeginT.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/libgcc.a b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/libgcc.a
index c430f1e..c971dbb 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/libgcc.a
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/libgcc.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/libgcov.a b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/libgcov.a
index 3bf4e16..92885c6 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/libgcov.a
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/hard/libgcov.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/libgcc.a b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/libgcc.a
index 9f5b644..d5263e0 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/libgcc.a
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/libgcc.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/libgcov.a b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/libgcov.a
index 9f08a52..b54d58c 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/libgcov.a
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/libgcov.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/crtbegin.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/crtbegin.o
index 7b721f3..e5e2b70 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/crtbegin.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/crtbegin.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/crtbeginS.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/crtbeginS.o
index a2edda6..489bfe1 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/crtbeginS.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/crtbeginT.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/crtbeginT.o
index 7b721f3..e5e2b70 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/crtbeginT.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/crtbegin.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/crtbegin.o
index 85e43a2..6ab4767 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/crtbegin.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/crtbegin.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/crtbeginS.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/crtbeginS.o
index c7e3fba..fb007e5 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/crtbeginS.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/crtbeginT.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/crtbeginT.o
index 85e43a2..6ab4767 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/crtbeginT.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/libgcc.a b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/libgcc.a
index 1200890..e402797 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/libgcc.a
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/libgcc.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/libgcov.a b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/libgcov.a
index 9353146..0aa0063 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/libgcov.a
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/hard/libgcov.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/libgcc.a b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/libgcc.a
index c897efc..995839f 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/libgcc.a
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/libgcc.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/libgcov.a b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/libgcov.a
index 55e7cea..7740325 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/libgcov.a
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/thumb/libgcov.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/crtbegin.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/crtbegin.o
index 70e314f..ae3cdaf 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/crtbegin.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/crtbegin.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/crtbeginS.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/crtbeginS.o
index adceac9..30f2354 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/crtbeginS.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/crtbeginT.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/crtbeginT.o
index 70e314f..ae3cdaf 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/crtbeginT.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/libgcc.a b/lib/gcc/arm-linux-androideabi/4.9.x-google/libgcc.a
index 1d48aef..465615b 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/libgcc.a
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/libgcc.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/libgcov.a b/lib/gcc/arm-linux-androideabi/4.9.x-google/libgcov.a
index 6753695..f9893a7 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/libgcov.a
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/libgcov.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/crtbegin.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/crtbegin.o
index 7e34f33..25c4630 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/crtbegin.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/crtbegin.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/crtbeginS.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/crtbeginS.o
index 15c6854..a8ac9f9 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/crtbeginS.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/crtbeginS.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/crtbeginT.o b/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/crtbeginT.o
index 7e34f33..25c4630 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/crtbeginT.o
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/crtbeginT.o
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/libgcc.a b/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/libgcc.a
index 3e14f32..e09414e 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/libgcc.a
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/libgcc.a
Binary files differ
diff --git a/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/libgcov.a b/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/libgcov.a
index 908719a..0ddf64e 100644
--- a/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/libgcov.a
+++ b/lib/gcc/arm-linux-androideabi/4.9.x-google/thumb/libgcov.a
Binary files differ
diff --git a/lib/libarm-linux-android-sim.a b/lib/libarm-linux-android-sim.a
index 6eb2635..e004616 100644
--- a/lib/libarm-linux-android-sim.a
+++ b/lib/libarm-linux-android-sim.a
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.9.x-google/cc1 b/libexec/gcc/arm-linux-androideabi/4.9.x-google/cc1
index d858335..1cd364a 100755
--- a/libexec/gcc/arm-linux-androideabi/4.9.x-google/cc1
+++ b/libexec/gcc/arm-linux-androideabi/4.9.x-google/cc1
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.9.x-google/cc1plus b/libexec/gcc/arm-linux-androideabi/4.9.x-google/cc1plus
index 9128fa4..5cb7b10 100755
--- a/libexec/gcc/arm-linux-androideabi/4.9.x-google/cc1plus
+++ b/libexec/gcc/arm-linux-androideabi/4.9.x-google/cc1plus
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.9.x-google/collect2 b/libexec/gcc/arm-linux-androideabi/4.9.x-google/collect2
index f0d007d..f7ec966 100755
--- a/libexec/gcc/arm-linux-androideabi/4.9.x-google/collect2
+++ b/libexec/gcc/arm-linux-androideabi/4.9.x-google/collect2
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.9.x-google/libfunction_reordering_plugin.so.0.0.0 b/libexec/gcc/arm-linux-androideabi/4.9.x-google/libfunction_reordering_plugin.so.0.0.0
index 1f2391a..b518b9f 100755
--- a/libexec/gcc/arm-linux-androideabi/4.9.x-google/libfunction_reordering_plugin.so.0.0.0
+++ b/libexec/gcc/arm-linux-androideabi/4.9.x-google/libfunction_reordering_plugin.so.0.0.0
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.9.x-google/liblto_plugin.so.0.0.0 b/libexec/gcc/arm-linux-androideabi/4.9.x-google/liblto_plugin.so.0.0.0
index 20b5cfa..6143c15 100755
--- a/libexec/gcc/arm-linux-androideabi/4.9.x-google/liblto_plugin.so.0.0.0
+++ b/libexec/gcc/arm-linux-androideabi/4.9.x-google/liblto_plugin.so.0.0.0
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.9.x-google/lto-wrapper b/libexec/gcc/arm-linux-androideabi/4.9.x-google/lto-wrapper
index fa53c66..cc29c4c 100755
--- a/libexec/gcc/arm-linux-androideabi/4.9.x-google/lto-wrapper
+++ b/libexec/gcc/arm-linux-androideabi/4.9.x-google/lto-wrapper
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.9.x-google/lto1 b/libexec/gcc/arm-linux-androideabi/4.9.x-google/lto1
index 13740ea..b2060e5 100755
--- a/libexec/gcc/arm-linux-androideabi/4.9.x-google/lto1
+++ b/libexec/gcc/arm-linux-androideabi/4.9.x-google/lto1
Binary files differ
diff --git a/libexec/gcc/arm-linux-androideabi/4.9.x-google/plugin/gengtype b/libexec/gcc/arm-linux-androideabi/4.9.x-google/plugin/gengtype
index 5b20dc9..6e5352a 100755
--- a/libexec/gcc/arm-linux-androideabi/4.9.x-google/plugin/gengtype
+++ b/libexec/gcc/arm-linux-androideabi/4.9.x-google/plugin/gengtype
Binary files differ
diff --git a/share/gdb/python/gdb/FrameDecorator.py b/share/gdb/python/gdb/FrameDecorator.py
new file mode 100644
index 0000000..1bbc5ab
--- /dev/null
+++ b/share/gdb/python/gdb/FrameDecorator.py
@@ -0,0 +1,302 @@
+# 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
new file mode 100644
index 0000000..c99a91e
--- /dev/null
+++ b/share/gdb/python/gdb/FrameIterator.py
@@ -0,0 +1,51 @@
+# 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
index 6311583..95a76c2 100644
--- a/share/gdb/python/gdb/__init__.py
+++ b/share/gdb/python/gdb/__init__.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2010-2013 Free Software Foundation, Inc.
+# 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
@@ -67,6 +67,8 @@
 
 # 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__))
diff --git a/share/gdb/python/gdb/command/__init__.py b/share/gdb/python/gdb/command/__init__.py
index 21eaef8..ca768c8 100644
--- a/share/gdb/python/gdb/command/__init__.py
+++ b/share/gdb/python/gdb/command/__init__.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2010-2013 Free Software Foundation, Inc.
+# 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
diff --git a/share/gdb/python/gdb/command/bound_registers.py b/share/gdb/python/gdb/command/bound_registers.py
new file mode 100644
index 0000000..24d4c45
--- /dev/null
+++ b/share/gdb/python/gdb/command/bound_registers.py
@@ -0,0 +1,45 @@
+# 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
index dd77875..fd79de3 100644
--- a/share/gdb/python/gdb/command/explore.py
+++ b/share/gdb/python/gdb/command/explore.py
@@ -1,5 +1,5 @@
 # GDB 'explore' command.
-# Copyright (C) 2012-2013 Free Software Foundation, Inc.
+# 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
diff --git a/share/gdb/python/gdb/command/frame_filters.py b/share/gdb/python/gdb/command/frame_filters.py
new file mode 100644
index 0000000..450c5bf
--- /dev/null
+++ b/share/gdb/python/gdb/command/frame_filters.py
@@ -0,0 +1,467 @@
+# 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
index 7b03e3a..a9027b3 100644
--- a/share/gdb/python/gdb/command/pretty_printers.py
+++ b/share/gdb/python/gdb/command/pretty_printers.py
@@ -1,5 +1,5 @@
 # Pretty-printer commands.
-# Copyright (C) 2010-2013 Free Software Foundation, Inc.
+# 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
diff --git a/share/gdb/python/gdb/command/prompt.py b/share/gdb/python/gdb/command/prompt.py
index 394e40c..e7dc3da 100644
--- a/share/gdb/python/gdb/command/prompt.py
+++ b/share/gdb/python/gdb/command/prompt.py
@@ -1,5 +1,5 @@
 # Extended prompt.
-# Copyright (C) 2011-2013 Free Software Foundation, Inc.
+# 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
diff --git a/share/gdb/python/gdb/command/type_printers.py b/share/gdb/python/gdb/command/type_printers.py
index 81f2ea1..9376be8 100644
--- a/share/gdb/python/gdb/command/type_printers.py
+++ b/share/gdb/python/gdb/command/type_printers.py
@@ -1,5 +1,5 @@
 # Type printer commands.
-# Copyright (C) 2010-2013 Free Software Foundation, Inc.
+# 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
diff --git a/share/gdb/python/gdb/frames.py b/share/gdb/python/gdb/frames.py
new file mode 100644
index 0000000..19172e7
--- /dev/null
+++ b/share/gdb/python/gdb/frames.py
@@ -0,0 +1,228 @@
+# 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
index 755bff9..bcfadc3 100644
--- a/share/gdb/python/gdb/function/__init__.py
+++ b/share/gdb/python/gdb/function/__init__.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2013 Free Software Foundation, Inc.
+# 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
diff --git a/share/gdb/python/gdb/function/strfns.py b/share/gdb/python/gdb/function/strfns.py
index efdf950..9e2ed79 100644
--- a/share/gdb/python/gdb/function/strfns.py
+++ b/share/gdb/python/gdb/function/strfns.py
@@ -1,5 +1,5 @@
 # Useful gdb string convenience functions.
-# Copyright (C) 2012-2013 Free Software Foundation, Inc.
+# 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
diff --git a/share/gdb/python/gdb/printing.py b/share/gdb/python/gdb/printing.py
index 785a407..80227c8 100644
--- a/share/gdb/python/gdb/printing.py
+++ b/share/gdb/python/gdb/printing.py
@@ -1,5 +1,5 @@
 # Pretty-printer utilities.
-# Copyright (C) 2010-2013 Free Software Foundation, Inc.
+# 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
diff --git a/share/gdb/python/gdb/prompt.py b/share/gdb/python/gdb/prompt.py
index bb1975b..d99f2ea 100644
--- a/share/gdb/python/gdb/prompt.py
+++ b/share/gdb/python/gdb/prompt.py
@@ -1,5 +1,5 @@
 # Extended prompt utilities.
-# Copyright (C) 2011-2013 Free Software Foundation, Inc.
+# 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
diff --git a/share/gdb/python/gdb/types.py b/share/gdb/python/gdb/types.py
index ffc817c..5fa4eab 100644
--- a/share/gdb/python/gdb/types.py
+++ b/share/gdb/python/gdb/types.py
@@ -1,5 +1,5 @@
 # Type utilities.
-# Copyright (C) 2010-2013 Free Software Foundation, Inc.
+# 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
diff --git a/share/gdb/syscalls/amd64-linux.xml b/share/gdb/syscalls/amd64-linux.xml
index bf3da5d..6a04218 100644
--- a/share/gdb/syscalls/amd64-linux.xml
+++ b/share/gdb/syscalls/amd64-linux.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2009-2013 Free Software Foundation, Inc.
+<!-- 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
diff --git a/share/gdb/syscalls/arm-linux.xml b/share/gdb/syscalls/arm-linux.xml
new file mode 100644
index 0000000..9d989bd
--- /dev/null
+++ b/share/gdb/syscalls/arm-linux.xml
@@ -0,0 +1,398 @@
+<?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
index 05c1ccf..3ad3625 100644
--- a/share/gdb/syscalls/gdb-syscalls.dtd
+++ b/share/gdb/syscalls/gdb-syscalls.dtd
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2009-2013 Free Software Foundation, Inc.
+<!-- 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
diff --git a/share/gdb/syscalls/i386-linux.xml b/share/gdb/syscalls/i386-linux.xml
index 80512d8..3d890bd 100644
--- a/share/gdb/syscalls/i386-linux.xml
+++ b/share/gdb/syscalls/i386-linux.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2009-2013 Free Software Foundation, Inc.
+<!-- 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
diff --git a/share/gdb/syscalls/mips-n32-linux.xml b/share/gdb/syscalls/mips-n32-linux.xml
index b4e2181..5c7a95d 100644
--- a/share/gdb/syscalls/mips-n32-linux.xml
+++ b/share/gdb/syscalls/mips-n32-linux.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2011-2013 Free Software Foundation, Inc.
+<!-- 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
diff --git a/share/gdb/syscalls/mips-n64-linux.xml b/share/gdb/syscalls/mips-n64-linux.xml
index 896e0c0..0a81573 100644
--- a/share/gdb/syscalls/mips-n64-linux.xml
+++ b/share/gdb/syscalls/mips-n64-linux.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2011-2013 Free Software Foundation, Inc.
+<!-- 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
diff --git a/share/gdb/syscalls/mips-o32-linux.xml b/share/gdb/syscalls/mips-o32-linux.xml
index 2b11247..97641b6 100644
--- a/share/gdb/syscalls/mips-o32-linux.xml
+++ b/share/gdb/syscalls/mips-o32-linux.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2011-2013 Free Software Foundation, Inc.
+<!-- 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
diff --git a/share/gdb/syscalls/ppc-linux.xml b/share/gdb/syscalls/ppc-linux.xml
index dd4eba6..b25d08c 100644
--- a/share/gdb/syscalls/ppc-linux.xml
+++ b/share/gdb/syscalls/ppc-linux.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2009-2013 Free Software Foundation, Inc.
+<!-- 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
diff --git a/share/gdb/syscalls/ppc64-linux.xml b/share/gdb/syscalls/ppc64-linux.xml
index ad56db1..c31415a 100644
--- a/share/gdb/syscalls/ppc64-linux.xml
+++ b/share/gdb/syscalls/ppc64-linux.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2009-2013 Free Software Foundation, Inc.
+<!-- 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
diff --git a/share/gdb/syscalls/sparc-linux.xml b/share/gdb/syscalls/sparc-linux.xml
index 7673621..24d8612 100644
--- a/share/gdb/syscalls/sparc-linux.xml
+++ b/share/gdb/syscalls/sparc-linux.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2013 Free Software Foundation, Inc.
+<!-- 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
diff --git a/share/gdb/syscalls/sparc64-linux.xml b/share/gdb/syscalls/sparc64-linux.xml
index 4403ca3..13c0cb7 100644
--- a/share/gdb/syscalls/sparc64-linux.xml
+++ b/share/gdb/syscalls/sparc64-linux.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2013 Free Software Foundation, Inc.
+<!-- 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
diff --git a/share/gdb/system-gdbinit/elinos.py b/share/gdb/system-gdbinit/elinos.py
new file mode 100644
index 0000000..cd35aed
--- /dev/null
+++ b/share/gdb/system-gdbinit/elinos.py
@@ -0,0 +1,91 @@
+# 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
new file mode 100644
index 0000000..54ec9ec
--- /dev/null
+++ b/share/gdb/system-gdbinit/wrs-linux.py
@@ -0,0 +1,25 @@
+# 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"