|
From: <sv...@va...> - 2009-04-23 04:49:29
|
Author: njn
Date: 2009-04-23 05:49:15 +0100 (Thu, 23 Apr 2009)
New Revision: 9585
Log:
Fix getitimer and setitimer wrappers. Based on a patch from Filipe
Cabecinhas.
Modified:
branches/DARWIN/coregrind/m_syswrap/syswrap-darwin.c
branches/DARWIN/coregrind/m_syswrap/syswrap-generic.c
Modified: branches/DARWIN/coregrind/m_syswrap/syswrap-darwin.c
===================================================================
--- branches/DARWIN/coregrind/m_syswrap/syswrap-darwin.c 2009-04-23 04:40:02 UTC (rev 9584)
+++ branches/DARWIN/coregrind/m_syswrap/syswrap-darwin.c 2009-04-23 04:49:15 UTC (rev 9585)
@@ -7039,10 +7039,10 @@
// _____(__NR_setgroups), // 80
GENX_(__NR_getpgrp, sys_getpgrp),
// _____(__NR_setpgid),
- GENX_(__NR_setitimer, sys_setitimer),
+ GENXY(__NR_setitimer, sys_setitimer),
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(84)), // old wait
// _____(__NR_swapon),
- GENX_(__NR_getitimer, sys_getitimer),
+ GENXY(__NR_getitimer, sys_getitimer),
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(87)), // old gethostname
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(88)), // old sethostname
MACXY(__NR_getdtablesize, sys_getdtablesize),
Modified: branches/DARWIN/coregrind/m_syswrap/syswrap-generic.c
===================================================================
--- branches/DARWIN/coregrind/m_syswrap/syswrap-generic.c 2009-04-23 04:40:02 UTC (rev 9584)
+++ branches/DARWIN/coregrind/m_syswrap/syswrap-generic.c 2009-04-23 04:49:15 UTC (rev 9585)
@@ -2217,14 +2217,20 @@
PRE(sys_getitimer)
{
+ struct vki_itimerval *value = (struct vki_itimerval*)ARG2;
PRINT("sys_getitimer ( %ld, %#lx )", ARG1, ARG2);
PRE_REG_READ2(long, "getitimer", int, which, struct itimerval *, value);
- PRE_MEM_WRITE( "getitimer(value)", ARG2, sizeof(struct vki_itimerval) );
+
+ PRE_timeval_WRITE( "getitimer(value.it_interval)", &(value->it_interval));
+ PRE_timeval_WRITE( "getitimer(value.it_value)", &(value->it_value));
}
+
POST(sys_getitimer)
{
if (ARG2 != (Addr)NULL) {
- POST_MEM_WRITE(ARG2, sizeof(struct vki_itimerval));
+ struct vki_itimerval *value = (struct vki_itimerval*)ARG2;
+ POST_timeval_WRITE( &(value->it_interval) );
+ POST_timeval_WRITE( &(value->it_value) );
}
}
@@ -2234,16 +2240,28 @@
PRE_REG_READ3(long, "setitimer",
int, which,
struct itimerval *, value, struct itimerval *, ovalue);
- if (ARG2 != (Addr)NULL)
- PRE_MEM_READ( "setitimer(value)", ARG2, sizeof(struct vki_itimerval) );
- if (ARG3 != (Addr)NULL)
- PRE_MEM_WRITE( "setitimer(ovalue)", ARG3, sizeof(struct vki_itimerval));
+ if (ARG2 != (Addr)NULL) {
+ struct vki_itimerval *value = (struct vki_itimerval*)ARG2;
+ PRE_timeval_READ( "getitimer(value->it_interval)",
+ &(value->it_interval));
+ PRE_timeval_READ( "getitimer(value->it_value)",
+ &(value->it_value));
+ }
+ if (ARG3 != (Addr)NULL) {
+ struct vki_itimerval *ovalue = (struct vki_itimerval*)ARG3;
+ PRE_timeval_WRITE( "getitimer(ovalue->it_interval)",
+ &(ovalue->it_interval));
+ PRE_timeval_WRITE( "getitimer(ovalue->it_value)",
+ &(ovalue->it_value));
+ }
}
POST(sys_setitimer)
{
if (ARG3 != (Addr)NULL) {
- POST_MEM_WRITE(ARG3, sizeof(struct vki_itimerval));
+ struct vki_itimerval *ovalue = (struct vki_itimerval*)ARG3;
+ POST_timeval_WRITE( &(ovalue->it_interval) );
+ POST_timeval_WRITE( &(ovalue->it_value) );
}
}
|