|
From: <sv...@va...> - 2006-01-10 15:57:03
|
Author: sewardj
Date: 2006-01-10 15:56:59 +0000 (Tue, 10 Jan 2006)
New Revision: 5509
Log:
Oops, handle amd64 arity-2 orig calls.
Modified:
branches/FNWRAP/include/valgrind.h
Modified: branches/FNWRAP/include/valgrind.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
--- branches/FNWRAP/include/valgrind.h 2006-01-10 15:49:46 UTC (rev 5508)
+++ branches/FNWRAP/include/valgrind.h 2006-01-10 15:56:59 UTC (rev 5509)
@@ -643,6 +643,7 @@
do { volatile unsigned long _junk; \
CALL_FN_W_v(_junk,fnptr); } while (0)
=20
+
#define CALL_FN_W_W(lval, fnptr, arg1) \
do { \
volatile void* _fnptr =3D (fnptr); \
@@ -661,6 +662,35 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
+#define CALL_FN_v_W(fnptr, arg1) \
+ do { volatile unsigned long _junk; \
+ CALL_FN_W_W(_junk,fnptr,arg1); } while (0)
+
+
+#define CALL_FN_W_WW(lval, fnptr, arg1,arg2) \
+ do { \
+ volatile void* _fnptr =3D (fnptr); \
+ volatile unsigned long _argvec[3]; \
+ volatile unsigned long _res; \
+ _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[1] =3D (unsigned long)(arg1); \
+ _argvec[2] =3D (unsigned long)(arg2); \
+ __asm__ volatile( \
+ "movq 16(%%rax), %%rsi\n\t" \
+ "movq 8(%%rax), %%rdi\n\t" \
+ "movq (%%rax), %%rax\n\t" /* target->%rax */ \
+ VALGRIND_CALL_NOREDIR_RAX \
+ : /*out*/ "=3Da" (_res) \
+ : /*in*/ "a" (&_argvec[0]) \
+ : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \
+ ); \
+ lval =3D (__typeof__(lval)) _res; \
+ } while (0)
+
+#define CALL_FN_v_WW(fnptr, arg1,arg2) \
+ do { volatile unsigned long _junk; \
+ CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0)
+
#endif /* ARCH_amd64 */
=20
/* --------------------------- ppc32 --------------------------- */
|