rpms/valgrind/F-12 valgrind-3.5.0-preadv.patch, NONE, 1.1 valgrind.spec, 1.73, 1.74

Jakub Jelinek jakub at fedoraproject.org
Wed Oct 28 08:44:45 UTC 2009


Author: jakub

Update of /cvs/pkgs/rpms/valgrind/F-12
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv2875

Modified Files:
	valgrind.spec 
Added Files:
	valgrind-3.5.0-preadv.patch 
Log Message:
3.5.0-8

valgrind-3.5.0-preadv.patch:
 priv_syswrap-linux.h  |    3 +
 syswrap-amd64-linux.c |    4 +-
 syswrap-linux.c       |   77 ++++++++++++++++++++++++++++++++++++++++++++++++++
 syswrap-ppc32-linux.c |    6 +--
 syswrap-ppc64-linux.c |    6 +--
 syswrap-x86-linux.c   |    4 +-
 6 files changed, 90 insertions(+), 10 deletions(-)

--- NEW FILE valgrind-3.5.0-preadv.patch ---
--- 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
 };
 


Index: valgrind.spec
===================================================================
RCS file: /cvs/pkgs/rpms/valgrind/F-12/valgrind.spec,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -p -r1.73 -r1.74
--- valgrind.spec	27 Oct 2009 21:19:42 -0000	1.73
+++ valgrind.spec	28 Oct 2009 08:44:44 -0000	1.74
@@ -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.pa
 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 <jakub at redhat.com> 3.5.0-8
+- add preadv/pwritev syscall support
+
 * Tue Oct 27 2009 Jakub Jelinek <jakub at redhat.com> 3.5.0-7
 - add perf_counter_open syscall support (#531271)
 - add handling of some sbb/adc insn forms on x86_64 (KDE#211410)




More information about the fedora-extras-commits mailing list