|
From: <sv...@va...> - 2005-07-27 22:57:40
|
Author: tom
Date: 2005-07-27 23:57:18 +0100 (Wed, 27 Jul 2005)
New Revision: 4285
Log:
Handle the fadvise64 system calls correctly on 32 bit platforms.
Modified:
trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
trunk/coregrind/m_syswrap/syswrap-linux.c
Modified: trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2005-07-27 20:31:57 U=
TC (rev 4284)
+++ trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2005-07-27 22:57:18 U=
TC (rev 4285)
@@ -587,6 +587,7 @@
DECL_TEMPLATE(amd64_linux, sys_ptrace);
DECL_TEMPLATE(amd64_linux, sys_pread64);
DECL_TEMPLATE(amd64_linux, sys_pwrite64);
+DECL_TEMPLATE(amd64_linux, sys_fadvise64);
=20
=20
PRE(sys_clone)
@@ -1147,6 +1148,13 @@
PRE_MEM_READ( "pwrite64(buf)", ARG2, ARG3 );
}
=20
+PRE(sys_fadvise64)
+{
+ PRINT("sys_fadvise64 ( %d, %lld, %llu, %d )", ARG1,ARG2,ARG3,ARG4);
+ PRE_REG_READ4(long, "fadvise64",
+ int, fd, vki_loff_t, offset, vki_size_t, len, int, advi=
ce);
+}
+
#undef PRE
#undef POST
=20
@@ -1433,7 +1441,7 @@
// (__NR_restart_syscall, sys_restart_syscall),// 219=20
=20
PLAX_(__NR_semtimedop, sys_semtimedop), // 220=20
- LINX_(__NR_fadvise64, sys_fadvise64), // 221=20
+ PLAX_(__NR_fadvise64, sys_fadvise64), // 221=20
GENXY(__NR_timer_create, sys_timer_create), // 222=20
GENXY(__NR_timer_settime, sys_timer_settime), // 223=20
GENXY(__NR_timer_gettime, sys_timer_gettime), // 224=20
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syswrap/syswrap-linux.c 2005-07-27 20:31:57 UTC (re=
v 4284)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c 2005-07-27 22:57:18 UTC (re=
v 4285)
@@ -103,6 +103,9 @@
#define PRE(name) DEFN_PRE_TEMPLATE(linux, name)
#define POST(name) DEFN_POST_TEMPLATE(linux, name)
=20
+// Combine two 32-bit values into a 64-bit value
+#define LOHI64(lo,hi) ( (lo) | ((ULong)(hi) << 32) )
+
PRE(sys_set_tid_address)
{
PRINT("sys_set_tid_address ( %p )", ARG1);
@@ -653,16 +656,20 @@
=20
PRE(sys_fadvise64)
{
- PRINT("sys_fadvise64 ( %d, %lld, %lu, %d )", ARG1,ARG2,ARG3);
- PRE_REG_READ4(long, "fadvise64",
- int, fd, vki_loff_t, offset, vki_size_t, len, int, advi=
ce)
+ PRINT("sys_fadvise64 ( %d, %lld, %lu, %d )",
+ ARG1, LOHI64(ARG2,ARG3), ARG4, ARG5);
+ PRE_REG_READ5(long, "fadvise64",
+ int, fd, vki_u32, offset_low, vki_u32, offset_high,
+ vki_size_t, len, int, advice);
}
=20
PRE(sys_fadvise64_64)
{
- PRINT("sys_fadvise64_64 ( %d, %lld, %lld, %d )", ARG1,ARG2,ARG3);
- PRE_REG_READ4(long, "fadvise64_64",
- int, fd, vki_loff_t, offset, vki_loff_t, len, int, advi=
ce)
+ PRINT("sys_fadvise64_64 ( %d, %lld, %lld, %d )",
+ ARG1, LOHI64(ARG2,ARG3), LOHI64(ARG4,ARG5), ARG6);
+ PRE_REG_READ6(long, "fadvise64_64",
+ int, fd, vki_u32, offset_low, vki_u32, offset_high,
+ vki_u32, len_low, vki_u32, len_high, int, advice);
}
=20
// Nb: this wrapper has to pad/unpad memory around the syscall itself,
|