diff --git a/SOURCES/valgrind-3.9.0-dwz-alt-buildid.patch b/SOURCES/valgrind-3.9.0-dwz-alt-buildid.patch
new file mode 100644
index 0000000..ce30e3b
--- /dev/null
+++ b/SOURCES/valgrind-3.9.0-dwz-alt-buildid.patch
@@ -0,0 +1,26 @@
+commit 568d77ce8e0a508fbbd9e71e9938d6dab1639912
+Author: mjw <mjw@a5019735-40e9-0310-863c-91ae7b9d1cf9>
+Date:   Wed Nov 20 11:54:38 2013 +0000
+
+    dwz compressed alternate .debug_info and .debug_str not read correctly.
+    
+    Bug #327837. The buildid from the .gnu_debugaltlink section was parsed
+    incorrectly (from the wrong offset). Causing the debug alt file not to
+    be found.
+    
+    git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13715 a5019735-40e9-0310-863c-91ae7b9d1cf9
+
+diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c
+index e72e0d7..b7d574a 100644
+--- a/coregrind/m_debuginfo/readelf.c
++++ b/coregrind/m_debuginfo/readelf.c
+@@ -2609,7 +2609,8 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
+       vg_assert(aimg == NULL);
+ 
+       if (debugaltlink_escn.img != NULL) {
+-         UInt buildid_offset = ML_(img_strlen)(debugaltlink_escn.img, 0)+1;
++         UInt buildid_offset = ML_(img_strlen)(debugaltlink_escn.img,
++                                               debugaltlink_escn.ioff)+1;
+ 
+          vg_assert(buildid_offset < debugaltlink_escn.szB);
+ 
diff --git a/SOURCES/valgrind-3.9.0-manpage-memcheck-options.patch b/SOURCES/valgrind-3.9.0-manpage-memcheck-options.patch
new file mode 100644
index 0000000..c50444e
--- /dev/null
+++ b/SOURCES/valgrind-3.9.0-manpage-memcheck-options.patch
@@ -0,0 +1,245 @@
+commit 323d397747ff81a5706cce63f45cc1b2109db252
+Author: mjw <mjw@a5019735-40e9-0310-863c-91ae7b9d1cf9>
+Date:   Thu Dec 12 21:20:48 2013 +0000
+
+    Bug 328711 valgrind.1 manpage "memcheck options" section is badly generated
+    
+    Add missing para tags inside listitems. (Miroslav Franc, mfranc@redhat.com)
+    
+    git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13758 a5019735-40e9-0310-863c-91ae7b9d1cf9
+
+diff --git a/memcheck/docs/mc-manual.xml b/memcheck/docs/mc-manual.xml
+index a53bf86..e913e89 100644
+--- a/memcheck/docs/mc-manual.xml
++++ b/memcheck/docs/mc-manual.xml
+@@ -610,14 +610,14 @@ when <option>--leak-check=full</option> is specified. </para>
+ in one of the following ways:
+ 
+ <itemizedlist>
+-  <listitem>a comma separated list of one or more of
+-    <option>definite indirect possible reachable</option>.
++  <listitem><para>a comma separated list of one or more of
++    <option>definite indirect possible reachable</option>.</para>
+   </listitem>
+ 
+-  <listitem><option>all</option> to specify the complete set (all leak kinds).
++  <listitem><para><option>all</option> to specify the complete set (all leak kinds).</para>
+   </listitem>
+ 
+-  <listitem><option>none</option> for the empty set.
++  <listitem><para><option>none</option> for the empty set.</para>
+   </listitem>
+ </itemizedlist>
+ 
+@@ -721,16 +721,16 @@ is <option>--errors-for-leak-kinds=definite,possible</option>
+       one of the following ways:
+ 
+         <itemizedlist>
+-          <listitem>a comma separated list of one or more of
+-            <option>definite indirect possible reachable</option>.
++          <listitem><para>a comma separated list of one or more of
++            <option>definite indirect possible reachable</option>.</para>
+           </listitem>
+           
+-          <listitem><option>all</option> to specify the complete set (all leak kinds).
++          <listitem><para><option>all</option> to specify the complete set (all leak kinds).
+             It is equivalent to
+-            <option>--show-leak-kinds=definite,indirect,possible,reachable</option>.
++            <option>--show-leak-kinds=definite,indirect,possible,reachable</option>.</para>
+           </listitem>
+           
+-          <listitem><option>none</option> for the empty set.
++          <listitem><para><option>none</option> for the empty set.</para>
+           </listitem>
+         </itemizedlist>
+       </para>
+@@ -763,17 +763,17 @@ is <option>--errors-for-leak-kinds=definite,possible</option>
+         The heuristic set is specified in one of the following ways:
+ 
+         <itemizedlist>
+-          <listitem>a comma separated list of one or more of
+-            <option>stdstring newarray multipleinheritance</option>.
++          <listitem><para>a comma separated list of one or more of
++            <option>stdstring newarray multipleinheritance</option>.</para>
+           </listitem>
+           
+-          <listitem><option>all</option> to activate the complete set of
++          <listitem><para><option>all</option> to activate the complete set of
+             heuristics.
+             It is equivalent to
+-            <option>--leak-check-heuristics=stdstring,newarray,multipleinheritance</option>.
++            <option>--leak-check-heuristics=stdstring,newarray,multipleinheritance</option>.</para>
+           </listitem>
+           
+-          <listitem><option>none</option> for the empty set.
++          <listitem><para><option>none</option> for the empty set.</para>
+           </listitem>
+         </itemizedlist>
+       </para>
+@@ -797,18 +797,24 @@ is <option>--errors-for-leak-kinds=definite,possible</option>
+       <para>These options provide an alternative way to specify the leak kinds to show:
+         <itemizedlist>
+           <listitem>
++	    <para>
+             <option>--show-reachable=no --show-possibly-lost=yes</option> is equivalent to
+             <option>--show-leak-kinds=definite,possible</option>.
++	    </para>
+           </listitem>
+           <listitem>
++	    <para>
+             <option>--show-reachable=no --show-possibly-lost=no</option> is equivalent to
+             <option>--show-leak-kinds=definite</option>.
++	    </para>
+           </listitem>
+           <listitem>
++	    <para>
+             <option>--show-reachable=yes</option> is equivalent to
+             <option>--show-leak-kinds=all</option>.
+             Note that  <option>--show-possibly-lost=no</option> has no effect
+             if <option>--show-reachable=yes</option> is specified.
++	    </para>
+           </listitem>
+         </itemizedlist>
+       </para>
+--- valgrind-3.9.0/docs/valgrind.1.orig	2013-12-12 22:34:11.912168437 +0100
++++ valgrind-3.9.0/docs/valgrind.1	2013-12-12 22:34:18.686421525 +0100
+@@ -2,12 +2,12 @@
+ .\"     Title: VALGRIND
+ .\"    Author: [see the "Author" section]
+ .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+-.\"      Date: 11/01/2013
++.\"      Date: 12/12/2013
+ .\"    Manual: Release 3.9.0
+ .\"    Source: Release 3.9.0
+ .\"  Language: English
+ .\"
+-.TH "VALGRIND" "1" "11/01/2013" "Release 3.9.0" "Release 3.9.0"
++.TH "VALGRIND" "1" "12/12/2013" "Release 3.9.0" "Release 3.9.0"
+ .\" -----------------------------------------------------------------
+ .\" * Define some portability stuff
+ .\" -----------------------------------------------------------------
+@@ -1080,8 +1080,8 @@
+ .IP \(bu 2.3
+ .\}
+ a comma separated list of one or more of
+-            \fBdefinite indirect possible reachable\fR\&.
+-          .RE
++\fBdefinite indirect possible reachable\fR\&.
++.RE
+ .sp
+ .RS 4
+ .ie n \{\
+@@ -1091,10 +1091,10 @@
+ .sp -1
+ .IP \(bu 2.3
+ .\}
+-\fBall\fR to specify the complete set (all leak kinds)\&.
+-            It is equivalent to
+-            \fB\-\-show\-leak\-kinds=definite,indirect,possible,reachable\fR\&.
+-          .RE
++\fBall\fR
++to specify the complete set (all leak kinds)\&. It is equivalent to
++\fB\-\-show\-leak\-kinds=definite,indirect,possible,reachable\fR\&.
++.RE
+ .sp
+ .RS 4
+ .ie n \{\
+@@ -1104,8 +1104,9 @@
+ .sp -1
+ .IP \(bu 2.3
+ .\}
+-\fBnone\fR for the empty set\&.
+-          .RE
++\fBnone\fR
++for the empty set\&.
++.RE
+ .sp
+ .RE
+ .PP
+@@ -1130,8 +1131,8 @@
+ .IP \(bu 2.3
+ .\}
+ a comma separated list of one or more of
+-            \fBstdstring newarray multipleinheritance\fR\&.
+-          .RE
++\fBstdstring newarray multipleinheritance\fR\&.
++.RE
+ .sp
+ .RS 4
+ .ie n \{\
+@@ -1141,11 +1142,10 @@
+ .sp -1
+ .IP \(bu 2.3
+ .\}
+-\fBall\fR to activate the complete set of
+-            heuristics\&.
+-            It is equivalent to
+-            \fB\-\-leak\-check\-heuristics=stdstring,newarray,multipleinheritance\fR\&.
+-          .RE
++\fBall\fR
++to activate the complete set of heuristics\&. It is equivalent to
++\fB\-\-leak\-check\-heuristics=stdstring,newarray,multipleinheritance\fR\&.
++.RE
+ .sp
+ .RS 4
+ .ie n \{\
+@@ -1155,8 +1155,9 @@
+ .sp -1
+ .IP \(bu 2.3
+ .\}
+-\fBnone\fR for the empty set\&.
+-          .RE
++\fBnone\fR
++for the empty set\&.
++.RE
+ .sp
+ Note that these heuristics are dependent on the layout of the objects produced by the C++ compiler\&. They have been tested with some gcc versions (e\&.g\&. 4\&.4 and 4\&.7)\&. They might not work properly with other C++ compilers\&.
+ .RE
+@@ -1173,9 +1174,10 @@
+ .sp -1
+ .IP \(bu 2.3
+ .\}
+-\fB\-\-show\-reachable=no \-\-show\-possibly\-lost=yes\fR is equivalent to
+-            \fB\-\-show\-leak\-kinds=definite,possible\fR\&.
+-          .RE
++\fB\-\-show\-reachable=no \-\-show\-possibly\-lost=yes\fR
++is equivalent to
++\fB\-\-show\-leak\-kinds=definite,possible\fR\&.
++.RE
+ .sp
+ .RS 4
+ .ie n \{\
+@@ -1185,9 +1187,10 @@
+ .sp -1
+ .IP \(bu 2.3
+ .\}
+-\fB\-\-show\-reachable=no \-\-show\-possibly\-lost=no\fR is equivalent to
+-            \fB\-\-show\-leak\-kinds=definite\fR\&.
+-          .RE
++\fB\-\-show\-reachable=no \-\-show\-possibly\-lost=no\fR
++is equivalent to
++\fB\-\-show\-leak\-kinds=definite\fR\&.
++.RE
+ .sp
+ .RS 4
+ .ie n \{\
+@@ -1197,11 +1200,14 @@
+ .sp -1
+ .IP \(bu 2.3
+ .\}
+-\fB\-\-show\-reachable=yes\fR is equivalent to
+-            \fB\-\-show\-leak\-kinds=all\fR\&.
+-            Note that  \fB\-\-show\-possibly\-lost=no\fR has no effect
+-            if \fB\-\-show\-reachable=yes\fR is specified\&.
+-          .RE
++\fB\-\-show\-reachable=yes\fR
++is equivalent to
++\fB\-\-show\-leak\-kinds=all\fR\&. Note that
++\fB\-\-show\-possibly\-lost=no\fR
++has no effect if
++\fB\-\-show\-reachable=yes\fR
++is specified\&.
++.RE
+ .sp
+ .RE
+ .PP
diff --git a/SOURCES/valgrind-3.9.0-ppc64-priority.patch b/SOURCES/valgrind-3.9.0-ppc64-priority.patch
new file mode 100644
index 0000000..cf593e4
--- /dev/null
+++ b/SOURCES/valgrind-3.9.0-ppc64-priority.patch
@@ -0,0 +1,24 @@
+commit df77b4d9c15823519165f6e9a206b2c40ac68389
+Author: mjw <mjw@a5019735-40e9-0310-863c-91ae7b9d1cf9>
+Date:   Mon Mar 10 14:45:32 2014 +0000
+
+    Enable sys_getpriority and sys_setpriority for ppc64.
+    
+    Bug 331830 - ppc64: WARNING: unhandled syscall: 96/97
+    (Miroslav Franc, mfranc@redhat.com)
+    
+    git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13861 a5019735-40e9-0310-863c-91ae7b9d1cf9
+
+--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c
++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c
+@@ -792,8 +792,8 @@ static SyscallTableEntry syscall_table[] = {
+    GENX_(__NR_fchmod,            sys_fchmod),             //  94
+    
+    GENX_(__NR_fchown,            sys_fchown),             //  95
+-// _____(__NR_getpriority,       sys_getpriority),        //  96
+-// _____(__NR_setpriority,       sys_setpriority),        //  97
++   GENX_(__NR_getpriority,       sys_getpriority),        //  96
++   GENX_(__NR_setpriority,       sys_setpriority),        //  97
+ // _____(__NR_profil,            sys_profil),             //  98
+    GENXY(__NR_statfs,            sys_statfs),             //  99
+ 
diff --git a/SOURCES/valgrind-3.9.0-s390-dup3.patch b/SOURCES/valgrind-3.9.0-s390-dup3.patch
new file mode 100644
index 0000000..06578f6
--- /dev/null
+++ b/SOURCES/valgrind-3.9.0-s390-dup3.patch
@@ -0,0 +1,13 @@
+diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c
+index f9bc136..58ed0f8 100644
+--- a/coregrind/m_syswrap/syswrap-s390x-linux.c
++++ b/coregrind/m_syswrap/syswrap-s390x-linux.c
+@@ -1044,7 +1044,7 @@ static SyscallTableEntry syscall_table[] = {
+    LINXY(__NR_inotify_init1,  sys_inotify_init1),                     // 324
+ 
+    LINXY(__NR_pipe2,  sys_pipe2),                                     // 325
+-   // (__NR_dup3,  ),
++   LINXY(__NR_dup3,  sys_dup3),                                       // 326
+    LINXY(__NR_epoll_create1,  sys_epoll_create1),                     // 327
+    LINXY(__NR_preadv, sys_preadv),                                    // 328
+    LINX_(__NR_pwritev, sys_pwritev),                                  // 329
diff --git a/SOURCES/valgrind-3.9.0-s390-fpr-pair.patch b/SOURCES/valgrind-3.9.0-s390-fpr-pair.patch
new file mode 100644
index 0000000..5d9a9a1
--- /dev/null
+++ b/SOURCES/valgrind-3.9.0-s390-fpr-pair.patch
@@ -0,0 +1,201 @@
+commit 9b28d5ecf72accc80d267a3fcfd0bd4212ff34d8
+Author: florian <florian@8f6e269a-dfd6-0310-a8e1-e2731360e62c>
+Date:   Tue Dec 10 16:51:15 2013 +0000
+
+    The result of rounding a 128-bit BFP/DFP value to 32/64 bit needs to
+    be stored in a register pair. This constraint was not observed previously
+    and the result was stored in any FPR that happened to be chosen. If the
+    selected FPR was not identifying a proper FPR pair, a SIGILL was delivered.
+    Fixes BZ #328455.
+    
+    
+    git-svn-id: svn://svn.valgrind.org/vex/trunk@2801 8f6e269a-dfd6-0310-a8e1-e2731360e62c
+
+diff --git a/priv/host_s390_defs.c b/priv/host_s390_defs.c
+index 0b61a5d..ce76285 100644
+--- a/VEX/priv/host_s390_defs.c
++++ b/VEX/priv/host_s390_defs.c
+@@ -5861,7 +5861,6 @@ s390_insn_bfp128_convert(UChar size, s390_bfp_conv_t tag, HReg dst_hi,
+    } else {
+       /* From 16 bytes to smaller size */
+       vassert(is_valid_fp128_regpair(op_hi, op_lo));
+-      vassert(hregIsInvalid(dst_lo));
+    }
+ 
+    insn->tag  = S390_INSN_BFP_CONVERT;
+@@ -5891,11 +5890,11 @@ s390_insn_bfp128_convert_to(UChar size, s390_bfp_conv_t tag, HReg dst_hi,
+ 
+ 
+ s390_insn *
+-s390_insn_bfp128_convert_from(UChar size, s390_bfp_conv_t tag, HReg dst,
+-                              HReg op_hi, HReg op_lo,
++s390_insn_bfp128_convert_from(UChar size, s390_bfp_conv_t tag, HReg dst_hi,
++                              HReg dst_lo, HReg op_hi, HReg op_lo,
+                               s390_bfp_round_t rounding_mode)
+ {
+-   return s390_insn_bfp128_convert(size, tag, dst, INVALID_HREG, op_hi, op_lo,
++   return s390_insn_bfp128_convert(size, tag, dst_hi, dst_lo, op_hi, op_lo,
+                                    rounding_mode);
+ }
+ 
+@@ -6192,7 +6191,6 @@ s390_insn_dfp128_convert(UChar size, s390_dfp_conv_t tag, HReg dst_hi,
+    } else {
+       /* From 16 bytes to smaller size */
+       vassert(is_valid_fp128_regpair(op_hi, op_lo));
+-      vassert(hregIsInvalid(dst_lo));
+    }
+ 
+    insn->tag  = S390_INSN_DFP_CONVERT;
+@@ -6222,11 +6220,11 @@ s390_insn_dfp128_convert_to(UChar size, s390_dfp_conv_t tag, HReg dst_hi,
+ 
+ 
+ s390_insn *
+-s390_insn_dfp128_convert_from(UChar size, s390_dfp_conv_t tag, HReg dst,
+-                              HReg op_hi, HReg op_lo,
++s390_insn_dfp128_convert_from(UChar size, s390_dfp_conv_t tag, HReg dst_hi,
++                              HReg dst_lo, HReg op_hi, HReg op_lo,
+                               s390_dfp_round_t rounding_mode)
+ {
+-   return s390_insn_dfp128_convert(size, tag, dst, INVALID_HREG, op_hi, op_lo,
++   return s390_insn_dfp128_convert(size, tag, dst_hi, dst_lo, op_hi, op_lo,
+                                    rounding_mode);
+ }
+ 
+diff --git a/priv/host_s390_defs.h b/priv/host_s390_defs.h
+index dafc8ae..5b6fc1f 100644
+--- a/VEX/priv/host_s390_defs.h
++++ b/VEX/priv/host_s390_defs.h
+@@ -665,8 +665,8 @@ s390_insn *s390_insn_bfp128_compare(UChar size, HReg dst, HReg op1_hi,
+ s390_insn *s390_insn_bfp128_convert_to(UChar size, s390_bfp_conv_t,
+                                        HReg dst_hi, HReg dst_lo, HReg op);
+ s390_insn *s390_insn_bfp128_convert_from(UChar size, s390_bfp_conv_t,
+-                                         HReg dst, HReg op_hi, HReg op_lo,
+-                                         s390_bfp_round_t);
++                                         HReg dst_hi, HReg dst_lo, HReg op_hi,
++                                         HReg op_lo, s390_bfp_round_t);
+ s390_insn *s390_insn_dfp_binop(UChar size, s390_dfp_binop_t, HReg dst,
+                                HReg op2, HReg op3,
+                                s390_dfp_round_t rounding_mode);
+@@ -699,8 +699,8 @@ s390_insn *s390_insn_dfp128_compare(UChar size, s390_dfp_cmp_t, HReg dst,
+ s390_insn *s390_insn_dfp128_convert_to(UChar size, s390_dfp_conv_t,
+                                        HReg dst_hi, HReg dst_lo, HReg op);
+ s390_insn *s390_insn_dfp128_convert_from(UChar size, s390_dfp_conv_t,
+-                                         HReg dst, HReg op_hi, HReg op_lo,
+-                                         s390_dfp_round_t);
++                                         HReg dst_hi, HReg dst_lo, HReg op_hi,
++                                         HReg op_lo, s390_dfp_round_t);
+ s390_insn *s390_insn_dfp128_reround(UChar size, HReg dst_hi, HReg dst_lo,
+                                     HReg op2, HReg op3_hi, HReg op3_lo,
+                                     s390_dfp_round_t);
+diff --git a/priv/host_s390_isel.c b/priv/host_s390_isel.c
+index aaccff6..3662ffd 100644
+--- a/VEX/priv/host_s390_isel.c
++++ b/VEX/priv/host_s390_isel.c
+@@ -1257,7 +1257,8 @@ s390_isel_int_expr_wrk(ISelEnv *env, IRExpr *expr)
+          addInstr(env, s390_insn_move(8, f15, op_lo));
+ 
+          rounding_mode = get_bfp_rounding_mode(env, arg1);
+-         addInstr(env, s390_insn_bfp128_convert_from(size, conv, res, f13, f15,
++         addInstr(env, s390_insn_bfp128_convert_from(size, conv, res,
++                                                     INVALID_HREG, f13, f15,
+                                                      rounding_mode));
+          return res;
+       }
+@@ -1290,7 +1291,8 @@ s390_isel_int_expr_wrk(ISelEnv *env, IRExpr *expr)
+             addInstr(env, s390_insn_move(8, f15, op_lo));
+ 
+             rounding_mode = get_dfp_rounding_mode(env, arg1);
+-            addInstr(env, s390_insn_dfp128_convert_from(size, dconv, res, f13,
++            addInstr(env, s390_insn_dfp128_convert_from(size, dconv, res,
++                                                        INVALID_HREG, f13,
+                                                         f15, rounding_mode));
+             return res;
+          }
+@@ -2455,7 +2457,7 @@ s390_isel_float_expr_wrk(ISelEnv *env, IRExpr *expr)
+ 
+       case Iop_F128toF64:
+       case Iop_F128toF32: {
+-         HReg op_hi, op_lo, f13, f15;
++         HReg op_hi, op_lo, f12, f13, f14, f15;
+          s390_bfp_round_t rounding_mode;
+ 
+          conv = op == Iop_F128toF32 ? S390_BFP_F128_TO_F32
+@@ -2463,15 +2465,18 @@ s390_isel_float_expr_wrk(ISelEnv *env, IRExpr *expr)
+ 
+          s390_isel_float128_expr(&op_hi, &op_lo, env, left);
+ 
+-         /* We use non-virtual registers as pairs (f13, f15) */
++         /* We use non-virtual registers as pairs (f13, f15) and (f12, f14)) */
++         f12 = make_fpr(12);
+          f13 = make_fpr(13);
++         f14 = make_fpr(14);
+          f15 = make_fpr(15);
+ 
+          /* operand --> (f13, f15) */
+          addInstr(env, s390_insn_move(8, f13, op_hi));
+          addInstr(env, s390_insn_move(8, f15, op_lo));
+ 
+-         dst = newVRegF(env);
++         /* result --> (f12, f14) */
++
+          /* load-rounded has a rounding mode field when the floating point
+             extension facility is installed. */
+          if (s390_host_has_fpext) {
+@@ -2480,8 +2485,12 @@ s390_isel_float_expr_wrk(ISelEnv *env, IRExpr *expr)
+             set_bfp_rounding_mode_in_fpc(env, irrm);
+             rounding_mode = S390_BFP_ROUND_PER_FPC;
+          }
+-         addInstr(env, s390_insn_bfp128_convert_from(size, conv, dst, f13, f15,
+-                                                     rounding_mode));
++
++         addInstr(env, s390_insn_bfp128_convert_from(size, conv, f12, f14,
++                                                     f13, f15, rounding_mode));
++         dst = newVRegF(env);
++         addInstr(env, s390_insn_move(8, dst, f12));
++
+          return dst;
+       }
+       }
+@@ -3044,22 +3053,25 @@ s390_isel_dfp_expr_wrk(ISelEnv *env, IRExpr *expr)
+       }
+ 
+       case Iop_D128toD64: {
+-         HReg op_hi, op_lo, f13, f15;
++         HReg op_hi, op_lo, f12, f13, f14, f15;
+          s390_dfp_round_t rounding_mode;
+ 
+          conv = S390_DFP_D128_TO_D64;
+ 
+          s390_isel_dfp128_expr(&op_hi, &op_lo, env, left);
+ 
+-         /* We use non-virtual registers as pairs (f13, f15) */
++         /* We use non-virtual registers as pairs (f13, f15) and (f12, f14) */
++         f12 = make_fpr(12);
+          f13 = make_fpr(13);
++         f14 = make_fpr(14);
+          f15 = make_fpr(15);
+ 
+          /* operand --> (f13, f15) */
+          addInstr(env, s390_insn_move(8, f13, op_hi));
+          addInstr(env, s390_insn_move(8, f15, op_lo));
+ 
+-         dst = newVRegF(env);
++         /* result --> (f12, f14) */
++ 
+          /* load-rounded has a rounding mode field when the floating point
+             extension facility is installed. */
+          if (s390_host_has_fpext) {
+@@ -3068,8 +3080,11 @@ s390_isel_dfp_expr_wrk(ISelEnv *env, IRExpr *expr)
+             set_dfp_rounding_mode_in_fpc(env, irrm);
+             rounding_mode = S390_DFP_ROUND_PER_FPC_0;
+          }
+-         addInstr(env, s390_insn_dfp128_convert_from(size, conv, dst, f13, f15,
+-                                                     rounding_mode));
++         addInstr(env, s390_insn_dfp128_convert_from(size, conv, f12, f14,
++                                                     f13, f15, rounding_mode));
++         dst = newVRegF(env);
++         addInstr(env, s390_insn_move(8, dst, f12));
++
+          return dst;
+       }
+ 
diff --git a/SOURCES/valgrind-3.9.0-s390x-ld-supp.patch b/SOURCES/valgrind-3.9.0-s390x-ld-supp.patch
new file mode 100644
index 0000000..4004a90
--- /dev/null
+++ b/SOURCES/valgrind-3.9.0-s390x-ld-supp.patch
@@ -0,0 +1,14 @@
+--- valgrind-3.9.0/glibc-2.X.supp.in.orig	2013-11-24 20:39:55.165152689 +0100
++++ valgrind-3.9.0/glibc-2.X.supp.in	2013-11-24 20:46:04.919736611 +0100
+@@ -236,3 +236,11 @@
+    Memcheck:Cond
+    fun:_dl_relocate_object
+ }
++
++# KDE#327943 - s390x missing index/strchr suppression for ld.so bad backtrace?
++{
++   s390x-ld-so-index-dl_open_worker
++   Memcheck:Addr8
++   fun:index
++   fun:dl_open_worker
++}
diff --git a/SOURCES/valgrind-3.9.0-xabort.patch b/SOURCES/valgrind-3.9.0-xabort.patch
new file mode 100644
index 0000000..1d0b43f
--- /dev/null
+++ b/SOURCES/valgrind-3.9.0-xabort.patch
@@ -0,0 +1,35 @@
+From ae58d7305de27aa96abf715456a07045018cda98 Mon Sep 17 00:00:00 2001
+From: Mark Wielaard <mjw@redhat.com>
+Date: Tue, 26 Nov 2013 22:49:55 +0100
+Subject: [PATCH] Bug 328100 XABORT not implemented.
+
+XABORT can be called even when there is no current transaction.
+In such a case XABORT acts as a NOP. Implement xabort as nop.
+---
+ priv/guest_amd64_toIR.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c
+index a17c8f4..7ea5748 100644
+--- a/VEX/priv/guest_amd64_toIR.c
++++ b/VEX/priv/guest_amd64_toIR.c
+@@ -20270,6 +20270,16 @@ Long dis_ESC_NONE (
+          return delta;
+       }
+       /* END HACKY SUPPORT FOR xbegin */
++      /* BEGIN HACKY SUPPORT FOR xabort */
++      if (modrm == 0xF8 && !have66orF2orF3(pfx) && sz == 1
++          && (archinfo->hwcaps & VEX_HWCAPS_AMD64_AVX)) {
++         delta++; /* mod/rm byte */
++         abyte = getUChar(delta); delta++;
++         /* There is never a real transaction in progress, so do nothing. */
++         DIP("xabort $%d", (Int)abyte);
++         return delta;
++      }
++      /* END HACKY SUPPORT FOR xabort */
+       goto decode_failure;
+ 
+    case 0xC8: /* ENTER */
+-- 
+1.8.3.1
+
diff --git a/SPECS/valgrind.spec b/SPECS/valgrind.spec
index 666ec48..6eac59a 100644
--- a/SPECS/valgrind.spec
+++ b/SPECS/valgrind.spec
@@ -3,7 +3,7 @@
 Summary: Tool for finding memory management bugs in programs
 Name: %{?scl_prefix}valgrind
 Version: 3.9.0
-Release: 1.2%{?dist}
+Release: 6%{?dist}
 Epoch: 1
 License: GPLv2+
 URL: http://www.valgrind.org/
@@ -32,6 +32,12 @@ Patch5: valgrind-3.9.0-gdbserver_tests-mcinvoke-ppc64.patch
 # KDE#326983 - insn_basic test might crash because of setting DF flag 
 Patch6: valgrind-3.9.0-amd64_gen_insn_test.patch
 
+# KDE#327837 - dwz compressed alternate .debug_info/str not read correctly.
+Patch7: valgrind-3.9.0-dwz-alt-buildid.patch
+
+# KDE#327284 s390x VEX miscompilation of -march=z10 binary
+Patch8: valgrind-3.9.0-s390-risbg.patch
+
 
 # RHEL7 specific patches.
 
@@ -41,9 +47,23 @@ Patch6: valgrind-3.9.0-amd64_gen_insn_test.patch
 # The result would only be used for two test cases.
 Patch7001: valgrind-3.9.0-ppc-fppo.patch
 
-# RHBZ#1018325  valgrind segfaults on s390x
-# KDE#327284 s390x VEX miscompilation of -march=z10 binary
-Patch7002: valgrind-3.9.0-s390-risbg.patch
+# KDE#327943 - s390x missing index/strchr suppression for ld.so bad backtrace?
+Patch10: valgrind-3.9.0-s390x-ld-supp.patch
+
+# KDE#328100 - XABORT not implemented
+Patch11: valgrind-3.9.0-xabort.patch
+
+# KDE#328711 - valgrind.1 manpage "memcheck options" section is bad
+Patch12: valgrind-3.9.0-manpage-memcheck-options.patch
+
+# KDE#328455 - s390x SIGILL after emitting wrong register pair for ldxbr
+Patch13: valgrind-3.9.0-s390-fpr-pair.patch
+
+# KDE#331337 - s390x WARNING: unhandled syscall: 326 (dup3)
+Patch14: valgrind-3.9.0-s390-dup3.patch
+
+# KDE#331830 - ppc64: WARNING: unhandled syscall: 96/97
+Patch15: valgrind-3.9.0-ppc64-priority.patch
 
 %ifarch x86_64 ppc64
 # Ensure glibc{,-devel} is installed for both multilib arches
@@ -139,11 +159,22 @@ Valgrind User Manual for details.
 %patch4 -p1
 %patch5 -p1
 %patch6 -p1
+%patch7 -p1
+%patch8 -p1
 
 
 # RHEL7 specific patches
 %patch7001 -p1
-%patch7002 -p1
+
+%ifarch s390x
+%patch10 -p1
+%endif
+
+%patch11 -p1
+%patch12 -p1
+%patch13 -p1
+%patch14 -p1
+%patch15 -p1
 
 %build
 # We need to use the software collection compiler and binutils if available.
@@ -297,6 +328,29 @@ echo ===============END TESTING===============
 %endif
 
 %changelog
+* Mon Mar 10 2014 Mark Wielaard <mjw@redhat.com> - 3.9.0-6
+- Add valgrind-3.9.0-ppc64-priority.patch. (#1073613)
+
+* Fri Feb 21 2014 Mark Wielaard <mjw@redhat.com> - 3.9.0-5
+- Add valgrind-3.9.0-s390-dup3.patch. (#1067486)
+
+* Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 1:3.9.0-4
+- Mass rebuild 2014-01-24
+
+* Fri Dec 27 2013 Daniel Mach <dmach@redhat.com> - 1:3.9.0-3
+- Mass rebuild 2013-12-27
+
+* Thu Dec 12 2013 Mark Wielaard <mjw@redhat.com>
+- Add valgrind-3.9.0-manpage-memcheck-options.patch. (#1040914)
+- Add valgrind-3.9.0-s390-fpr-pair.patch. (#1036615)
+
+* Thu Nov 28 2013 Mark Wielaard <mjw@redhat.com> - 3.9.0-2.2
+- Add valgrind-3.9.0-s390x-ld-supp.patch. (#1032282)
+- Add valgrind-3.9.0-xabort.patch. (#1035704)
+
+* Wed Nov 20 2013 Mark Wielaard <mjw@redhat.com> - 3.9.0-2.1
+- Add valgrind-3.9.0-dwz-alt-buildid.patch. (#1029875)
+
 * Thu Nov  7 2013 Mark Wielaard <mjw@redhat.com> - 3.9.0-1.2
 - Remove unnecessary and unapplied valgrind-3.8.1-movntdqa.patch
 - Remove valgrind-3.9.0-s390x-workarounds.patch