From bc2f84b39f99d9af18d791638027252f8580bf84 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Tue, 3 Apr 2012 10:51:27 +0000 Subject: [PATCH] Add support for the move_pages system call. BZ#282790. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12485 --- coregrind/m_syswrap/priv_syswrap-linux.h | 1 + coregrind/m_syswrap/syswrap-amd64-linux.c | 2 +- coregrind/m_syswrap/syswrap-arm-linux.c | 2 +- coregrind/m_syswrap/syswrap-linux.c | 18 ++++++++++++++++++ coregrind/m_syswrap/syswrap-ppc32-linux.c | 2 +- coregrind/m_syswrap/syswrap-ppc64-linux.c | 2 +- coregrind/m_syswrap/syswrap-x86-linux.c | 2 +- 7 files changed, 24 insertions(+), 5 deletions(-) diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index 37d41b71ae..c4f04534ee 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -56,6 +56,7 @@ DECL_TEMPLATE(linux, sys_dup3); DECL_TEMPLATE(linux, sys_getcpu); DECL_TEMPLATE(linux, sys_splice); DECL_TEMPLATE(linux, sys_readahead); +DECL_TEMPLATE(linux, sys_move_pages); // POSIX, but various sub-cases differ between Linux and Darwin. DECL_TEMPLATE(linux, sys_fcntl); diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 39a69484dc..d18b7c33fb 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -1388,7 +1388,7 @@ static SyscallTableEntry syscall_table[] = { // LINX_(__NR_tee, sys_ni_syscall), // 276 LINX_(__NR_sync_file_range, sys_sync_file_range), // 277 // LINX_(__NR_vmsplice, sys_ni_syscall), // 278 -// LINX_(__NR_move_pages, sys_ni_syscall), // 279 + LINXY(__NR_move_pages, sys_move_pages), // 279 LINX_(__NR_utimensat, sys_utimensat), // 280 LINXY(__NR_epoll_pwait, sys_epoll_pwait), // 281 diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c index a416b1169e..84d4c6bb83 100644 --- a/coregrind/m_syswrap/syswrap-arm-linux.c +++ b/coregrind/m_syswrap/syswrap-arm-linux.c @@ -1783,7 +1783,7 @@ static SyscallTableEntry syscall_main_table[] = { // LINX_(__NR_tee, sys_ni_syscall), // 315 // LINX_(__NR_vmsplice, sys_ni_syscall), // 316 -// LINX_(__NR_move_pages, sys_ni_syscall), // 317 + LINXY(__NR_move_pages, sys_move_pages), // 317 // LINX_(__NR_getcpu, sys_ni_syscall), // 318 LINX_(__NR_utimensat, sys_utimensat), // 320 diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 2d62343de3..438dae7348 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -2783,6 +2783,24 @@ POST(sys_getcpu) POST_MEM_WRITE( ARG3, sizeof(struct vki_getcpu_cache) ); } +PRE(sys_move_pages) +{ + PRINT("sys_move_pages ( %ld, %ld, %#lx, %#lx, %#lx, %lx )", + ARG1,ARG2,ARG3,ARG4,ARG5,ARG6); + PRE_REG_READ6(int, "move_pages", + vki_pid_t, pid, unsigned long, nr_pages, const void **, pages, + const int *, nodes, int *, status, int, flags); + PRE_MEM_READ("move_pages(pages)", ARG3, ARG2 * sizeof(void *)); + if (ARG4) + PRE_MEM_READ("move_pages(nodes)", ARG4, ARG2 * sizeof(int)); + PRE_MEM_WRITE("move_pages(status)", ARG5, ARG2 * sizeof(int)); +} + +POST(sys_move_pages) +{ + POST_MEM_WRITE(ARG5, ARG2 * sizeof(int)); +} + /* --------------------------------------------------------------------- utime wrapper ------------------------------------------------------------------ */ diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index 715e685dd1..ba0a7c9324 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -1807,7 +1807,7 @@ static SyscallTableEntry syscall_table[] = { LINX_(__NR_faccessat, sys_faccessat), // 298 LINX_(__NR_set_robust_list, sys_set_robust_list), // 299 LINXY(__NR_get_robust_list, sys_get_robust_list), // 300 -// LINX_(__NR_move_pages, sys_ni_syscall), // 301 + LINXY(__NR_move_pages, sys_move_pages), // 301 LINXY(__NR_getcpu, sys_getcpu), // 302 LINXY(__NR_epoll_pwait, sys_epoll_pwait), // 303 LINX_(__NR_utimensat, sys_utimensat), // 304 diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c index 75137f2f01..01731b5ae6 100644 --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c @@ -1447,7 +1447,7 @@ static SyscallTableEntry syscall_table[] = { LINX_(__NR_faccessat, sys_faccessat), // 298 LINX_(__NR_set_robust_list, sys_set_robust_list), // 299 LINXY(__NR_get_robust_list, sys_get_robust_list), // 300 -// LINX_(__NR_move_pages, sys_ni_syscall), // 301 + LINXY(__NR_move_pages, sys_move_pages), // 301 LINXY(__NR_getcpu, sys_getcpu), // 302 LINXY(__NR_epoll_pwait, sys_epoll_pwait), // 303 LINX_(__NR_utimensat, sys_utimensat), // 304 diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index a79bc45124..0a4035d6d9 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -2196,7 +2196,7 @@ static SyscallTableEntry syscall_table[] = { // LINX_(__NR_tee, sys_ni_syscall), // 315 // LINX_(__NR_vmsplice, sys_ni_syscall), // 316 -// LINX_(__NR_move_pages, sys_ni_syscall), // 317 + LINXY(__NR_move_pages, sys_move_pages), // 317 LINXY(__NR_getcpu, sys_getcpu), // 318 LINXY(__NR_epoll_pwait, sys_epoll_pwait), // 319 -- 2.47.2