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); // * (?)
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
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
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;
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
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