mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-07 04:38:00 +00:00
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:
parent
2a70cf0b01
commit
0e95308259
@ -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);
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
------------------------------------------------------------------ */
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user