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);
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);
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);
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);
/* __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);
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 );
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
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);
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);
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.*/
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),
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),
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),
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),
#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);
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)");
= {
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),
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),
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),
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),
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 */
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