From 4a59b34b4f349fefbd2477b6e55ef0c9f2729840 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Oct 28 2009 08:44:44 +0000 Subject: 3.5.0-8 --- diff --git a/valgrind-3.5.0-preadv.patch b/valgrind-3.5.0-preadv.patch new file mode 100644 index 0000000..9c2a63d --- /dev/null +++ b/valgrind-3.5.0-preadv.patch @@ -0,0 +1,154 @@ +--- valgrind/coregrind/m_syswrap/syswrap-amd64-linux.c.jj 2009-10-27 22:07:26.000000000 +0100 ++++ valgrind/coregrind/m_syswrap/syswrap-amd64-linux.c 2009-10-28 09:24:57.307058551 +0100 +@@ -1377,8 +1377,8 @@ const SyscallTableEntry ML_(syscall_tabl + LINXY(__NR_pipe2, sys_pipe2), // 293 + LINXY(__NR_inotify_init1, sys_inotify_init1), // 294 + +- // (__NR_preadv, sys_ni_syscall) // 295 +- // (__NR_pwritev, sys_ni_syscall) // 296 ++ LINXY(__NR_preadv, sys_preadv), // 295 ++ LINX_(__NR_pwritev, sys_pwritev), // 296 + // (__NR_rt_tgsigqueueinfo, sys_ni_syscall) // 297 + LINXY(__NR_perf_counter_open, sys_perf_counter_open) // 298 + }; +--- valgrind/coregrind/m_syswrap/syswrap-x86-linux.c.jj 2009-10-27 22:07:26.000000000 +0100 ++++ valgrind/coregrind/m_syswrap/syswrap-x86-linux.c 2009-10-28 09:24:08.631308771 +0100 +@@ -2255,8 +2255,8 @@ const SyscallTableEntry ML_(syscall_tabl + // (__NR_dup3, sys_ni_syscall) // 330 + LINXY(__NR_pipe2, sys_pipe2), // 331 + LINXY(__NR_inotify_init1, sys_inotify_init1), // 332 +- // (__NR_preadv, sys_ni_syscall) // 333 +- // (__NR_pwritev, sys_ni_syscall) // 334 ++ LINXY(__NR_preadv, sys_preadv), // 333 ++ LINX_(__NR_pwritev, sys_pwritev), // 334 + + // (__NR_rt_tgsigqueueinfo, sys_ni_syscall) // 335 + LINXY(__NR_perf_counter_open, sys_perf_counter_open) // 336 +--- valgrind/coregrind/m_syswrap/syswrap-ppc64-linux.c.jj 2009-10-27 22:07:26.000000000 +0100 ++++ valgrind/coregrind/m_syswrap/syswrap-ppc64-linux.c 2009-10-28 09:28:43.563071713 +0100 +@@ -1508,9 +1508,9 @@ const SyscallTableEntry ML_(syscall_tabl + // (__NR_dup3, sys_ni_syscall) // 316 + LINXY(__NR_pipe2, sys_pipe2), // 317 + LINXY(__NR_inotify_init1, sys_inotify_init1), // 318 +- LINXY(__NR_perf_counter_open, sys_perf_counter_open) // 319 +- // (__NR_preadv, sys_ni_syscall) // 320 +- // (__NR_pwritev, sys_ni_syscall) // 321 ++ LINXY(__NR_perf_counter_open, sys_perf_counter_open),// 319 ++ LINXY(__NR_preadv, sys_preadv), // 320 ++ LINX_(__NR_pwritev, sys_pwritev) // 321 + // (__NR_rt_tgsigqueueinfo, sys_ni_syscall) // 322 + }; + +--- valgrind/coregrind/m_syswrap/syswrap-linux.c.jj 2009-10-27 22:07:26.000000000 +0100 ++++ valgrind/coregrind/m_syswrap/syswrap-linux.c 2009-10-28 09:40:32.276183692 +0100 +@@ -3009,6 +3009,83 @@ PRE(sys_faccessat) + PRE_MEM_RASCIIZ( "faccessat(pathname)", ARG2 ); + } + ++PRE(sys_preadv) ++{ ++ Int i; ++ struct vki_iovec * vec; ++ ULong off = (ULong)ARG4; ++#if VG_WORDSIZE == 4 ++ off |= (ULong)ARG5 << 32; ++#endif ++ *flags |= SfMayBlock; ++ PRINT("sys_preadv ( %ld, %#lx, %llu, %llu )",ARG1,ARG2,(ULong)ARG3,off); ++ PRE_REG_READ5(ssize_t, "preadv", ++ unsigned long, fd, const struct iovec *, vector, ++ unsigned long, count, unsigned long, off_lo, ++ unsigned long, off_hi); ++ if (!ML_(fd_allowed)(ARG1, "preadv", tid, False)) { ++ SET_STATUS_Failure( VKI_EBADF ); ++ } else { ++ PRE_MEM_READ( "preadv(vector)", ARG2, ARG3 * sizeof(struct vki_iovec) ); ++ ++ if (ARG2 != 0) { ++ /* ToDo: don't do any of the following if the vector is invalid */ ++ vec = (struct vki_iovec *)ARG2; ++ for (i = 0; i < (Int)ARG3; i++) ++ PRE_MEM_WRITE( "preadv(vector[...])", ++ (Addr)vec[i].iov_base, vec[i].iov_len ); ++ } ++ } ++} ++ ++POST(sys_preadv) ++{ ++ vg_assert(SUCCESS); ++ if (RES > 0) { ++ Int i; ++ struct vki_iovec * vec = (struct vki_iovec *)ARG2; ++ Int remains = RES; ++ ++ /* RES holds the number of bytes read. */ ++ for (i = 0; i < (Int)ARG3; i++) { ++ Int nReadThisBuf = vec[i].iov_len; ++ if (nReadThisBuf > remains) nReadThisBuf = remains; ++ POST_MEM_WRITE( (Addr)vec[i].iov_base, nReadThisBuf ); ++ remains -= nReadThisBuf; ++ if (remains < 0) VG_(core_panic)("preadv: remains < 0"); ++ } ++ } ++} ++ ++PRE(sys_pwritev) ++{ ++ Int i; ++ struct vki_iovec * vec; ++ ULong off = (ULong)ARG4; ++#if VG_WORDSIZE == 4 ++ off |= (ULong)ARG5 << 32; ++#endif ++ *flags |= SfMayBlock; ++ PRINT("sys_pwritev ( %ld, %#lx, %llu, %llu )",ARG1,ARG2,(ULong)ARG3,off); ++ PRE_REG_READ5(ssize_t, "pwritev", ++ unsigned long, fd, const struct iovec *, vector, ++ unsigned long, count, unsigned long, off_lo, ++ unsigned long, off_hi); ++ if (!ML_(fd_allowed)(ARG1, "pwritev", tid, False)) { ++ SET_STATUS_Failure( VKI_EBADF ); ++ } else { ++ PRE_MEM_READ( "pwritev(vector)", ++ ARG2, ARG3 * sizeof(struct vki_iovec) ); ++ if (ARG2 != 0) { ++ /* ToDo: don't do any of the following if the vector is invalid */ ++ vec = (struct vki_iovec *)ARG2; ++ for (i = 0; i < (Int)ARG3; i++) ++ PRE_MEM_READ( "pwritev(vector[...])", ++ (Addr)vec[i].iov_base, vec[i].iov_len ); ++ } ++ } ++} ++ + /* --------------------------------------------------------------------- + key retention service wrappers + ------------------------------------------------------------------ */ +--- valgrind/coregrind/m_syswrap/priv_syswrap-linux.h.jj 2009-10-27 22:07:26.000000000 +0100 ++++ valgrind/coregrind/m_syswrap/priv_syswrap-linux.h 2009-10-28 09:22:42.735058008 +0100 +@@ -163,6 +163,9 @@ DECL_TEMPLATE(linux, sys_fchmodat); + DECL_TEMPLATE(linux, sys_faccessat); + DECL_TEMPLATE(linux, sys_utimensat); + ++DECL_TEMPLATE(linux, sys_preadv); ++DECL_TEMPLATE(linux, sys_pwritev); ++ + DECL_TEMPLATE(linux, sys_add_key); + DECL_TEMPLATE(linux, sys_request_key); + DECL_TEMPLATE(linux, sys_keyctl); +--- valgrind/coregrind/m_syswrap/syswrap-ppc32-linux.c.jj 2009-10-27 22:07:26.000000000 +0100 ++++ valgrind/coregrind/m_syswrap/syswrap-ppc32-linux.c 2009-10-28 09:28:12.173183524 +0100 +@@ -1868,9 +1868,9 @@ const SyscallTableEntry ML_(syscall_tabl + // (__NR_dup3, sys_ni_syscall) // 316 + LINXY(__NR_pipe2, sys_pipe2), // 317 + LINXY(__NR_inotify_init1, sys_inotify_init1), // 318 +- LINXY(__NR_perf_counter_open, sys_perf_counter_open) // 319 +- // (__NR_preadv, sys_ni_syscall) // 320 +- // (__NR_pwritev, sys_ni_syscall) // 321 ++ LINXY(__NR_perf_counter_open, sys_perf_counter_open),// 319 ++ LINXY(__NR_preadv, sys_preadv), // 320 ++ LINX_(__NR_pwritev, sys_pwritev) // 321 + // (__NR_rt_tgsigqueueinfo, sys_ni_syscall) // 322 + }; + diff --git a/valgrind.spec b/valgrind.spec index e63a8c3..00eeca1 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -1,7 +1,7 @@ Summary: Tool for finding memory management bugs in programs Name: valgrind Version: 3.5.0 -Release: 7 +Release: 8 Epoch: 1 Source0: http://www.valgrind.org/downloads/valgrind-%{version}.tar.bz2 Patch1: valgrind-3.5.0-cachegrind-improvements.patch @@ -18,6 +18,7 @@ Patch11: valgrind-3.5.0-amd64-loopnel.patch Patch12: valgrind-3.5.0-ppc-dwarf3.patch Patch13: valgrind-3.5.0-amd64-adcsbb.patch Patch14: valgrind-3.5.0-syscalls.patch +Patch15: valgrind-3.5.0-preadv.patch License: GPLv2 URL: http://www.valgrind.org/ Group: Development/Debuggers @@ -85,6 +86,7 @@ or valgrind plugins. %patch12 -p1 %patch13 -p1 %patch14 -p1 +%patch15 -p1 %build %ifarch x86_64 ppc64 @@ -170,6 +172,9 @@ rm -rf $RPM_BUILD_ROOT %{_libdir}/pkgconfig/* %changelog +* Wed Oct 28 2009 Jakub Jelinek 3.5.0-8 +- add preadv/pwritev syscall support + * Tue Oct 27 2009 Jakub Jelinek 3.5.0-7 - add perf_counter_open syscall support (#531271) - add handling of some sbb/adc insn forms on x86_64 (KDE#211410)