0332e15
--- valgrind/coregrind/m_syswrap/syswrap-linux.c	(revision 10964)
0332e15
+++ valgrind/coregrind/m_syswrap/syswrap-linux.c	(revision 11100)
0332e15
@@ -2567,6 +2588,29 @@ POST(sys_perf_counter_open)
0332e15
    }
0332e15
 }
0332e15
 
0332e15
+PRE(sys_getcpu)
0332e15
+{
0332e15
+   PRINT("sys_getcpu ( %#lx, %#lx, %#lx )" , ARG1,ARG2,ARG3);
0332e15
+   PRE_REG_READ3(int, "getcpu", 
0332e15
+                 unsigned *, cpu, unsigned *, node, struct vki_getcpu_cache *, tcache);
0332e15
+   if (ARG1 != 0)
0332e15
+      PRE_MEM_WRITE( "getcpu(cpu)", ARG1, sizeof(unsigned) );
0332e15
+   if (ARG2 != 0)
0332e15
+      PRE_MEM_WRITE( "getcpu(node)", ARG2, sizeof(unsigned) );
0332e15
+   if (ARG3 != 0)
0332e15
+      PRE_MEM_WRITE( "getcpu(tcache)", ARG3, sizeof(struct vki_getcpu_cache) );
0332e15
+}
0332e15
+
0332e15
+POST(sys_getcpu)
0332e15
+{
0332e15
+   if (ARG1 != 0)
0332e15
+      POST_MEM_WRITE( ARG1, sizeof(unsigned) );
0332e15
+   if (ARG2 != 0)
0332e15
+      POST_MEM_WRITE( ARG2, sizeof(unsigned) );
0332e15
+   if (ARG3 != 0)
0332e15
+      POST_MEM_WRITE( ARG3, sizeof(struct vki_getcpu_cache) );
0332e15
+}
0332e15
+
0332e15
 /* ---------------------------------------------------------------------
0332e15
    utime wrapper
0332e15
    ------------------------------------------------------------------ */
0332e15
@@ -3453,6 +3497,30 @@ PRE(sys_delete_module)
0332e15
 }
0332e15
 
0332e15
 /* ---------------------------------------------------------------------
0332e15
+   splice wrappers
0332e15
+   ------------------------------------------------------------------ */
0332e15
+
0332e15
+PRE(sys_splice)
0332e15
+{
0332e15
+   *flags |= SfMayBlock;
0332e15
+   PRINT("sys_splice ( %ld, %#lx, %ld, %#lx, %ld, %ld )",
0332e15
+         ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
0332e15
+   PRE_REG_READ6(int32_t, "splice",
0332e15
+                 int, fd_in, vki_loff_t *, off_in,
0332e15
+                 int, fd_out, vki_loff_t *, off_out,
0332e15
+                 vki_size_t, len, unsigned int, flags);
0332e15
+   if (!ML_(fd_allowed)(ARG1, "splice(fd_in)", tid, False) ||
0332e15
+       !ML_(fd_allowed)(ARG3, "splice(fd_out)", tid, False)) {
0332e15
+      SET_STATUS_Failure( VKI_EBADF );
0332e15
+   } else {
0332e15
+      if (ARG2 != 0)
0332e15
+         PRE_MEM_READ( "splice(off_in)", ARG2, sizeof(vki_loff_t));
0332e15
+      if (ARG4 != 0)
0332e15
+         PRE_MEM_READ( "splice(off_out)", ARG4, sizeof(vki_loff_t));
0332e15
+   }
0332e15
+}
0332e15
+
0332e15
+/* ---------------------------------------------------------------------
0332e15
    oprofile-related wrappers
0332e15
    ------------------------------------------------------------------ */
0332e15
 
0332e15
--- valgrind/coregrind/m_syswrap/priv_syswrap-linux.h	(revision 10964)
0332e15
+++ valgrind/coregrind/m_syswrap/priv_syswrap-linux.h	(revision 11100)
0332e15
@@ -166,6 +166,8 @@ DECL_TEMPLATE(linux, sys_utimensat);
0332e15
 DECL_TEMPLATE(linux, sys_preadv);
0332e15
 DECL_TEMPLATE(linux, sys_pwritev);
0332e15
 DECL_TEMPLATE(linux, sys_dup3);
0332e15
+DECL_TEMPLATE(linux, sys_getcpu);
0332e15
+DECL_TEMPLATE(linux, sys_splice);
0332e15
 
0332e15
 DECL_TEMPLATE(linux, sys_add_key);
0332e15
 DECL_TEMPLATE(linux, sys_request_key);
0332e15
--- valgrind/coregrind/m_syswrap/syswrap-amd64-linux.c	(revision 10964)
0332e15
+++ valgrind/coregrind/m_syswrap/syswrap-amd64-linux.c	(revision 11100)
0332e15
@@ -1371,7 +1382,7 @@ const SyscallTableEntry ML_(syscall_tabl
0332e15
    LINX_(__NR_set_robust_list,	 sys_set_robust_list),  // 273
0332e15
    LINXY(__NR_get_robust_list,	 sys_get_robust_list),  // 274
0332e15
 
0332e15
-//   LINX_(__NR_splice,            sys_ni_syscall),       // 275
0332e15
+   LINX_(__NR_splice,            sys_splice),           // 275
0332e15
 //   LINX_(__NR_tee,               sys_ni_syscall),       // 276
0332e15
    LINX_(__NR_sync_file_range,   sys_sync_file_range),  // 277
0332e15
 //   LINX_(__NR_vmsplice,          sys_ni_syscall),       // 278
0332e15
--- valgrind/coregrind/m_syswrap/syswrap-x86-linux.c	(revision 10964)
0332e15
+++ valgrind/coregrind/m_syswrap/syswrap-x86-linux.c	(revision 11100)
0332e15
@@ -2240,13 +2251,13 @@ const SyscallTableEntry ML_(syscall_tabl
0332e15
 //   LINX_(__NR_unshare,		 sys_unshare),          // 310
0332e15
    LINX_(__NR_set_robust_list,	 sys_set_robust_list),  // 311
0332e15
    LINXY(__NR_get_robust_list,	 sys_get_robust_list),  // 312
0332e15
-//   LINX_(__NR_splice,            sys_ni_syscall),       // 313
0332e15
+   LINX_(__NR_splice,            sys_splice),           // 313
0332e15
    LINX_(__NR_sync_file_range,   sys_sync_file_range),  // 314
0332e15
 
0332e15
 //   LINX_(__NR_tee,               sys_ni_syscall),       // 315
0332e15
 //   LINX_(__NR_vmsplice,          sys_ni_syscall),       // 316
0332e15
 //   LINX_(__NR_move_pages,        sys_ni_syscall),       // 317
0332e15
-//   LINX_(__NR_getcpu,            sys_ni_syscall),       // 318
0332e15
+   LINXY(__NR_getcpu,            sys_getcpu),           // 318
0332e15
    LINXY(__NR_epoll_pwait,       sys_epoll_pwait),      // 319
0332e15
 
0332e15
    LINX_(__NR_utimensat,         sys_utimensat),        // 320
0332e15
--- valgrind/coregrind/m_syswrap/syswrap-ppc32-linux.c	(revision 10964)
0332e15
+++ valgrind/coregrind/m_syswrap/syswrap-ppc32-linux.c	(revision 11100)
0332e15
@@ -1859,7 +1870,7 @@ const SyscallTableEntry ML_(syscall_tabl
0332e15
    LINX_(__NR_set_robust_list,   sys_set_robust_list),   // 299
0332e15
    LINXY(__NR_get_robust_list,   sys_get_robust_list),   // 300
0332e15
 //   LINX_(__NR_move_pages,        sys_ni_syscall),        // 301
0332e15
-//   LINX_(__NR_getcpu,            sys_ni_syscall),        // 302
0332e15
+   LINXY(__NR_getcpu,            sys_getcpu),            // 302
0332e15
    LINXY(__NR_epoll_pwait,       sys_epoll_pwait),       // 303
0332e15
    LINX_(__NR_utimensat,         sys_utimensat),         // 304
0332e15
    LINXY(__NR_signalfd,          sys_signalfd),          // 305
0332e15
--- valgrind/coregrind/m_syswrap/syswrap-ppc64-linux.c	(revision 10964)
0332e15
+++ valgrind/coregrind/m_syswrap/syswrap-ppc64-linux.c	(revision 11100)
0332e15
@@ -1500,7 +1511,7 @@ const SyscallTableEntry ML_(syscall_tabl
0332e15
    LINX_(__NR_set_robust_list,   sys_set_robust_list),    // 299
0332e15
    LINXY(__NR_get_robust_list,   sys_get_robust_list),    // 300
0332e15
 //   LINX_(__NR_move_pages,        sys_ni_syscall),        // 301
0332e15
-//   LINX_(__NR_getcpu,            sys_ni_syscall),        // 302
0332e15
+   LINXY(__NR_getcpu,            sys_getcpu),            // 302
0332e15
    LINXY(__NR_epoll_pwait,       sys_epoll_pwait),       // 303
0332e15
    LINX_(__NR_utimensat,         sys_utimensat),         // 304
0332e15
    LINXY(__NR_signalfd,          sys_signalfd),          // 305
0332e15
--- valgrind/include/vki/vki-linux.h	(revision 10964)
0332e15
+++ valgrind/include/vki/vki-linux.h	(revision 11100)
0332e15
@@ -2627,6 +2635,14 @@ struct vki_perf_counter_attr {
0332e15
 	__vki_u64			__reserved_3;
0332e15
 };
0332e15
 
0332e15
+/*--------------------------------------------------------------------*/
0332e15
+// From linux-2.6.32.4/include/linux/getcpu.h
0332e15
+/*--------------------------------------------------------------------*/
0332e15
+
0332e15
+struct vki_getcpu_cache {
0332e15
+	unsigned long blob[128 / sizeof(long)];
0332e15
+};
0332e15
+
0332e15
 #endif // __VKI_LINUX_H
0332e15
 
0332e15
 /*--------------------------------------------------------------------*/