Author: sewardj
Date: 2007-11-29 03:08:32 +0000 (Thu, 29 Nov 2007)
New Revision: 7249

Log:
Changes to make Memcheck work sanely on recent incarnations of AIX 5.3:

* add a few more syscall wrappers, and fix a couple of buggy ones

* intercept strcmp et al in a few more libraries

Modified:
   trunk/coregrind/m_syswrap/priv_syswrap-aix5.h
   trunk/coregrind/m_syswrap/syswrap-aix5.c
   trunk/coregrind/m_syswrap/syswrap-ppc32-aix5.c
   trunk/coregrind/m_syswrap/syswrap-ppc64-aix5.c
   trunk/memcheck/mc_replace_strmem.c


Modified: trunk/coregrind/m_syswrap/priv_syswrap-aix5.h
===================================================================
--- trunk/coregrind/m_syswrap/priv_syswrap-aix5.h       2007-11-29 03:06:25 UTC 
(rev 7248)
+++ trunk/coregrind/m_syswrap/priv_syswrap-aix5.h       2007-11-29 03:08:32 UTC 
(rev 7249)
@@ -71,7 +71,6 @@
 
 DECL_TEMPLATE(aix5, sys___libc_sbrk);
 DECL_TEMPLATE(aix5, sys___msleep);
-DECL_TEMPLATE(aix5, sys__clock_gettime);
 DECL_TEMPLATE(aix5, sys__clock_settime);
 DECL_TEMPLATE(aix5, sys__exit);
 DECL_TEMPLATE(aix5, sys__fp_fpscrx_sc);
@@ -104,6 +103,7 @@
 DECL_TEMPLATE(aix5, sys_connext);
 DECL_TEMPLATE(aix5, sys_execve);
 DECL_TEMPLATE(aix5, sys_finfo);
+DECL_TEMPLATE(aix5, sys_fstatfs);
 DECL_TEMPLATE(aix5, sys_fstatx);
 DECL_TEMPLATE(aix5, sys_fsync);
 DECL_TEMPLATE(aix5, sys_getdirent);
@@ -131,6 +131,7 @@
 DECL_TEMPLATE(aix5, sys_kread);
 DECL_TEMPLATE(aix5, sys_kreadv);
 DECL_TEMPLATE(aix5, sys_kthread_ctl);
+DECL_TEMPLATE(aix5, sys_ktruncate);
 DECL_TEMPLATE(aix5, sys_kwaitpid);
 DECL_TEMPLATE(aix5, sys_kwrite);
 DECL_TEMPLATE(aix5, sys_kwritev);
@@ -141,6 +142,7 @@
 DECL_TEMPLATE(aix5, sys_mkdir);
 DECL_TEMPLATE(aix5, sys_mmap);
 DECL_TEMPLATE(aix5, sys_mprotect);
+DECL_TEMPLATE(aix5, sys_mntctl);
 DECL_TEMPLATE(aix5, sys_munmap);
 DECL_TEMPLATE(aix5, sys_naccept);
 DECL_TEMPLATE(aix5, sys_ngetpeername);

Modified: trunk/coregrind/m_syswrap/syswrap-aix5.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-aix5.c    2007-11-29 03:06:25 UTC (rev 
7248)
+++ trunk/coregrind/m_syswrap/syswrap-aix5.c    2007-11-29 03:08:32 UTC (rev 
7249)
@@ -479,12 +479,6 @@
 
 /* __unload is handled in the platform-specific files. */
 
-PRE(sys__clock_gettime)
-{
-   PRINT("_clock_gettime (UNDOCUMENTED) ( %d, %p )", ARG1, ARG2);
-   PRE_REG_READ2(int, "_clock_gettime", int, arg1, int, arg2);
-}
-
 PRE(sys__clock_settime)
 {
    PRINT("_clock_settime (UNDOCUMENTED) ( %d, %p )", ARG1, ARG2);
@@ -1069,6 +1063,17 @@
    POST_MEM_WRITE( ARG3, ARG4 );
 }
 
+PRE(sys_fstatfs)
+{
+   PRINT("sys_fstatfs ( %ld, %p )", ARG1, ARG2);
+   PRE_REG_READ2(UWord, "fstatfs", UWord, fd, struct statfs *, buf);
+   PRE_MEM_WRITE( "fstatfs(buf)", ARG2, sizeof(struct statfs) );
+}
+POST(sys_fstatfs)
+{
+   POST_MEM_WRITE( ARG2, sizeof(struct statfs) );
+}
+
 PRE(sys_fstatx)
 {
    PRINT("fstatx ( %ld, %p, %ld, %ld )", ARG1, ARG2, ARG3, ARG4 );
@@ -1599,6 +1604,13 @@
    PRINT("kthread_ctl (BOGUS HANDLER)");
 }
 
+PRE(sys_ktruncate)
+{
+   PRINT("ktruncate( %p(%s), %lx, %lx )", ARG1,ARG1, ARG2, ARG3 );
+   PRE_REG_READ3(int, "ktruncate", char*, path, long, arg2, long, arg3 );
+   PRE_MEM_RASCIIZ( "ktruncate(path)", ARG1 );
+}
+
 PRE(sys_kwaitpid)
 {
    /* Note: args 1 and 2 (status, pid) opposite way round
@@ -1702,6 +1714,27 @@
       VG_(discard_translations)( addr, len, "POST(sys_mmap)" );
 }
 
+PRE(sys_mntctl)
+{
+   PRINT("mntctl ( %ld, %ld, %p )", ARG1, ARG2, ARG3 );
+   PRE_REG_READ3(long, "mntctl", long, command, long, size, char*, buffer);
+   PRE_MEM_WRITE( "mntctl(buffer)", ARG3, ARG2 );
+}
+POST(sys_mntctl)
+{
+   vg_assert(SUCCESS);
+   if (RES == 0) {
+      /* Buffer too small.  First word is the real required size. */
+      POST_MEM_WRITE( ARG3, sizeof(Word) );
+   } else {
+      /* RES is the number of struct vmount's written to the buf.  But
+         these are variable length and to find the end would require
+         inspecting each in turn.  So be simple and just mark the
+         entire buffer as defined. */
+      POST_MEM_WRITE( ARG3, ARG2 );
+   }
+}
+
 PRE(sys_mprotect)
 {
    PRINT("mprotect (BOGUS HANDLER)( %p, %ld, %p )", ARG1, ARG2, ARG3);

Modified: trunk/coregrind/m_syswrap/syswrap-ppc32-aix5.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-ppc32-aix5.c      2007-11-29 03:06:25 UTC 
(rev 7248)
+++ trunk/coregrind/m_syswrap/syswrap-ppc32-aix5.c      2007-11-29 03:08:32 UTC 
(rev 7249)
@@ -340,6 +340,7 @@
 
 DECL_TEMPLATE(ppc32_aix5, sys___loadx);
 DECL_TEMPLATE(ppc32_aix5, sys___unload);
+DECL_TEMPLATE(ppc32_aix5, sys__clock_gettime);
 DECL_TEMPLATE(ppc32_aix5, sys_thread_setmymask_fast);
 DECL_TEMPLATE(ppc32_aix5, sys_thread_setstate);
 DECL_TEMPLATE(ppc32_aix5, sys_FAKE_SIGRETURN);
@@ -452,6 +453,20 @@
    ML_(aix5_rescan_procmap_after_load_or_unload)();
 }
 
+PRE(sys__clock_gettime)
+{
+   /* Seems like ARG3 points at a destination buffer? */
+   /* _clock_gettime (UNDOCUMENTED) ( 0, 0xA, 0x2FF21808 ) */
+   PRINT("_clock_gettime (UNDOCUMENTED) ( %d, %p, %p )", ARG1, ARG2, ARG3 );
+   PRE_REG_READ3(int, "_clock_gettime", int, arg1, int, arg2, void*, arg3);
+   PRE_MEM_WRITE( "_clock_gettime(dst)", ARG3, sizeof(struct timespec) );
+}
+POST(sys__clock_gettime)
+{
+   vg_assert(SUCCESS);
+   POST_MEM_WRITE( ARG3, sizeof(struct timespec) );
+}
+
 PRE(sys_thread_setmymask_fast)
 {
    /* args: a 64-bit signal mask in ARG1/2.*/
@@ -730,7 +745,7 @@
     PLAXY(__NR_AIX5___loadx,            sys___loadx),
     AIXX_(__NR_AIX5___msleep,           sys___msleep),
     PLAXY(__NR_AIX5___unload,           sys___unload),
-    AIXX_(__NR_AIX5__clock_gettime,     sys__clock_gettime),
+    PLAXY(__NR_AIX5__clock_gettime,     sys__clock_gettime),
     AIXX_(__NR_AIX5__clock_settime,     sys__clock_settime),
     AIXX_(__NR_AIX5__exit,              sys__exit),
     AIXX_(__NR_AIX5__fp_fpscrx_sc,      sys__fp_fpscrx_sc),
@@ -763,6 +778,7 @@
     AIXX_(__NR_AIX5_connext,            sys_connext),
     AIXX_(__NR_AIX5_execve,             sys_execve),
     AIXXY(__NR_AIX5_finfo,              sys_finfo),
+    AIXXY(__NR_AIX5_fstatfs,            sys_fstatfs),
     AIXXY(__NR_AIX5_fstatx,             sys_fstatx),
     AIXX_(__NR_AIX5_fsync,              sys_fsync),
     AIXXY(__NR_AIX5_getdirent,          sys_getdirent),
@@ -790,6 +806,7 @@
     AIXXY(__NR_AIX5_kread,              sys_kread),
     AIXXY(__NR_AIX5_kreadv,             sys_kreadv),
     AIXX_(__NR_AIX5_kthread_ctl,        sys_kthread_ctl),
+    AIXX_(__NR_AIX5_ktruncate,          sys_ktruncate),
     AIXXY(__NR_AIX5_kwaitpid,           sys_kwaitpid),
     AIXX_(__NR_AIX5_kwrite,             sys_kwrite),
     AIXX_(__NR_AIX5_kwritev,            sys_kwritev),
@@ -799,6 +816,7 @@
     AIXX_(__NR_AIX5_lseek,              sys_lseek),
     AIXX_(__NR_AIX5_mkdir,              sys_mkdir),
     AIXXY(__NR_AIX5_mmap,               sys_mmap),
+    AIXXY(__NR_AIX5_mntctl,             sys_mntctl),
     AIXXY(__NR_AIX5_mprotect,           sys_mprotect),
     AIXXY(__NR_AIX5_munmap,             sys_munmap),
     AIXXY(__NR_AIX5_naccept,            sys_naccept),

Modified: trunk/coregrind/m_syswrap/syswrap-ppc64-aix5.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-ppc64-aix5.c      2007-11-29 03:06:25 UTC 
(rev 7248)
+++ trunk/coregrind/m_syswrap/syswrap-ppc64-aix5.c      2007-11-29 03:08:32 UTC 
(rev 7249)
@@ -338,6 +338,7 @@
 #define PRE(name)       DEFN_PRE_TEMPLATE(ppc64_aix5, name)
 #define POST(name)      DEFN_POST_TEMPLATE(ppc64_aix5, name)
 
+DECL_TEMPLATE(ppc64_aix5, sys__clock_gettime);
 DECL_TEMPLATE(ppc64_aix5, sys__fp_fpscrx64_);
 DECL_TEMPLATE(ppc64_aix5, sys_kload);
 DECL_TEMPLATE(ppc64_aix5, sys_kunload64);
@@ -345,6 +346,20 @@
 DECL_TEMPLATE(ppc64_aix5, sys_FAKE_SIGRETURN);
 
 
+PRE(sys__clock_gettime)
+{
+   /* Seems like ARG2 points at a destination buffer? */
+   /* _clock_gettime (UNDOCUMENTED) ( 0, 0xA, 0x2FF21808 ) */
+   PRINT("_clock_gettime (UNDOCUMENTED) ( %d, %p, %p )", ARG1, ARG2, ARG3 );
+   PRE_REG_READ3(int, "_clock_gettime", int, arg1, int, arg2, void*, arg3);
+   PRE_MEM_WRITE( "_clock_gettime(dst)", ARG2, sizeof(struct timespec) );
+}
+POST(sys__clock_gettime)
+{
+   vg_assert(SUCCESS);
+   POST_MEM_WRITE( ARG2, sizeof(struct timespec) );
+}
+
 PRE(sys__fp_fpscrx64_)
 {
    PRINT("_fp_fpscrx64_ (BOGUS HANDLER)");
@@ -638,6 +653,7 @@
 = {
     AIXXY(__NR_AIX5___libc_sbrk,        sys___libc_sbrk),
     AIXX_(__NR_AIX5___msleep,           sys___msleep),
+    PLAXY(__NR_AIX5__clock_gettime,     sys__clock_gettime),
     AIXX_(__NR_AIX5__exit,              sys__exit),
     PLAX_(__NR_AIX5__fp_fpscrx64_,      sys__fp_fpscrx64_),
     AIXX_(__NR_AIX5__getpid,            sys__getpid),
@@ -660,6 +676,8 @@
     AIXX_(__NR_AIX5_close,              sys_close),
     AIXX_(__NR_AIX5_connext,            sys_connext),
     AIXX_(__NR_AIX5_execve,             sys_execve),
+    AIXXY(__NR_AIX5_finfo,              sys_finfo),
+    AIXXY(__NR_AIX5_fstatfs,            sys_fstatfs),
     AIXXY(__NR_AIX5_fstatx,             sys_fstatx),
     AIXXY(__NR_AIX5_getdirent,          sys_getdirent),
     AIXXY(__NR_AIX5_getdirent64,        sys_getdirent64),
@@ -683,6 +701,7 @@
     AIXXY(__NR_AIX5_kread,              sys_kread),
     AIXXY(__NR_AIX5_kreadv,             sys_kreadv),
     AIXX_(__NR_AIX5_kthread_ctl,        sys_kthread_ctl),
+    AIXX_(__NR_AIX5_ktruncate,          sys_ktruncate),
     PLAXY(__NR_AIX5_kunload64,          sys_kunload64),
     AIXXY(__NR_AIX5_kwaitpid,           sys_kwaitpid),
     AIXX_(__NR_AIX5_kwrite,             sys_kwrite),
@@ -690,6 +709,7 @@
     AIXX_(__NR_AIX5_lseek,              sys_lseek),
     AIXX_(__NR_AIX5_mkdir,              sys_mkdir),
     AIXXY(__NR_AIX5_mmap,               sys_mmap),
+    AIXXY(__NR_AIX5_mntctl,             sys_mntctl),
     AIXXY(__NR_AIX5_mprotect,           sys_mprotect),
     AIXXY(__NR_AIX5_munmap,             sys_munmap),
     AIXXY(__NR_AIX5_ngetpeername,       sys_ngetpeername),

Modified: trunk/memcheck/mc_replace_strmem.c
===================================================================
--- trunk/memcheck/mc_replace_strmem.c  2007-11-29 03:06:25 UTC (rev 7248)
+++ trunk/memcheck/mc_replace_strmem.c  2007-11-29 03:08:32 UTC (rev 7249)
@@ -819,6 +819,9 @@
 Str5FNs(libgdkZdso)                       /* libgdk.so */
 Str5FNs(libcursesZdaZLshr42ZdoZR)         /* libcurses.a(shr42.o) */
 Str5FNs(libqtZda)                         /* libqt.a */
+Str5FNs(ZaZLlibglibZhZaZdsoZaZR)          /* *(libglib-*.so*) */
+Str5FNs(ZaZLlibfontconfigZdsoZaZR)        /* *(libfontconfig.so*) */
+Str5FNs(libQtZaa)                         /* libQt*.a */
 #endif
 #if defined(VGP_ppc64_aix5)
 Str5FNs(NONE)                             /* in main exe */
@@ -832,6 +835,9 @@
 Str5FNs(libCZdaZLshrcoreZu64ZdoZR)        /* libC.a(shrcore_64.o) */
 Str5FNs(libmpiZurZdaZLmpci64ZurZdoZR)     /* libmpi_r.a(mpci64_r.o) */
 Str5FNs(libqtZda)                         /* libqt.a */
+Str5FNs(ZaZLlibglibZhZaZdsoZaZR)          /* *(libglib-*.so*) */
+Str5FNs(ZaZLlibfontconfigZdsoZaZR)        /* *(libfontconfig.so*) */
+Str5FNs(libQtZaa)                         /* libQt*.a */
 #endif
 
 


-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
Valgrind-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/valgrind-developers

Reply via email to