From bd144c9e1ad662fde400f06f751fca4ff6a3bdd2 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Jun 29 2017 18:34:46 +0000 Subject: 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 --- 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 +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 +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 + (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 +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 + + 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 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 3.13.0-3 - Add valgrind-3.13.0-arm64-hwcap.patch (#1464211)