|
From: <sv...@va...> - 2005-07-22 15:05:05
|
Author: tom
Date: 2005-07-22 16:04:14 +0100 (Fri, 22 Jul 2005)
New Revision: 4227
Log:
Yet more system calls.
Modified:
trunk/coregrind/m_syswrap/priv_syswrap-linux.h
trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/coregrind/m_syswrap/syswrap-x86-linux.c
trunk/include/vki-amd64-linux.h
Modified: trunk/coregrind/m_syswrap/priv_syswrap-linux.h
=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/priv_syswrap-linux.h 2005-07-22 13:03:20 UT=
C (rev 4226)
+++ trunk/coregrind/m_syswrap/priv_syswrap-linux.h 2005-07-22 15:04:14 UT=
C (rev 4227)
@@ -89,6 +89,9 @@
DECL_TEMPLATE(linux, sys_io_submit);
DECL_TEMPLATE(linux, sys_io_cancel);
=20
+DECL_TEMPLATE(linux, sys_set_mempolicy);
+DECL_TEMPLATE(linux, sys_get_mempolicy);
+
#endif // __PRIV_SYSWRAP_LINUX_H
=20
/*--------------------------------------------------------------------*/
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-22 13:03:20 U=
TC (rev 4226)
+++ trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2005-07-22 15:04:14 U=
TC (rev 4227)
@@ -584,6 +584,7 @@
DECL_TEMPLATE(amd64_linux, sys_shmdt);
DECL_TEMPLATE(amd64_linux, sys_shmctl);
DECL_TEMPLATE(amd64_linux, sys_arch_prctl);
+DECL_TEMPLATE(amd64_linux, sys_ptrace);
DECL_TEMPLATE(amd64_linux, sys_pread64);
DECL_TEMPLATE(amd64_linux, sys_pwrite64);
=20
@@ -739,6 +740,60 @@
SET_STATUS_Success( 0 );
}
=20
+// Parts of this are amd64-specific, but the *PEEK* cases are generic.
+// XXX: Why is the memory pointed to by ARG3 never checked?
+PRE(sys_ptrace)
+{
+ PRINT("sys_ptrace ( %d, %d, %p, %p )", ARG1,ARG2,ARG3,ARG4);
+ PRE_REG_READ4(int, "ptrace",=20
+ long, request, long, pid, long, addr, long, data);
+ switch (ARG1) {
+ case VKI_PTRACE_PEEKTEXT:
+ case VKI_PTRACE_PEEKDATA:
+ case VKI_PTRACE_PEEKUSR:
+ PRE_MEM_WRITE( "ptrace(peek)", ARG4,=20
+ sizeof (long));
+ break;
+ case VKI_PTRACE_GETREGS:
+ PRE_MEM_WRITE( "ptrace(getregs)", ARG4,=20
+ sizeof (struct vki_user_regs_struct));
+ break;
+ case VKI_PTRACE_GETFPREGS:
+ PRE_MEM_WRITE( "ptrace(getfpregs)", ARG4,=20
+ sizeof (struct vki_user_i387_struct));
+ break;
+ case VKI_PTRACE_SETREGS:
+ PRE_MEM_READ( "ptrace(setregs)", ARG4,=20
+ sizeof (struct vki_user_regs_struct));
+ break;
+ case VKI_PTRACE_SETFPREGS:
+ PRE_MEM_READ( "ptrace(setfpregs)", ARG4,=20
+ sizeof (struct vki_user_i387_struct));
+ break;
+ default:
+ break;
+ }
+}
+
+POST(sys_ptrace)
+{
+ switch (ARG1) {
+ case VKI_PTRACE_PEEKTEXT:
+ case VKI_PTRACE_PEEKDATA:
+ case VKI_PTRACE_PEEKUSR:
+ POST_MEM_WRITE( ARG4, sizeof (long));
+ break;
+ case VKI_PTRACE_GETREGS:
+ POST_MEM_WRITE( ARG4, sizeof (struct vki_user_regs_struct));
+ break;
+ case VKI_PTRACE_GETFPREGS:
+ POST_MEM_WRITE( ARG4, sizeof (struct vki_user_i387_struct));
+ break;
+ default:
+ break;
+ }
+}
+
PRE(sys_socket)
{
PRINT("sys_socket ( %d, %d, %d )",ARG1,ARG2,ARG3);
@@ -1234,7 +1289,7 @@
LINXY(__NR_sysinfo, sys_sysinfo), // 99=20
=20
GENXY(__NR_times, sys_times), // 100=20
- // (__NR_ptrace, sys_ptrace), // 101=20
+ PLAXY(__NR_ptrace, sys_ptrace), // 101=20
GENX_(__NR_getuid, sys_getuid), // 102=20
// (__NR_syslog, sys_syslog), // 103=20
GENX_(__NR_getgid, sys_getgid), // 104=20
@@ -1261,7 +1316,7 @@
GENX_(__NR_getpgid, sys_getpgid), // 121=20
LINX_(__NR_setfsuid, sys_setfsuid), // 122=20
LINX_(__NR_setfsgid, sys_setfsgid), // 123=20
- // (__NR_getsid, sys_getsid), // 124=20
+ GENX_(__NR_getsid, sys_getsid), // 124=20
=20
// (__NR_capget, sys_capget), // 125=20
// (__NR_capset, sys_capset), // 126=20
@@ -1275,7 +1330,7 @@
GENX_(__NR_mknod, sys_mknod), // 133=20
// (__NR_uselib, sys_uselib), // 134=20
=20
- // (__NR_personality, sys_personality), // 135=20
+ LINX_(__NR_personality, sys_personality), // 135=20
// (__NR_ustat, sys_ustat), // 136=20
GENXY(__NR_statfs, sys_statfs), // 137=20
// (__NR_fstatfs, sys_fstatfs), // 138=20
@@ -1320,7 +1375,7 @@
// (__NR_sethostname, sys_sethostname), // 170=20
// (__NR_setdomainname, sys_setdomainname), // 171=20
// (__NR_iopl, stub_iopl), // 172=20
- // (__NR_ioperm, sys_ioperm), // 173=20
+ LINX_(__NR_ioperm, sys_ioperm), // 173=20
// (__NR_create_module, sys_ni_syscall), // 174=20
=20
// (__NR_init_module, sys_init_module), // 175=20
@@ -1356,8 +1411,8 @@
// (__NR_tkill, sys_tkill), // 200=20
GENXY(__NR_time, sys_time), /*was sys_time64*/ // 201=20
LINXY(__NR_futex, sys_futex), // 202=20
- // (__NR_sched_setaffinity, sys_sched_setaffinity), // 203=20
- // (__NR_sched_getaffinity, sys_sched_getaffinity), // 204=20
+ GENX_(__NR_sched_setaffinity, sys_sched_setaffinity), // 203=20
+ GENXY(__NR_sched_getaffinity, sys_sched_getaffinity), // 204=20
=20
// (__NR_set_thread_area, sys_ni_syscall), // 205=20
LINX_(__NR_io_setup, sys_io_setup), // 206=20
@@ -1399,9 +1454,9 @@
// (__NR_vserver, sys_ni_syscall), // 236=20
// (__NR_vserver, sys_ni_syscall), // 236=20
// (__NR_mbind, sys_mbind), // 237=20
- // (__NR_set_mempolicy, sys_set_mempolicy), // 238=20
+ LINX_(__NR_set_mempolicy, sys_set_mempolicy), // 238=20
=20
- // (__NR_get_mempolicy, sys_get_mempolicy), // 239=20
+ LINXY(__NR_get_mempolicy, sys_get_mempolicy), // 239=20
GENXY(__NR_mq_open, sys_mq_open), // 240=20
GENX_(__NR_mq_unlink, sys_mq_unlink), // 241=20
GENX_(__NR_mq_timedsend, sys_mq_timedsend), // 242=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-22 13:03:20 UTC (re=
v 4226)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c 2005-07-22 15:04:14 UTC (re=
v 4227)
@@ -829,6 +829,37 @@
POST_MEM_WRITE( ARG3, sizeof(struct vki_io_event) );
}
=20
+PRE(sys_set_mempolicy)
+{
+ PRINT("sys_set_mempolicy( %d, %p, %d )", ARG1,ARG2,ARG3);
+ PRE_REG_READ3(long, "set_mempolicy",
+ int, policy, unsigned long *, nodemask,
+ unsigned long, maxnode);
+ PRE_MEM_READ( "set_mempolicy(nodemask)", ARG2,
+ VG_ROUNDUP( ARG3, sizeof(UWord) ) / sizeof(UWord) );
+}
+
+PRE(sys_get_mempolicy)
+{
+ PRINT("sys_get_mempolicy( %p, %p, %d, %p, %x )", ARG1,ARG2,ARG3,ARG4,=
ARG5);
+ PRE_REG_READ5(long, "get_mempolicy",
+ int *, policy, unsigned long *, nodemask,
+ unsigned long, maxnode, unsigned long, addr,
+ unsigned long, flags);
+ if (ARG1 !=3D 0)
+ PRE_MEM_WRITE( "get_mempolicy(policy)", ARG1, sizeof(Int) );
+ if (ARG2 !=3D 0)
+ PRE_MEM_WRITE( "get_mempolicy(nodemask)", ARG2,
+ VG_ROUNDUP( ARG3, sizeof(UWord) * 8 ) / sizeof(UWor=
d) );
+}
+POST(sys_get_mempolicy)
+{
+ if (ARG1 !=3D 0)
+ POST_MEM_WRITE( ARG1, sizeof(Int) );
+ if (ARG2 !=3D 0)
+ POST_MEM_WRITE( ARG2, VG_ROUNDUP( ARG3, sizeof(UWord) * 8 ) / size=
of(UWord) );
+}
+
#undef PRE
#undef POST
=20
Modified: trunk/coregrind/m_syswrap/syswrap-x86-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-x86-linux.c 2005-07-22 13:03:20 UTC=
(rev 4226)
+++ trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2005-07-22 15:04:14 UTC=
(rev 4227)
@@ -2273,8 +2273,8 @@
GENX_(__NR_vserver, sys_ni_syscall), // 273
//zz // (__NR_mbind, sys_mbind), // 274 ?/?
//zz=20
-//zz // (__NR_get_mempolicy, sys_get_mempolicy), // 275 ?/?
-//zz // (__NR_set_mempolicy, sys_set_mempolicy), // 276 ?/?
+ LINXY(__NR_get_mempolicy, sys_get_mempolicy), // 275 ?/?
+ LINX_(__NR_set_mempolicy, sys_set_mempolicy), // 276 ?/?
GENXY(__NR_mq_open, sys_mq_open), // 277
GENX_(__NR_mq_unlink, sys_mq_unlink), // (mq_open+1)
GENX_(__NR_mq_timedsend, sys_mq_timedsend), // (mq_open+2)
Modified: trunk/include/vki-amd64-linux.h
=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/include/vki-amd64-linux.h 2005-07-22 13:03:20 UTC (rev 4226)
+++ trunk/include/vki-amd64-linux.h 2005-07-22 15:04:14 UTC (rev 4227)
@@ -445,6 +445,20 @@
// From linux-2.6.9/include/asm-x86_64/user.h
//----------------------------------------------------------------------
=20
+struct vki_user_i387_struct {
+ unsigned short cwd;
+ unsigned short swd;
+ unsigned short twd; /* Note this is not the same as the 32bit/x87/FSAVE=
twd */
+ unsigned short fop;
+ __vki_u64 rip;
+ __vki_u64 rdp;
+ __vki_u32 mxcsr;
+ __vki_u32 mxcsr_mask;
+ __vki_u32 st_space[32]; /* 8*16 bytes for each FP-reg =3D 128 bytes */
+ __vki_u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg =3D 256 bytes =
*/
+ __vki_u32 padding[24];
+};
+
struct vki_user_regs_struct {
unsigned long r15,r14,r13,r12,rbp,rbx,r11,r10;
unsigned long r9,r8,rax,rcx,rdx,rsi,rdi,orig_rax;
@@ -611,6 +625,15 @@
};
=20
//----------------------------------------------------------------------
+// From linux-2.6.12.2/include/asm-x86_64/ptrace.h
+//----------------------------------------------------------------------
+
+#define VKI_PTRACE_GETREGS 12
+#define VKI_PTRACE_SETREGS 13
+#define VKI_PTRACE_GETFPREGS 14
+#define VKI_PTRACE_SETFPREGS 15
+
+//----------------------------------------------------------------------
// And that's it!
//----------------------------------------------------------------------
=20
|