]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Handle sys_lookup_dcookie on amd64-linux (Andrew Haley). Also take
authorJulian Seward <jseward@acm.org>
Sun, 16 Nov 2008 21:40:54 +0000 (21:40 +0000)
committerJulian Seward <jseward@acm.org>
Sun, 16 Nov 2008 21:40:54 +0000 (21:40 +0000)
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

coregrind/m_syswrap/priv_syswrap-generic.h
coregrind/m_syswrap/priv_syswrap-linux.h
coregrind/m_syswrap/syswrap-amd64-linux.c
coregrind/m_syswrap/syswrap-generic.c
coregrind/m_syswrap/syswrap-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c

index e673a0d921871e617e2f8fea9cd76c337a3cbc69..0e71fc19d12adc359a319a8667f81f275fe8123d 100644 (file)
@@ -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);             // * (?)
 
index 8b947f6ef7729150190653ad10cef7e76eb02302..799d420e85e5f141e43d2de8baa5940a4798a5ba 100644 (file)
@@ -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
index 2c5a9807aaa858d9343cae31d8a2f86de9b986b2..24d2a8c5c5a2741219a96a0418626ed137239a13 100644 (file)
@@ -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 
 
index d62b6aa9386e02c9d855bfd77577cb538ab5bb51..6bc37566521de9400a309e5d9c7b7631809ce527 100644 (file)
@@ -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;
index 5abb4f99153a00e7dce2aa5b5089340e8eb8edc8..ac90ba756dca03a997896d77dee5168490d95c8a 100644 (file)
@@ -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
 
index 3581646070dd41107118b4a1f3fa4645d323d81d..b4dd604abef59afd030687012ef53b131d910121 100644 (file)
@@ -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