diff --git a/valgrind-3.13.0-arm-index-hardwire.patch b/valgrind-3.13.0-arm-index-hardwire.patch
new file mode 100644
index 0000000..4b718e3
--- /dev/null
+++ b/valgrind-3.13.0-arm-index-hardwire.patch
@@ -0,0 +1,86 @@
+diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c
+index b8cc022..d54cae7 100644
+--- a/coregrind/m_redir.c
++++ b/coregrind/m_redir.c
+@@ -1485,6 +1485,17 @@ void VG_(redir_initialise) ( void )
+          (Addr)&VG_(arm_linux_REDIR_FOR_strcmp),
+          complain_about_stripped_glibc_ldso
+       );
++      /* index */
++      add_hardwired_spec(
++         "ld-linux.so.3", "index",
++         (Addr)&VG_(arm_linux_REDIR_FOR_index),
++         complain_about_stripped_glibc_ldso
++      );
++      add_hardwired_spec(
++         "ld-linux-armhf.so.3", "index",
++         (Addr)&VG_(arm_linux_REDIR_FOR_index),
++         complain_about_stripped_glibc_ldso
++      );
+    }
+ 
+ #  elif defined(VGP_arm64_linux)
+diff --git a/coregrind/m_trampoline.S b/coregrind/m_trampoline.S
+index a532071..0488b54 100644
+--- a/coregrind/m_trampoline.S
++++ b/coregrind/m_trampoline.S
+@@ -625,26 +625,26 @@ VG_(arm_linux_REDIR_FOR_strlen):
+ 	bx	lr
+ 	UD2_4
+ 
+-//.global VG_(arm_linux_REDIR_FOR_index)
+-//VG_(arm_linux_REDIR_FOR_index):
+-//	ldrb	r3, [r0, #0]	@ zero_extendqisi2
+-//	and	r1, r1, #255
+-//	cmp	r3, r1
+-//	@ lr needed for prologue
+-//	bne	.L9
+-//	bx	lr
+-//.L12:
+-//	ldrb	r3, [r0, #1]!	@ zero_extendqisi2
+-//	cmp	r3, r1
+-//	beq	.L11
+-//.L9:
+-//	cmp	r3, #0
+-//	bne	.L12
+-//	mov	r0, #0
+-//	bx	lr
+-//.L11:
+-//	bx	lr
+-//	UD2_4
++.global VG_(arm_linux_REDIR_FOR_index)
++VG_(arm_linux_REDIR_FOR_index):
++	ldrb	r3, [r0, #0]	@ zero_extendqisi2
++	and	r1, r1, #255
++	cmp	r3, r1
++	@ lr needed for prologue
++	bne	.L9
++	bx	lr
++.L12:
++	ldrb	r3, [r0, #1]!	@ zero_extendqisi2
++	cmp	r3, r1
++	beq	.L11
++.L9:
++	cmp	r3, #0
++	bne	.L12
++	mov	r0, #0
++	bx	lr
++.L11:
++	bx	lr
++	UD2_4
+ 
+ .global VG_(arm_linux_REDIR_FOR_memcpy)
+ VG_(arm_linux_REDIR_FOR_memcpy):
+diff --git a/coregrind/pub_core_trampoline.h b/coregrind/pub_core_trampoline.h
+index 3a9bafe..e29427d 100644
+--- a/coregrind/pub_core_trampoline.h
++++ b/coregrind/pub_core_trampoline.h
+@@ -100,7 +100,7 @@ extern Addr VG_(ppctoc_magic_redirect_return_stub);
+ extern Addr  VG_(arm_linux_SUBST_FOR_sigreturn);
+ extern Addr  VG_(arm_linux_SUBST_FOR_rt_sigreturn);
+ extern UInt  VG_(arm_linux_REDIR_FOR_strlen)( void* );
+-//extern void* VG_(arm_linux_REDIR_FOR_index) ( void*, Int );
++extern void* VG_(arm_linux_REDIR_FOR_index) ( void*, Int );
+ extern void* VG_(arm_linux_REDIR_FOR_memcpy)( void*, void*, Int );
+ extern void* VG_(arm_linux_REDIR_FOR_strcmp)( void*, void* );
+ #endif
diff --git a/valgrind-3.13.0-disable-vgdb-child.patch b/valgrind-3.13.0-disable-vgdb-child.patch
new file mode 100644
index 0000000..4f9537a
--- /dev/null
+++ b/valgrind-3.13.0-disable-vgdb-child.patch
@@ -0,0 +1,36 @@
+commit 59af5db9c15d8ea03c1521736fb1f107d66bce08
+Author: philippe <philippe@a5019735-40e9-0310-863c-91ae7b9d1cf9>
+Date:   Sun Jun 25 20:25:50 2017 +0000
+
+    After fork, vgdb activity is polled according to the nr of bbs done :
+    once the nr of bbs done reaches the next vgdb poll, a check for vgdb
+    activity is done.
+    This might lead to the activation of gdbserver after fork.
+    Such poll is however not expected, unless the children is
+    to be trace.
+    This spurious poll in the forked child can cause failures
+    depending on the nr of bbs done before the fork, and the
+    nr of bbs done between the fork and the exec.
+    
+    => disable vgdb poll in the child in the cleanup after fork
+    in the child, unless the children have to be traced.
+    
+    
+    
+    git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16454 a5019735-40e9-0310-863c-91ae7b9d1cf9
+
+diff --git a/coregrind/m_gdbserver/m_gdbserver.c b/coregrind/m_gdbserver/m_gdbserver.c
+index 87fbce2..648d543 100644
+--- a/coregrind/m_gdbserver/m_gdbserver.c
++++ b/coregrind/m_gdbserver/m_gdbserver.c
+@@ -646,6 +646,10 @@ static void gdbserver_cleanup_in_child_after_fork(ThreadId me)
+    
+    if (VG_(clo_trace_children)) {
+       VG_(gdbserver_prerun_action) (me);
++   } else {
++      /* After fork, if we do not trace the children, disable vgdb
++         poll to avoid gdbserver being called unexpectedly. */
++      VG_(disable_vgdb_poll) ();
+    }
+ }
+ 
diff --git a/valgrind-3.13.0-gdb-8-testfix.patch b/valgrind-3.13.0-gdb-8-testfix.patch
new file mode 100644
index 0000000..f34da04
--- /dev/null
+++ b/valgrind-3.13.0-gdb-8-testfix.patch
@@ -0,0 +1,183 @@
+commit 21788250c945713fa25c16f2683e1f9cd0bb6ccf
+Author: philippe <philippe@a5019735-40e9-0310-863c-91ae7b9d1cf9>
+Date:   Sun Jun 25 12:40:53 2017 +0000
+
+    Fix some tests failure with GDB 8.0
+    
+    At the beginning of a Valgrind gdbserver test,
+    2 messages are produced when launching the command
+       target remote | vgdb
+    
+    A message output by vgdb:
+       relaying data between gdb and process <pid>
+    (this message is read by GDB from the vgdb pipe, and re-output
+    on stderr)
+    and a message produced by GDB:
+       Remote debugging using | ./vgdb
+    
+    GDB 8.0 changes the order in which the above messages are output.
+    This causes 2 tests to fail, as the 'relaying' line appears
+    then in a part of the output deleted by a filter script.
+    
+    To avoid this, change the filter scripts to always remove
+    this 'relaying line', which is not particularly interesting to check.
+    All the .exp files containining such a 'relaying' line are updated
+    accordingly.
+    
+    This has been tested with various gdb versions (7.5, 7.7, 7.12, 8.0)
+    on amd64 and/or ppc64.
+    
+    Thanks to Mark Wielaard, which helped to investigate this problem
+    by bisecting the GDB patches in GDB 8.0 causing this change of
+    behaviour.
+    
+    
+    
+    
+    git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16453 a5019735-40e9-0310-863c-91ae7b9d1cf9
+
+diff --git a/gdbserver_tests/filter_gdb b/gdbserver_tests/filter_gdb
+index 7177720..ed78cfe 100755
+--- a/gdbserver_tests/filter_gdb
++++ b/gdbserver_tests/filter_gdb
+@@ -72,7 +72,7 @@ sed -e '/Remote debugging using/,/vgdb launched process attached/d'
+     -e '/^Missing separate debuginfo/d'                                                               \
+     -e '/\/_exit.c: No such file or directory/d'                                                      \
+     -e '/^Try: zypper install -C/d'                                                                   \
+-    -e 's/\(relaying data between gdb and process \)[0-9][0-9]*/\1..../'                              \
++    -e '/relaying data between gdb and process/d'                                                     \
+     -e 's/pid [0-9][0-9]*/pid ..../g'                                                                 \
+     -e 's/Thread [0-9][0-9]*/Thread ..../g'                                                           \
+     -e '/\[Switching to Thread ....\]/d'                                                              \
+diff --git a/gdbserver_tests/filter_vgdb b/gdbserver_tests/filter_vgdb
+index 2442ec5..f8028a3 100755
+--- a/gdbserver_tests/filter_vgdb
++++ b/gdbserver_tests/filter_vgdb
+@@ -11,7 +11,7 @@ $dir/../tests/filter_addresses                  |
+ #             pid
+ # gdb 7.2 sometimes tries to access address 0x0 (same as with standard gdbserver)
+ # filter a debian 6.0/ppc32 line
+-sed -e 's/\(relaying data between gdb and process \)[0-9][0-9]*/\1..../' \
++sed -e '/relaying data between gdb and process/d'                        \
+     -e 's/\(sending command .* to pid \)[0-9][0-9]*/\1..../'             \
+     -e '/Cannot access memory at address 0x......../d'                   \
+     -e '/^[1-9][0-9]*	\.\.\/sysdeps\/powerpc\/powerpc32\/dl-start\.S: No such file or directory\./d' |
+diff --git a/gdbserver_tests/hginfo.stderrB.exp b/gdbserver_tests/hginfo.stderrB.exp
+index df47f11..669ff92 100644
+--- a/gdbserver_tests/hginfo.stderrB.exp
++++ b/gdbserver_tests/hginfo.stderrB.exp
+@@ -1,4 +1,3 @@
+-relaying data between gdb and process ....
+ vgdb-error value changed from 0 to 999999
+ Lock ga 0x........ {
+  Address 0x........ is 0 bytes inside data symbol "mx"
+diff --git a/gdbserver_tests/mcblocklistsearch.stderrB.exp b/gdbserver_tests/mcblocklistsearch.stderrB.exp
+index 312d776..1313321 100644
+--- a/gdbserver_tests/mcblocklistsearch.stderrB.exp
++++ b/gdbserver_tests/mcblocklistsearch.stderrB.exp
+@@ -1,4 +1,3 @@
+-relaying data between gdb and process ....
+ vgdb-error value changed from 0 to 999999
+ Breakpoint 1 at 0x........: file leak-tree.c, line 42.
+ Breakpoint 2 at 0x........: file leak-tree.c, line 67.
+diff --git a/gdbserver_tests/mcbreak.stderrB.exp b/gdbserver_tests/mcbreak.stderrB.exp
+index 65281d2..0f051d1 100644
+--- a/gdbserver_tests/mcbreak.stderrB.exp
++++ b/gdbserver_tests/mcbreak.stderrB.exp
+@@ -1,4 +1,3 @@
+-relaying data between gdb and process ....
+ vgdb-error value changed from 0 to 999999
+ vgdb-error value changed from 999999 to 0
+ n_errs_found 1 n_errs_shown 1 (vgdb-error 0) 
+diff --git a/gdbserver_tests/mcclean_after_fork.stderrB.exp b/gdbserver_tests/mcclean_after_fork.stderrB.exp
+index 995b42f..e812b8e 100644
+--- a/gdbserver_tests/mcclean_after_fork.stderrB.exp
++++ b/gdbserver_tests/mcclean_after_fork.stderrB.exp
+@@ -1,4 +1,3 @@
+-relaying data between gdb and process ....
+ vgdb-error value changed from 0 to 999999
+ monitor command request to kill this process
+ Remote connection closed
+diff --git a/gdbserver_tests/mcinfcallWSRU.stderrB.exp b/gdbserver_tests/mcinfcallWSRU.stderrB.exp
+index 7789123..a2f2b87 100644
+--- a/gdbserver_tests/mcinfcallWSRU.stderrB.exp
++++ b/gdbserver_tests/mcinfcallWSRU.stderrB.exp
+@@ -1,4 +1,3 @@
+-relaying data between gdb and process ....
+ vgdb-error value changed from 0 to 999999
+ Breakpoint 1 at 0x........: file sleepers.c, line 74.
+ Continuing.
+diff --git a/gdbserver_tests/mcleak.stderrB.exp b/gdbserver_tests/mcleak.stderrB.exp
+index 7782119..7ed3920 100644
+--- a/gdbserver_tests/mcleak.stderrB.exp
++++ b/gdbserver_tests/mcleak.stderrB.exp
+@@ -1,4 +1,3 @@
+-relaying data between gdb and process ....
+ vgdb-error value changed from 0 to 999999
+ 10 bytes in 1 blocks are still reachable in loss record ... of ...
+    at 0x........: malloc (vg_replace_malloc.c:...)
+diff --git a/gdbserver_tests/mcmain_pic.stderrB.exp b/gdbserver_tests/mcmain_pic.stderrB.exp
+index c90e1fa..53ec0ce 100644
+--- a/gdbserver_tests/mcmain_pic.stderrB.exp
++++ b/gdbserver_tests/mcmain_pic.stderrB.exp
+@@ -1,2 +1 @@
+-relaying data between gdb and process ....
+ vgdb-error value changed from 0 to 999999
+diff --git a/gdbserver_tests/mcvabits.stderrB.exp b/gdbserver_tests/mcvabits.stderrB.exp
+index bdabb1e..f9ced7a 100644
+--- a/gdbserver_tests/mcvabits.stderrB.exp
++++ b/gdbserver_tests/mcvabits.stderrB.exp
+@@ -1,4 +1,3 @@
+-relaying data between gdb and process ....
+ vgdb-error value changed from 0 to 999999
+ Address 0x........ len 10 addressable
+  Address 0x........ is 0 bytes inside data symbol "undefined"
+diff --git a/gdbserver_tests/mssnapshot.stderrB.exp b/gdbserver_tests/mssnapshot.stderrB.exp
+index 8bee8fc..e419ce6 100644
+--- a/gdbserver_tests/mssnapshot.stderrB.exp
++++ b/gdbserver_tests/mssnapshot.stderrB.exp
+@@ -1,4 +1,3 @@
+-relaying data between gdb and process ....
+ vgdb-error value changed from 0 to 999999
+ general valgrind monitor commands:
+   help [debug]            : monitor command help. With debug: + debugging commands
+diff --git a/gdbserver_tests/nlgone_abrt.stderrB.exp b/gdbserver_tests/nlgone_abrt.stderrB.exp
+index c8b2024..e69de29 100644
+--- a/gdbserver_tests/nlgone_abrt.stderrB.exp
++++ b/gdbserver_tests/nlgone_abrt.stderrB.exp
+@@ -1 +0,0 @@
+-relaying data between gdb and process ....
+diff --git a/gdbserver_tests/nlgone_exit.stderrB.exp b/gdbserver_tests/nlgone_exit.stderrB.exp
+index c8b2024..e69de29 100644
+--- a/gdbserver_tests/nlgone_exit.stderrB.exp
++++ b/gdbserver_tests/nlgone_exit.stderrB.exp
+@@ -1 +0,0 @@
+-relaying data between gdb and process ....
+diff --git a/gdbserver_tests/nlgone_return.stderrB.exp b/gdbserver_tests/nlgone_return.stderrB.exp
+index c8b2024..e69de29 100644
+--- a/gdbserver_tests/nlgone_return.stderrB.exp
++++ b/gdbserver_tests/nlgone_return.stderrB.exp
+@@ -1 +0,0 @@
+-relaying data between gdb and process ....
+diff --git a/gdbserver_tests/nlpasssigalrm.stderrB.exp b/gdbserver_tests/nlpasssigalrm.stderrB.exp
+index c90e1fa..53ec0ce 100644
+--- a/gdbserver_tests/nlpasssigalrm.stderrB.exp
++++ b/gdbserver_tests/nlpasssigalrm.stderrB.exp
+@@ -1,2 +1 @@
+-relaying data between gdb and process ....
+ vgdb-error value changed from 0 to 999999
+diff --git a/gdbserver_tests/nlself_invalidate.stderrB.exp b/gdbserver_tests/nlself_invalidate.stderrB.exp
+index c8b2024..e69de29 100644
+--- a/gdbserver_tests/nlself_invalidate.stderrB.exp
++++ b/gdbserver_tests/nlself_invalidate.stderrB.exp
+@@ -1 +0,0 @@
+-relaying data between gdb and process ....
+diff --git a/gdbserver_tests/nlsigvgdb.stderrB.exp b/gdbserver_tests/nlsigvgdb.stderrB.exp
+index 672fea5..ed5bb61 100644
+--- a/gdbserver_tests/nlsigvgdb.stderrB.exp
++++ b/gdbserver_tests/nlsigvgdb.stderrB.exp
+@@ -1,4 +1,3 @@
+-relaying data between gdb and process ....
+ vgdb-error value changed from 0 to 999999
+ gdbserver: continuing in 5000 ms ...
+ gdbserver: continuing after wait ...
diff --git a/valgrind-3.13.0-ucontext_t.patch b/valgrind-3.13.0-ucontext_t.patch
new file mode 100644
index 0000000..0abcef2
--- /dev/null
+++ b/valgrind-3.13.0-ucontext_t.patch
@@ -0,0 +1,25 @@
+commit 9b37074f7609cd496c067e88ef8c436981aa7267
+Author: mjw <mjw@a5019735-40e9-0310-863c-91ae7b9d1cf9>
+Date:   Thu Jun 29 15:26:30 2017 +0000
+
+    memcheck/tests: Use ucontext_t instead of struct ucontext
+    
+    glibc 2.26 does not expose struct ucontext anymore.
+    
+    Signed-off-by: Khem Raj <raj.khem@gmail.com>
+    
+    git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16457 a5019735-40e9-0310-863c-91ae7b9d1cf9
+
+diff --git a/memcheck/tests/linux/stack_changes.c b/memcheck/tests/linux/stack_changes.c
+index a978fc2..7f97b90 100644
+--- a/memcheck/tests/linux/stack_changes.c
++++ b/memcheck/tests/linux/stack_changes.c
+@@ -10,7 +10,7 @@
+ // This test is checking the libc context calls (setcontext, etc.) and
+ // checks that Valgrind notices their stack changes properly.
+ 
+-typedef  struct ucontext  mycontext;
++typedef  ucontext_t  mycontext;
+ 
+ mycontext ctx1, ctx2, oldc;
+ int count;
diff --git a/valgrind.spec b/valgrind.spec
index b955974..2e4ea58 100644
--- a/valgrind.spec
+++ b/valgrind.spec
@@ -3,7 +3,7 @@
 Summary: Tool for finding memory management bugs in programs
 Name: %{?scl_prefix}valgrind
 Version: 3.13.0
-Release: 3%{?dist}
+Release: 4%{?dist}
 Epoch: 1
 License: GPLv2+
 URL: http://www.valgrind.org/
@@ -105,6 +105,19 @@ Patch6: valgrind-3.13.0-ppc64-diag.patch
 # Workaround that masks CPUID support in HWCAP on aarch64 (#1464211)
 Patch7: valgrind-3.13.0-arm64-hwcap.patch
 
+# RHBZ#1466017 ARM ld.so index warnings.
+# KDE#381805 arm32 needs ld.so index hardwire for new glibc security fixes
+Patch8: valgrind-3.13.0-arm-index-hardwire.patch
+
+# KDE#381769 Use ucontext_t instead of struct ucontext
+Patch9: valgrind-3.13.0-ucontext_t.patch
+
+# valgrind svn r16453 Fix some tests failure with GDB 8.0
+Patch10: valgrind-3.13.0-gdb-8-testfix.patch
+
+# valgrind svn r16454. disable vgdb poll in the child after fork
+Patch11: valgrind-3.13.0-disable-vgdb-child.patch
+
 %if %{build_multilib}
 # Ensure glibc{,-devel} is installed for both multilib arches
 BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so
@@ -226,6 +239,10 @@ Valgrind User Manual for details.
 %patch5 -p1
 %patch6 -p1
 %patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
 
 %build
 # We need to use the software collection compiler and binutils if available.
@@ -428,6 +445,12 @@ echo ===============END TESTING===============
 %endif
 
 %changelog
+* Thu Jun 29 2017 Mark Wielaard <mjw@fedoraproject.org> 3.13.0-4
+- Add valgrind-3.13.0-arm-index-hardwire.patch (#1466017)
+- Add valgrind-3.13.0-ucontext_t.patch
+- Add valgrind-3.13.0-gdb-8-testfix.patch
+- Add valgrind-3.13.0-disable-vgdb-child.patch
+
 * Fri Jun 23 2017 Mark Wielaard <mjw@fedoraproject.org> 3.13.0-3
 - Add valgrind-3.13.0-arm64-hwcap.patch (#1464211)