3.11.0-15 - Add valgrind-3.11.0-amd64-ld-index.patch
This commit is contained in:
parent
a4376859c5
commit
51122acc43
92
valgrind-3.11.0-amd64-ld-index.patch
Normal file
92
valgrind-3.11.0-amd64-ld-index.patch
Normal file
@ -0,0 +1,92 @@
|
||||
commit b39a5966a9e64d343b65d7678e4759aed6860bec
|
||||
Author: mjw <mjw@a5019735-40e9-0310-863c-91ae7b9d1cf9>
|
||||
Date: Wed Feb 24 11:12:01 2016 +0000
|
||||
|
||||
Bug 359733 amd64 implement ld.so strchr/index override like x86
|
||||
|
||||
The suppression and redirection for ld.so strchr/index isn't needed for
|
||||
x86. When testing a newer glibc or calling the ld.so through an alternative
|
||||
path neither the suppression (doesn't match path/name) nor the redirection
|
||||
(triggers too late) works. Since there is already an hardwire override for
|
||||
strlen in amd64 ld.so anyway it makes sense to also hardware index (it is
|
||||
always called when ld.so loads the preload images).
|
||||
|
||||
This was also explained in the easy hacks Fosdem session.
|
||||
See https://bugs.kde.org/show_bug.cgi?id=359733 for a pointer.
|
||||
|
||||
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15812 a5019735-40e9-0310-863c-91ae7b9d1cf9
|
||||
|
||||
diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c
|
||||
index dcf1fb4..dae47f1 100644
|
||||
--- a/coregrind/m_redir.c
|
||||
+++ b/coregrind/m_redir.c
|
||||
@@ -1353,6 +1353,9 @@ void VG_(redir_initialise) ( void )
|
||||
if (0==VG_(strcmp)("Memcheck", VG_(details).name)) {
|
||||
|
||||
add_hardwired_spec(
|
||||
+ "ld-linux-x86-64.so.2", "index",
|
||||
+ (Addr)&VG_(amd64_linux_REDIR_FOR_index), NULL);
|
||||
+ add_hardwired_spec(
|
||||
"ld-linux-x86-64.so.2", "strlen",
|
||||
(Addr)&VG_(amd64_linux_REDIR_FOR_strlen),
|
||||
# ifndef GLIBC_MANDATORY_STRLEN_REDIRECT
|
||||
diff --git a/coregrind/m_trampoline.S b/coregrind/m_trampoline.S
|
||||
index cac2288..176ea66 100644
|
||||
--- a/coregrind/m_trampoline.S
|
||||
+++ b/coregrind/m_trampoline.S
|
||||
@@ -220,6 +220,30 @@ VG_(amd64_linux_REDIR_FOR_strlen):
|
||||
.LfnE5:
|
||||
.size VG_(amd64_linux_REDIR_FOR_strlen), .-VG_(amd64_linux_REDIR_FOR_strlen)
|
||||
|
||||
+.global VG_(amd64_linux_REDIR_FOR_index)
|
||||
+.type VG_(amd64_linux_REDIR_FOR_index), @function
|
||||
+VG_(amd64_linux_REDIR_FOR_index):
|
||||
+ movzbl (%rdi), %eax
|
||||
+ movl %esi, %edx
|
||||
+ cmpb %sil, %al
|
||||
+ jne .L4
|
||||
+ jmp .L5
|
||||
+.L10:
|
||||
+ addq $1, %rdi
|
||||
+ movzbl (%rdi), %eax
|
||||
+ cmpb %dl, %al
|
||||
+ je .L5
|
||||
+.L4:
|
||||
+ testb %al, %al
|
||||
+ jne .L10
|
||||
+ xorl %eax, %eax
|
||||
+ ret
|
||||
+.L5:
|
||||
+ movq %rdi, %rax
|
||||
+ ret
|
||||
+.size VG_(amd64_linux_REDIR_FOR_index), .-VG_(amd64_linux_REDIR_FOR_index)
|
||||
+
|
||||
+
|
||||
|
||||
/* A CIE for the above four functions, followed by their FDEs */
|
||||
.section .eh_frame,"a",@progbits
|
||||
diff --git a/coregrind/pub_core_trampoline.h b/coregrind/pub_core_trampoline.h
|
||||
index eda5ec6..1396519 100644
|
||||
--- a/coregrind/pub_core_trampoline.h
|
||||
+++ b/coregrind/pub_core_trampoline.h
|
||||
@@ -71,6 +71,7 @@ extern Addr VG_(amd64_linux_REDIR_FOR_vgettimeofday);
|
||||
extern Addr VG_(amd64_linux_REDIR_FOR_vtime);
|
||||
extern Addr VG_(amd64_linux_REDIR_FOR_vgetcpu);
|
||||
extern UInt VG_(amd64_linux_REDIR_FOR_strlen)( void* );
|
||||
+extern Char* VG_(amd64_linux_REDIR_FOR_index) ( const Char*, Int );
|
||||
#endif
|
||||
|
||||
#if defined(VGP_ppc32_linux)
|
||||
diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c
|
||||
index 005b679..8de085a 100644
|
||||
--- a/shared/vg_replace_strmem.c
|
||||
+++ b/shared/vg_replace_strmem.c
|
||||
@@ -247,7 +247,7 @@ static inline void my_exit ( int x )
|
||||
STRCHR(VG_Z_LIBC_SONAME, __strchr_sse2)
|
||||
STRCHR(VG_Z_LIBC_SONAME, __strchr_sse2_no_bsf)
|
||||
STRCHR(VG_Z_LIBC_SONAME, index)
|
||||
-# if !defined(VGP_x86_linux)
|
||||
+# if !defined(VGP_x86_linux) && !defined(VGP_amd64_linux)
|
||||
STRCHR(VG_Z_LD_LINUX_SO_2, strchr)
|
||||
STRCHR(VG_Z_LD_LINUX_SO_2, index)
|
||||
STRCHR(VG_Z_LD_LINUX_X86_64_SO_2, strchr)
|
@ -3,7 +3,7 @@
|
||||
Summary: Tool for finding memory management bugs in programs
|
||||
Name: %{?scl_prefix}valgrind
|
||||
Version: 3.11.0
|
||||
Release: 14%{?dist}
|
||||
Release: 15%{?dist}
|
||||
Epoch: 1
|
||||
License: GPLv2+
|
||||
URL: http://www.valgrind.org/
|
||||
@ -111,6 +111,9 @@ Patch20: valgrind-3.11.0-s390x-popcnt.patch
|
||||
# KDE#359703 s390: wire up separate socketcalls system calls
|
||||
Patch21: valgrind-3.11.0-s390-separate-socketcalls.patch
|
||||
|
||||
# KDE#359733 amd64 implement ld.so strchr/index override like x86
|
||||
Patch22: valgrind-3.11.0-amd64-ld-index.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
|
||||
@ -236,6 +239,7 @@ Valgrind User Manual for details.
|
||||
%patch19 -p1
|
||||
%patch20 -p1
|
||||
%patch21 -p1
|
||||
%patch22 -p1
|
||||
|
||||
%build
|
||||
# We need to use the software collection compiler and binutils if available.
|
||||
@ -428,8 +432,9 @@ echo ===============END TESTING===============
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Tue Feb 23 2016 Mark Wielaard <mjw@redhat.com>
|
||||
* Wed Feb 24 2016 Mark Wielaard <mjw@redhat.com> - 3.11.0-15
|
||||
- Add valgrind-3.11.0-s390-separate-socketcalls.patch
|
||||
- Add valgrind-3.11.0-amd64-ld-index.patch
|
||||
|
||||
* Thu Feb 18 2016 Mark Wielaard <mjw@redhat.com> - 3.11.0-14
|
||||
- Update valgrind-3.11.0-futex.patch (fix helgrind/drd regression).
|
||||
|
Loading…
Reference in New Issue
Block a user