|
From: <sv...@va...> - 2006-03-11 12:58:00
|
Author: sewardj
Date: 2006-03-11 12:57:41 +0000 (Sat, 11 Mar 2006)
New Revision: 5745
Log:
Add missing x86-linux CALL_FN_W_11W macro.
Modified:
trunk/include/valgrind.h
Modified: trunk/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
--- trunk/include/valgrind.h 2006-03-11 06:48:20 UTC (rev 5744)
+++ trunk/include/valgrind.h 2006-03-11 12:57:41 UTC (rev 5745)
@@ -451,6 +451,10 @@
do { volatile unsigned long _junk; \
CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0)
=20
+#define CALL_FN_v_WWW(fnptr, arg1,arg2,arg3) \
+ do { volatile unsigned long _junk; \
+ CALL_FN_W_WWW(_junk,fnptr,arg1,arg2,arg3); } while (0)
+
/* ---------------------------- x86 ---------------------------- */
=20
#if defined(ARCH_x86)
@@ -762,6 +766,47 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \
+ arg6,arg7,arg8,arg9,arg10, \
+ arg11) \
+ do { \
+ volatile OrigFn _orig =3D (orig); \
+ volatile unsigned long _argvec[12]; \
+ volatile unsigned long _res; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
+ _argvec[1] =3D (unsigned long)(arg1); \
+ _argvec[2] =3D (unsigned long)(arg2); \
+ _argvec[3] =3D (unsigned long)(arg3); \
+ _argvec[4] =3D (unsigned long)(arg4); \
+ _argvec[5] =3D (unsigned long)(arg5); \
+ _argvec[6] =3D (unsigned long)(arg6); \
+ _argvec[7] =3D (unsigned long)(arg7); \
+ _argvec[8] =3D (unsigned long)(arg8); \
+ _argvec[9] =3D (unsigned long)(arg9); \
+ _argvec[10] =3D (unsigned long)(arg10); \
+ _argvec[11] =3D (unsigned long)(arg11); \
+ __asm__ volatile( \
+ "pushl 44(%%eax)\n\t" \
+ "pushl 40(%%eax)\n\t" \
+ "pushl 36(%%eax)\n\t" \
+ "pushl 32(%%eax)\n\t" \
+ "pushl 28(%%eax)\n\t" \
+ "pushl 24(%%eax)\n\t" \
+ "pushl 20(%%eax)\n\t" \
+ "pushl 16(%%eax)\n\t" \
+ "pushl 12(%%eax)\n\t" \
+ "pushl 8(%%eax)\n\t" \
+ "pushl 4(%%eax)\n\t" \
+ "movl (%%eax), %%eax\n\t" /* target->%eax */ \
+ VALGRIND_CALL_NOREDIR_EAX \
+ "addl $44, %%esp\n" \
+ : /*out*/ "=3Da" (_res) \
+ : /*in*/ "a" (&_argvec[0]) \
+ : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \
+ ); \
+ lval =3D (__typeof__(lval)) _res; \
+ } while (0)
+
#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \
arg6,arg7,arg8,arg9,arg10, \
arg11,arg12) \
@@ -1067,6 +1112,10 @@
#define VG_IS_TOOL_USERREQ(a, b, v) \
(VG_USERREQ_TOOL_BASE(a,b) =3D=3D ((v) & 0xffff0000))
=20
+/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !!=20
+ This enum comprises an ABI exported by Valgrind to programs
+ which use client requests. DO NOT CHANGE THE ORDER OF THESE
+ ENTRIES, NOR DELETE ANY -- add new ones at the end. */
typedef
enum { VG_USERREQ__RUNNING_ON_VALGRIND =3D 0x1001,
VG_USERREQ__DISCARD_TRANSLATIONS =3D 0x1002,
|