From: Julian Seward Date: Sun, 16 Nov 2008 21:40:54 +0000 (+0000) Subject: Handle sys_lookup_dcookie on amd64-linux (Andrew Haley). Also take X-Git-Tag: svn/VALGRIND_3_4_0~125 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2ebd38040f1e3cff27315c23a5de399d664c7e77;p=thirdparty%2Fvalgrind.git Handle sys_lookup_dcookie on amd64-linux (Andrew Haley). Also take the opportunity to move the handlers from syswrap-generic.c (which they certainly aren't) to syswrap-linux.c. Fixes #175044. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8769 --- diff --git a/coregrind/m_syswrap/priv_syswrap-generic.h b/coregrind/m_syswrap/priv_syswrap-generic.h index e673a0d921..0e71fc19d1 100644 --- a/coregrind/m_syswrap/priv_syswrap-generic.h +++ b/coregrind/m_syswrap/priv_syswrap-generic.h @@ -192,7 +192,6 @@ DECL_TEMPLATE(generic, sys_lchown); // * (L?) DECL_TEMPLATE(generic, sys_mincore); // * L? DECL_TEMPLATE(generic, sys_getdents64); // * (SVr4,SVID?) DECL_TEMPLATE(generic, sys_fcntl64); // * P? -DECL_TEMPLATE(generic, sys_lookup_dcookie); // (*/32/64) L DECL_TEMPLATE(generic, sys_statfs64); // * (?) DECL_TEMPLATE(generic, sys_fstatfs64); // * (?) diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index 8b947f6ef7..799d420e85 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -236,6 +236,9 @@ DECL_TEMPLATE(linux, sys_stime); /* maybe generic? I'm not sure */ DECL_TEMPLATE(linux, sys_init_module); DECL_TEMPLATE(linux, sys_delete_module); +// Linux-specific (oprofile-related) +DECL_TEMPLATE(linux, sys_lookup_dcookie); // (*/32/64) L + /* --------------------------------------------------------------------- Wrappers for sockets and ipc-ery. These are split into standalone procedures because x86-linux hides them inside multiplexors diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 2c5a9807aa..24d2a8c5c5 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -1269,7 +1269,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { LINXY(__NR_io_cancel, sys_io_cancel), // 210 // (__NR_get_thread_area, sys_ni_syscall), // 211 - // (__NR_lookup_dcookie, sys_lookup_dcookie), // 212 + LINXY(__NR_lookup_dcookie, sys_lookup_dcookie), // 212 LINXY(__NR_epoll_create, sys_epoll_create), // 213 // (__NR_epoll_ctl_old, sys_ni_syscall), // 214 diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c index d62b6aa938..6bc3756652 100644 --- a/coregrind/m_syswrap/syswrap-generic.c +++ b/coregrind/m_syswrap/syswrap-generic.c @@ -2063,24 +2063,6 @@ PRE(sys_iopl) PRE_REG_READ1(long, "iopl", unsigned long, level); } -// XXX: this wrapper is only suitable for 32-bit platforms -#if defined(VGP_x86_linux) -PRE(sys_lookup_dcookie) -{ - PRINT("sys_lookup_dcookie (0x%llx, %#lx, %ld)", LOHI64(ARG1,ARG2), ARG3, ARG4); - PRE_REG_READ4(long, "lookup_dcookie", - vki_u32, cookie_low32, vki_u32, cookie_high32, - char *, buf, vki_size_t, len); - PRE_MEM_WRITE( "lookup_dcookie(buf)", ARG3, ARG4); -} -POST(sys_lookup_dcookie) -{ - vg_assert(SUCCESS); - if (ARG3 != (Addr)NULL) - POST_MEM_WRITE( ARG3, RES); -} -#endif - PRE(sys_fsync) { *flags |= SfMayBlock; diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 5abb4f9915..ac90ba756d 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -3073,6 +3073,48 @@ PRE(sys_delete_module) PRE_MEM_RASCIIZ("delete_module(name_user)", ARG1); } +/* --------------------------------------------------------------------- + oprofile-related wrappers + ------------------------------------------------------------------ */ + +#if defined(VGP_x86_linux) +PRE(sys_lookup_dcookie) +{ + PRINT("sys_lookup_dcookie (0x%llx, %#lx, %ld)", + LOHI64(ARG1,ARG2), ARG3, ARG4); + PRE_REG_READ4(long, "lookup_dcookie", + vki_u32, cookie_low32, vki_u32, cookie_high32, + char *, buf, vki_size_t, len); + PRE_MEM_WRITE( "lookup_dcookie(buf)", ARG3, ARG4); +} +POST(sys_lookup_dcookie) +{ + vg_assert(SUCCESS); + if (ARG3 != (Addr)NULL) + POST_MEM_WRITE( ARG3, RES); +} +#endif + +#if defined(VGP_amd64_linux) +PRE(sys_lookup_dcookie) +{ + *flags |= SfMayBlock; + PRINT("sys_lookup_dcookie ( %llu, %#lx, %llu )", + (ULong)ARG1, ARG2, (ULong)ARG3); + PRE_REG_READ3(int, "lookup_dcookie", + unsigned long long, cookie, char *, buf, vki_size_t, len); + + PRE_MEM_WRITE( "sys_lookup_dcookie(buf)", ARG2, ARG3 ); +} + +POST(sys_lookup_dcookie) +{ + vg_assert(SUCCESS); + if (ARG2 != (Addr)NULL) + POST_MEM_WRITE( ARG2, RES ); +} +#endif + #undef PRE #undef POST diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index 3581646070..b4dd604abe 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -2145,7 +2145,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { LINX_(__NR_fadvise64, sys_fadvise64), // 250 */(Linux?) GENX_(251, sys_ni_syscall), // 251 LINX_(__NR_exit_group, sys_exit_group), // 252 - GENXY(__NR_lookup_dcookie, sys_lookup_dcookie), // 253 + LINXY(__NR_lookup_dcookie, sys_lookup_dcookie), // 253 LINXY(__NR_epoll_create, sys_epoll_create), // 254 LINX_(__NR_epoll_ctl, sys_epoll_ctl), // 255