mjw pushed to valgrind (master). "3.10.1-10 - Add valgrind-3.10.1-cfi-redzone.patch."

notifications at fedoraproject.org notifications at fedoraproject.org
Sun Jun 7 14:32:13 UTC 2015


From ec0fc73751e5eda372e3d15b0061b47f92d89bf8 Mon Sep 17 00:00:00 2001
From: Mark Wielaard <mjw at redhat.com>
Date: Sun, 7 Jun 2015 16:26:36 +0200
Subject: 3.10.1-10 - Add valgrind-3.10.1-cfi-redzone.patch.


diff --git a/valgrind-3.10.1-cfi-redzone.patch b/valgrind-3.10.1-cfi-redzone.patch
new file mode 100644
index 0000000..1515495
--- /dev/null
+++ b/valgrind-3.10.1-cfi-redzone.patch
@@ -0,0 +1,102 @@
+commit 41d3053e27e5be8f5d3f7e6f2880e046b43387be
+Author: philippe <philippe at a5019735-40e9-0310-863c-91ae7b9d1cf9>
+Date:   Thu Jun 4 19:44:47 2015 +0000
+
+    On platforms that have an accessible redzone below the SP, the unwind logic
+    should be able to access the redzone.
+    So, when computing fp_min, substract the redzone.
+    Currently, only amd64 and ppc64 have a non 0 redzone.
+    
+    Regtested on amd64 and ppc64le, no regression.
+    
+    
+    
+    git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15309 a5019735-40e9-0310-863c-91ae7b9d1cf9
+
+--- valgrind-3.10.1/coregrind/m_stacktrace.c.orig	2014-11-25 20:41:21.000000000 +0100
++++ valgrind-3.10.1/coregrind/m_stacktrace.c	2015-06-07 16:20:31.962739322 +0200
+@@ -76,7 +76,20 @@
+    }                                                            \
+ }
+ 
+-
++/* Note about calculation of fp_min : fp_min is the lowest address
++   which can be accessed during unwinding. This is SP - VG_STACK_REDZONE_SZB.
++   On most platforms, this will be equal to SP (as VG_STACK_REDZONE_SZB
++   is 0). However, on some platforms (e.g. amd64), there is an accessible
++   redzone below the SP. Some CFI unwind info are generated, taking this
++   into account. As an example, the following is a CFI unwind info on
++   amd64 found for a 'retq' instruction:
++[0x400f7e .. 0x400f7e]: let cfa=oldSP+8 in RA=*(cfa+-8) SP=cfa+0 BP=*(cfa+-16)
++  0x400f7e: retq
++  As you can see, the previous BP is found 16 bytes below the cfa, which
++  is the oldSP+8. So, effectively, the BP is found 8 bytes below the SP.
++  The fp_min must take this into account, otherwise, VG_(use_CF_info) will
++  not unwind the BP. */
++   
+ /* ------------------------ x86 ------------------------- */
+ 
+ #if defined(VGP_x86_linux) || defined(VGP_x86_darwin)
+@@ -192,7 +205,7 @@
+    uregs.xip = (Addr)startRegs->r_pc;
+    uregs.xsp = (Addr)startRegs->r_sp;
+    uregs.xbp = startRegs->misc.X86.r_ebp;
+-   Addr fp_min = uregs.xsp;
++   Addr fp_min = uregs.xsp - VG_STACK_REDZONE_SZB;
+ 
+    /* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
+       stopping when the trail goes cold, which we guess to be
+@@ -473,7 +486,7 @@
+    uregs.xip = startRegs->r_pc;
+    uregs.xsp = startRegs->r_sp;
+    uregs.xbp = startRegs->misc.AMD64.r_rbp;
+-   Addr fp_min = uregs.xsp;
++   Addr fp_min = uregs.xsp - VG_STACK_REDZONE_SZB;
+ 
+    /* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
+       stopping when the trail goes cold, which we guess to be
+@@ -654,7 +667,7 @@
+ #  elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
+    Addr lr = startRegs->misc.PPC64.r_lr;
+ #  endif
+-   Addr fp_min = sp;
++   Addr fp_min = sp - VG_STACK_REDZONE_SZB;
+ 
+    /* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
+       stopping when the trail goes cold, which we guess to be
+@@ -917,7 +930,7 @@
+    uregs.r12 = startRegs->misc.ARM.r12;
+    uregs.r11 = startRegs->misc.ARM.r11;
+    uregs.r7  = startRegs->misc.ARM.r7;
+-   Addr fp_min = uregs.r13;
++   Addr fp_min = uregs.r13 - VG_STACK_REDZONE_SZB;
+ 
+    /* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
+       stopping when the trail goes cold, which we guess to be
+@@ -1061,7 +1074,7 @@
+    uregs.sp = startRegs->r_sp;
+    uregs.x30 = startRegs->misc.ARM64.x30;
+    uregs.x29 = startRegs->misc.ARM64.x29;
+-   Addr fp_min = uregs.sp;
++   Addr fp_min = uregs.sp - VG_STACK_REDZONE_SZB;
+ 
+    /* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
+       stopping when the trail goes cold, which we guess to be
+@@ -1155,7 +1168,7 @@
+    D3UnwindRegs uregs;
+    uregs.ia = startRegs->r_pc;
+    uregs.sp = startRegs->r_sp;
+-   Addr fp_min = uregs.sp;
++   Addr fp_min = uregs.sp - VG_STACK_REDZONE_SZB;
+    uregs.fp = startRegs->misc.S390X.r_fp;
+    uregs.lr = startRegs->misc.S390X.r_lr;
+ 
+@@ -1238,7 +1251,7 @@
+    D3UnwindRegs uregs;
+    uregs.pc = startRegs->r_pc;
+    uregs.sp = startRegs->r_sp;
+-   Addr fp_min = uregs.sp;
++   Addr fp_min = uregs.sp - VG_STACK_REDZONE_SZB;
+ 
+ #if defined(VGP_mips32_linux)
+    uregs.fp = startRegs->misc.MIPS32.r30;
diff --git a/valgrind.spec b/valgrind.spec
index 95cfb6b..4eb4a83 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.10.1
-Release: 9%{?dist}
+Release: 10%{?dist}
 Epoch: 1
 License: GPLv2+
 URL: http://www.valgrind.org/
@@ -98,6 +98,9 @@ Patch15: valgrind-3.10.1-fno-ipa-icf.patch
 # Upstream valgrind svn r14780 and r15308
 Patch16: valgrind-3.10.1-demangle-q.patch
 
+# KDE#345928 callstack only contains current function for small stacks
+Patch17: valgrind-3.10.1-cfi-redzone.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
@@ -212,6 +215,7 @@ Valgrind User Manual for details.
 %patch14 -p1
 %patch15 -p1
 %patch16 -p1
+%patch17 -p1
 
 %build
 # We need to use the software collection compiler and binutils if available.
@@ -367,6 +371,9 @@ echo ===============END TESTING===============
 %endif
 
 %changelog
+* Sun Jun 07 2015 Mark Wielaard <mjw at redhat.com> - 3.10.1-10
+- Add valgrind-3.10.1-cfi-redzone.patch.
+
 * Wed Jun 03 2015 Mark Wielaard <mjw at redhat.com> - 3.10.1-9
 - Add valgrind-3.10.1-memfd_create.patch.
 - Add valgrind-3.10.1-syncfs.patch.
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/valgrind.git/commit/?h=master&id=ec0fc73751e5eda372e3d15b0061b47f92d89bf8


More information about the scm-commits mailing list