diff --git a/valgrind-3.15.0-arm64-Ity_F16.patch b/valgrind-3.15.0-arm64-Ity_F16.patch
new file mode 100644
index 0000000..2c34fe2
--- /dev/null
+++ b/valgrind-3.15.0-arm64-Ity_F16.patch
@@ -0,0 +1,34 @@
+commit 270037da8b508954f0f7d703a0bebf5364eec548
+Author: Julian Seward <jseward@acm.org>
+Date:   Sat Apr 13 12:34:06 2019 +0200
+
+    Bug 406465 - arm64 instruction selector fails on "t0 = <expr>" where <expr> has type Ity_F16.
+
+diff --git a/VEX/priv/host_arm64_isel.c b/VEX/priv/host_arm64_isel.c
+index 49d0f0b..b2ab742 100644
+--- a/VEX/priv/host_arm64_isel.c
++++ b/VEX/priv/host_arm64_isel.c
+@@ -3391,6 +3391,10 @@ static HReg iselF16Expr_wrk ( ISelEnv* env, IRExpr* e )
+    vassert(e);
+    vassert(ty == Ity_F16);
+ 
++   if (e->tag == Iex_RdTmp) {
++      return lookupIRTemp(env, e->Iex.RdTmp.tmp);
++   }
++
+    if (e->tag == Iex_Get) {
+       Int offs = e->Iex.Get.offset;
+       if (offs >= 0 && offs < 8192 && 0 == (offs & 1)) {
+@@ -3706,6 +3710,12 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt )
+          addInstr(env, ARM64Instr_VMov(8/*yes, really*/, dst, src));
+          return;
+       }
++      if (ty == Ity_F16) {
++         HReg src = iselF16Expr(env, stmt->Ist.WrTmp.data);
++         HReg dst = lookupIRTemp(env, tmp);
++         addInstr(env, ARM64Instr_VMov(8/*yes, really*/, dst, src));
++         return;
++      }
+       if (ty == Ity_V128) {
+          HReg src = iselV128Expr(env, stmt->Ist.WrTmp.data);
+          HReg dst = lookupIRTemp(env, tmp);
diff --git a/valgrind.spec b/valgrind.spec
index 74051dd..7215dad 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.15.0
-Release: 0.7.RC2%{?dist}
+Release: 0.8.RC2%{?dist}
 Epoch: 1
 License: GPLv2+
 URL: http://www.valgrind.org/
@@ -101,6 +101,8 @@ Patch7: valgrind-3.15.0-disable-s390x-z13.patch
 # Add some stack-protector
 Patch8: valgrind-3.15.0-some-stack-protector.patch
 
+# KDE#406465 arm64 selector fails on "t0 = <expr>" where <expr> type Ity_F16.
+Patch9: valgrind-3.15.0-arm64-Ity_F16.patch
 
 BuildRequires: glibc-devel
 
@@ -231,7 +233,12 @@ Valgrind User Manual for details.
 %patch7 -p1
 %endif
 
+# Old rhel gcc doesn't have -fstack-protector-strong.
+%if 0%{?fedora} || 0%{?rhel} >= 7
 %patch8 -p1
+%endif
+
+%patch9 -p1
 
 
 %build
@@ -274,7 +281,15 @@ Valgrind User Manual for details.
 CFLAGS="`echo " %{optflags} " | sed 's/ -fstack-protector\([-a-z]*\) / / g;s/ -O2 / /g;'`"
 export CFLAGS
 
-LDFLAGS="`echo " %{build_ldflags} " | sed 's/ -Wl,-z,now / / g;'`"
+# Older Fedora/RHEL only had __global_ldflags.
+# Even older didn't even have that (so we don't need to scrub them).
+%if 0%{?build_ldflags:1}
+LDFLAGS="`echo " %{build_ldflags} "    | sed 's/ -Wl,-z,now / / g;'`"
+%else
+%if 0%{?__global_ldflags:1}
+LDFLAGS="`echo " %{__global_ldflags} " | sed 's/ -Wl,-z,now / / g;'`"
+%endif
+%endif
 export LDFLAGS
 
 %configure \
@@ -435,6 +450,11 @@ fi
 %endif
 
 %changelog
+* Sun Apr 14 2019 Mark Wielaard <mjw@fedoraproject.org> - 3.15.0-0.8.RC2
+- Adding of stack-protector flag should only be done with newer gcc.
+- Older rpm macros didn't provide build_ldflags.
+- Add valgrind-3.15.0-arm64-Ity_F16.patch
+
 * Sun Apr 14 2019 Mark Wielaard <mjw@fedoraproject.org> - 3.15.0-0.7.RC2
 - Add valgrind-3.15.0-some-stack-protector.patch