Add a wrapper for the splice system call and wire it up on

x86 and amd64 systems. Closes #205788.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11055
This commit is contained in:
Tom Hughes 2010-02-23 10:49:48 +00:00
parent 2a70cf0b01
commit 0e95308259
4 changed files with 27 additions and 2 deletions

View File

@ -52,6 +52,7 @@ DECL_TEMPLATE(linux, sys_preadv);
DECL_TEMPLATE(linux, sys_pwritev);
DECL_TEMPLATE(linux, sys_dup3);
DECL_TEMPLATE(linux, sys_getcpu);
DECL_TEMPLATE(linux, sys_splice);
// POSIX, but various sub-cases differ between Linux and Darwin.
DECL_TEMPLATE(linux, sys_fcntl);

View File

@ -1382,7 +1382,7 @@ static SyscallTableEntry syscall_table[] = {
LINX_(__NR_set_robust_list, sys_set_robust_list), // 273
LINXY(__NR_get_robust_list, sys_get_robust_list), // 274
// LINX_(__NR_splice, sys_ni_syscall), // 275
LINX_(__NR_splice, sys_splice), // 275
// LINX_(__NR_tee, sys_ni_syscall), // 276
LINX_(__NR_sync_file_range, sys_sync_file_range), // 277
// LINX_(__NR_vmsplice, sys_ni_syscall), // 278

View File

@ -3496,6 +3496,30 @@ PRE(sys_delete_module)
PRE_MEM_RASCIIZ("delete_module(name_user)", ARG1);
}
/* ---------------------------------------------------------------------
splice wrappers
------------------------------------------------------------------ */
PRE(sys_splice)
{
*flags |= SfMayBlock;
PRINT("sys_splice ( %ld, %#lx, %ld, %#lx, %ld, %ld )",
ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
PRE_REG_READ6(int32_t, "splice",
int, fd_in, vki_loff_t *, off_in,
int, fd_out, vki_loff_t *, off_out,
vki_size_t, len, unsigned int, flags);
if (!ML_(fd_allowed)(ARG1, "splice(fd_in)", tid, False) ||
!ML_(fd_allowed)(ARG3, "splice(fd_out)", tid, False)) {
SET_STATUS_Failure( VKI_EBADF );
} else {
if (ARG2 != 0)
PRE_MEM_READ( "splice(off_in)", ARG2, sizeof(vki_loff_t));
if (ARG4 != 0)
PRE_MEM_READ( "splice(off_out)", ARG4, sizeof(vki_loff_t));
}
}
/* ---------------------------------------------------------------------
oprofile-related wrappers
------------------------------------------------------------------ */

View File

@ -2251,7 +2251,7 @@ static SyscallTableEntry syscall_table[] = {
// LINX_(__NR_unshare, sys_unshare), // 310
LINX_(__NR_set_robust_list, sys_set_robust_list), // 311
LINXY(__NR_get_robust_list, sys_get_robust_list), // 312
// LINX_(__NR_splice, sys_ni_syscall), // 313
LINX_(__NR_splice, sys_splice), // 313
LINX_(__NR_sync_file_range, sys_sync_file_range), // 314
// LINX_(__NR_tee, sys_ni_syscall), // 315