|
From: <sv...@va...> - 2005-05-08 02:05:13
|
Author: njn
Date: 2005-05-08 03:04:49 +0100 (Sun, 08 May 2005)
New Revision: 3630
Modified:
trunk/coregrind/amd64-linux/core_platform.h
trunk/coregrind/arm-linux/core_platform.h
trunk/coregrind/core.h
trunk/coregrind/m_sigframe/sigframe-amd64-linux.c
trunk/coregrind/m_sigframe/sigframe-arm-linux.c
trunk/coregrind/m_sigframe/sigframe-x86-linux.c
trunk/coregrind/vg_scheduler.c
trunk/coregrind/vg_signals.c
trunk/coregrind/vg_syscalls.c
trunk/coregrind/x86-linux/core_platform.h
Log:
Cleanups of syscall-related macros:
- Got rid of SET_THREAD_REG and some of the related macros, hallelujah.
Replaced SET_SYSCALL_RETVAL with VGP_TRACK_SYSCALL_RETVAL, which avoids
the redundant resetting of the syscall's return value. The other
remaining two related macros, SET_CLREQ_RETVAL and SET_CLCALL_RETVAL, w=
ere
able to be moved to vg_scheduler.c rather than being global, hoorah.
- Passed the required syscall args to VG_(do_sys_sigaltstack)(), rather t=
han
grabbing them from within, removing its reliance on SYSCALL_ARG[12].
It also makes the VG_(do_sys_sig*)() functions more consistent.
- As a result of these changes, was able to remove the SYSCALL_NUM,
SYSCALL_RET and SYSCALL_ARG[123456] macros, yay.
- Replaced the implementations of VG_(set_return_from_syscall_shadow)() a=
nd
VG_(get_exit_status_shadow)() with shorter ones that avoid using arch-s=
tate
offsets.
Modified: trunk/coregrind/amd64-linux/core_platform.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/coregrind/amd64-linux/core_platform.h 2005-05-08 00:45:11 UTC (=
rev 3629)
+++ trunk/coregrind/amd64-linux/core_platform.h 2005-05-08 02:04:49 UTC (=
rev 3630)
@@ -52,10 +52,9 @@
// Setting a syscall result
#define VGP_SET_SYSCALL_RESULT(regs, val) ((regs).vex.guest_RAX =3D (=
val))
=20
-// Setting thread regs and shadow regs from within the core
-#define SET_SYSCALL_RETVAL(zztid, zzval) \
- SET_THREAD_REG(zztid, zzval, SYSCALL_RET, post_reg_write, \
- Vg_CoreSysCall, zztid, O_SYSCALL_RET, sizeof(UWord))
+// For informing tools that a syscall result has been set.
+#define VGP_TRACK_SYSCALL_RETVAL(zztid) \
+ VG_TRACK( post_reg_write, Vg_CoreSysCall, zztid, O_SYSCALL_RET, sizeo=
f(UWord) );
=20
/* ---------------------------------------------------------------------
Exports of vg_ldt.c
Modified: trunk/coregrind/arm-linux/core_platform.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/coregrind/arm-linux/core_platform.h 2005-05-08 00:45:11 UTC (re=
v 3629)
+++ trunk/coregrind/arm-linux/core_platform.h 2005-05-08 02:04:49 UTC (re=
v 3630)
@@ -52,11 +52,10 @@
// ToDo XXX ????????
#define VGP_SET_SYSCALL_RESULT(regs, val) ((regs).vex.guest_R0 =3D (v=
al))
=20
-// Setting thread regs and shadow regs from within the core
+// For informing tools that a syscall result has been set.
// XXX ToDo: not sure about this
-#define SET_SYSCALL_RETVAL(zztid, zzval) \
- SET_THREAD_REG(zztid, zzval, SYSCALL_RET, post_reg_write, \
- Vg_CoreSysCall, zztid, O_SYSCALL_RET, sizeof(UWord))
+#define VGP_TRACK_SYSCALL_RETVAL(zztid) \
+ VG_TRACK( post_reg_write, Vg_CoreSysCall, zztid, O_SYSCALL_RET, sizeo=
f(UWord) );
=20
/* ---------------------------------------------------------------------
ucontext stuff
Modified: trunk/coregrind/core.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/coregrind/core.h 2005-05-08 00:45:11 UTC (rev 3629)
+++ trunk/coregrind/core.h 2005-05-08 02:04:49 UTC (rev 3630)
@@ -703,22 +703,6 @@
/* If true, a fault is Valgrind-internal (ie, a bug) */
extern Bool VG_(my_fault);
=20
-// Write a value to a client's thread register, and shadow (if necessary=
).
-// Note that there are some further similar macros in the arch- and
-// platform-specific parts; these ones are the totally generic ones.
-#define SET_THREAD_REG( zztid, zzval, zzGETREG, zzevent, zzargs... ) \
- do { zzGETREG(VG_(threads)[zztid].arch) =3D (zzval); \
- VG_TRACK( zzevent, ##zzargs ); \
- } while (0)
-
-#define SET_CLREQ_RETVAL(zztid, zzval) \
- SET_THREAD_REG(zztid, zzval, CLREQ_RET, post_reg_write, \
- Vg_CoreClientReq, zztid, O_CLREQ_RET, sizeof(UWord))
-
-#define SET_CLCALL_RETVAL(zztid, zzval, f) \
- SET_THREAD_REG(zztid, zzval, CLREQ_RET, post_reg_write_clientcall_ret=
urn, \
- zztid, O_CLREQ_RET, sizeof(UWord), f)
-
/* ---------------------------------------------------------------------
Exports of vg_signals.c
------------------------------------------------------------------ */
@@ -738,13 +722,14 @@
extern void VG_(poll_signals) ( ThreadId );
=20
/* Fake system calls for signal handling. */
-extern Int VG_(do_sys_sigaltstack) ( ThreadId tid );
-extern Int VG_(do_sys_sigaction) ( Int signo,=20
- const struct vki_sigaction *new_a=
ct,=20
- struct vki_sigaction *old_act );
-extern Int VG_(do_sys_sigprocmask) ( ThreadId tid, Int how,=20
- vki_sigset_t* set,
- vki_sigset_t* oldset );
+extern Int VG_(do_sys_sigaltstack) ( ThreadId tid, vki_stack_t* ss,
+ vki_stack_t* oss );
+extern Int VG_(do_sys_sigaction) ( Int signo,=20
+ const struct vki_sigaction *new_act=
,=20
+ struct vki_sigaction *old_act );
+extern Int VG_(do_sys_sigprocmask) ( ThreadId tid, Int how,=20
+ vki_sigset_t* set,
+ vki_sigset_t* oldset );
=20
/* Handy utilities to block/restore all host signals. */
extern void VG_(block_all_host_signals)=20
@@ -1064,15 +1049,15 @@
#define GENX_(const, name) SYS_WRAPPER_ENTRY_X_(vgArch_gen, const, na=
me)
#define GENXY(const, name) SYS_WRAPPER_ENTRY_XY(vgArch_gen, const, na=
me)
=20
-// Space-saving macros for syscall wrappers
-#define SYSNO SYSCALL_NUM(tst->arch) // in PRE(x)
-#define RES SYSCALL_RET(tst->arch) // in POST(x)
-#define ARG1 SYSCALL_ARG1(tst->arch)
-#define ARG2 SYSCALL_ARG2(tst->arch)
-#define ARG3 SYSCALL_ARG3(tst->arch)
-#define ARG4 SYSCALL_ARG4(tst->arch)
-#define ARG5 SYSCALL_ARG5(tst->arch)
-#define ARG6 SYSCALL_ARG6(tst->arch)
+// Space-saving macros for syscall PRE() and POST() wrappers
+#define RES ((tst->arch).vex.VGP_SYSCALL_RET)
+#define SYSNO ((tst->arch).vex.VGP_SYSCALL_NUM)
+#define ARG1 ((tst->arch).vex.VGP_SYSCALL_ARG1)
+#define ARG2 ((tst->arch).vex.VGP_SYSCALL_ARG2)
+#define ARG3 ((tst->arch).vex.VGP_SYSCALL_ARG3)
+#define ARG4 ((tst->arch).vex.VGP_SYSCALL_ARG4)
+#define ARG5 ((tst->arch).vex.VGP_SYSCALL_ARG5)
+#define ARG6 ((tst->arch).vex.VGP_SYSCALL_ARG6)
=20
// For setting the result of a syscall in a wrapper
#define SET_RESULT(val) \
@@ -1602,16 +1587,6 @@
// Platform-specific things defined in eg. x86/*.c
// ---------------------------------------------------------------------
=20
-// Accessors for the ThreadArchState
-#define SYSCALL_NUM(regs) ((regs).vex.VGP_SYSCALL_NUM)
-#define SYSCALL_ARG1(regs) ((regs).vex.VGP_SYSCALL_ARG1)
-#define SYSCALL_ARG2(regs) ((regs).vex.VGP_SYSCALL_ARG2)
-#define SYSCALL_ARG3(regs) ((regs).vex.VGP_SYSCALL_ARG3)
-#define SYSCALL_ARG4(regs) ((regs).vex.VGP_SYSCALL_ARG4)
-#define SYSCALL_ARG5(regs) ((regs).vex.VGP_SYSCALL_ARG5)
-#define SYSCALL_ARG6(regs) ((regs).vex.VGP_SYSCALL_ARG6)
-#define SYSCALL_RET(regs) ((regs).vex.VGP_SYSCALL_RET)
-
// Offsets for the shadow state
#define O_SYSCALL_NUM (offsetof(VexGuestArchState, VGP_SYSCALL_NUM))
#define O_SYSCALL_ARG1 (offsetof(VexGuestArchState, VGP_SYSCALL_ARG1))
Modified: trunk/coregrind/m_sigframe/sigframe-amd64-linux.c
=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/coregrind/m_sigframe/sigframe-amd64-linux.c 2005-05-08 00:45:11=
UTC (rev 3629)
+++ trunk/coregrind/m_sigframe/sigframe-amd64-linux.c 2005-05-08 02:04:49=
UTC (rev 3630)
@@ -361,11 +361,6 @@
}
=20
=20
-#define SET_SIGNAL_RSP(zztid, zzval) \
- SET_THREAD_REG(zztid, zzval, STACK_PTR, post_reg_write, \
- Vg_CoreSignal, zztid, O_STACK_PTR, sizeof(Addr))
-
-
/* Extend the stack segment downwards if needed so as to ensure the
new signal frames are mapped to something. Return a Bool
indicating whether or not the operation was successful.
@@ -494,8 +489,9 @@
frame =3D (struct rt_sigframe *)rsp;
=20
/* Set the thread so it will next run the handler. */
- /* tst->m_rsp =3D rsp; */
- SET_SIGNAL_RSP(tid, rsp);
+ /* tst->m_rsp =3D rsp; also notify the tool we've updated RSP */
+ STACK_PTR(VG_(threads)[tid].arch) =3D rsp;
+ VG_TRACK( post_reg_write, Vg_CoreSignal, tid, O_STACK_PTR, sizeof(Add=
r));
=20
//VG_(printf)("handler =3D %p\n", handler);
tst->arch.vex.guest_RIP =3D (Addr) handler;
Modified: trunk/coregrind/m_sigframe/sigframe-arm-linux.c
=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/coregrind/m_sigframe/sigframe-arm-linux.c 2005-05-08 00:45:11 U=
TC (rev 3629)
+++ trunk/coregrind/m_sigframe/sigframe-arm-linux.c 2005-05-08 02:04:49 U=
TC (rev 3630)
@@ -150,12 +150,6 @@
}
#endif
=20
-#if 0
-#define SET_SIGNAL_ESP(zztid, zzval) \
- SET_THREAD_REG(zztid, zzval, VGA_STACK_PTR, VGA_R_STACK_PTR, \
- post_reg_write_deliver_signal)
-#endif
-
void VGA_(push_signal_frame)(ThreadId tid, Addr esp_top_of_frame,
const vki_siginfo_t *siginfo,
void *handler, UInt flags,
@@ -248,8 +242,9 @@
/* Ensure 'tid' and 'tst' correspond */
vg_assert(& VG_(threads)[tid] =3D=3D tst);
/* Set the thread so it will next run the handler. */
- /* tst->m_esp =3D esp; */
- SET_SIGNAL_ESP(tid, esp);
+ /* tst->m_esp =3D esp; also notify the tool we've updated ESP */
+ STACK_PTR(VG_(threads)[tid].arch) =3D esp;
+ VG_TRACK( post_reg_write, Vg_CoreSignal, tid, O_STACK_PTR, sizeof(Add=
r));
=20
tst->arch.vex.guest_EIP =3D (Addr) handler;
/* This thread needs to be marked runnable, but we leave that the
Modified: trunk/coregrind/m_sigframe/sigframe-x86-linux.c
=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/coregrind/m_sigframe/sigframe-x86-linux.c 2005-05-08 00:45:11 U=
TC (rev 3629)
+++ trunk/coregrind/m_sigframe/sigframe-x86-linux.c 2005-05-08 02:04:49 U=
TC (rev 3630)
@@ -382,11 +382,6 @@
}
=20
=20
-#define SET_SIGNAL_ESP(zztid, zzval) \
- SET_THREAD_REG(zztid, zzval, STACK_PTR, post_reg_write, \
- Vg_CoreSignal, zztid, O_STACK_PTR, sizeof(Addr))
-
-
/* Extend the stack segment downwards if needed so as to ensure the
new signal frames are mapped to something. Return a Bool
indicating whether or not the operation was successful.
@@ -572,8 +567,9 @@
siginfo, handler, flags, mask, restorer)=
;
=20
/* Set the thread so it will next run the handler. */
- /* tst->m_esp =3D esp; */
- SET_SIGNAL_ESP(tid, esp);
+ /* tst->m_esp =3D esp; also notify the tool we've updated ESP */
+ STACK_PTR(VG_(threads)[tid].arch) =3D esp;
+ VG_TRACK( post_reg_write, Vg_CoreSignal, tid, O_STACK_PTR, sizeof(Add=
r));
=20
//VG_(printf)("handler =3D %p\n", handler);
tst->arch.vex.guest_EIP =3D (Addr) handler;
Modified: trunk/coregrind/vg_scheduler.c
=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/coregrind/vg_scheduler.c 2005-05-08 00:45:11 UTC (rev 3629)
+++ trunk/coregrind/vg_scheduler.c 2005-05-08 02:04:49 UTC (rev 3630)
@@ -891,6 +891,21 @@
Specifying shadow register values
------------------------------------------------------------------ */
=20
+// These macros write a value to a client's thread register, and tell th=
e
+// tool that it's happened (if necessary).
+
+#define SET_CLREQ_RETVAL(zztid, zzval) \
+ do { CLREQ_RET(VG_(threads)[zztid].arch) =3D (zzval); \
+ VG_TRACK( post_reg_write, \
+ Vg_CoreClientReq, zztid, O_CLREQ_RET, sizeof(UWord)); =
\
+ } while (0)
+
+#define SET_CLCALL_RETVAL(zztid, zzval, f) \
+ do { CLREQ_RET(VG_(threads)[zztid].arch) =3D (zzval); \
+ VG_TRACK( post_reg_write_clientcall_return, \
+ zztid, O_CLREQ_RET, sizeof(UWord), f); \
+ } while (0)
+
void VG_(set_shadow_regs_area) ( ThreadId tid, OffT offset, SizeT size,
const UChar* area )
{
@@ -924,16 +939,12 @@
=20
void VG_(set_return_from_syscall_shadow) ( ThreadId tid, UWord ret_shado=
w )
{
- VG_(set_shadow_regs_area)(tid, O_SYSCALL_RET, sizeof(UWord),
- (UChar*)&ret_shadow);
+ VG_(threads)[tid].arch.vex_shadow.VGP_SYSCALL_RET =3D ret_shadow;
}
=20
UInt VG_(get_exit_status_shadow) ( ThreadId tid )
{
- UInt ret;
- VG_(get_shadow_regs_area)(tid, O_SYSCALL_ARG1, sizeof(UInt),
- (UChar*)&ret);
- return ret;
+ return VG_(threads)[tid].arch.vex_shadow.VGP_SYSCALL_ARG1;
}
=20
=20
Modified: trunk/coregrind/vg_signals.c
=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/coregrind/vg_signals.c 2005-05-08 00:45:11 UTC (rev 3629)
+++ trunk/coregrind/vg_signals.c 2005-05-08 02:04:49 UTC (rev 3630)
@@ -429,15 +429,11 @@
}
=20
=20
-Int VG_(do_sys_sigaltstack) ( ThreadId tid )
+Int VG_(do_sys_sigaltstack) ( ThreadId tid, vki_stack_t* ss, vki_stack_t=
* oss )
{
- vki_stack_t* ss;
- vki_stack_t* oss;
- Addr m_SP;
+ Addr m_SP;
=20
vg_assert(VG_(is_valid_tid)(tid));
- ss =3D (vki_stack_t*)SYSCALL_ARG1(VG_(threads)[tid].arch);
- oss =3D (vki_stack_t*)SYSCALL_ARG2(VG_(threads)[tid].arch);
m_SP =3D STACK_PTR(VG_(threads)[tid].arch);
=20
if (VG_(clo_trace_signals))
Modified: trunk/coregrind/vg_syscalls.c
=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/coregrind/vg_syscalls.c 2005-05-08 00:45:11 UTC (rev 3629)
+++ trunk/coregrind/vg_syscalls.c 2005-05-08 02:04:49 UTC (rev 3630)
@@ -5608,7 +5608,8 @@
PRE_MEM_WRITE( "sigaltstack(oss)", ARG2, sizeof(vki_stack_t) );
}
=20
- SET_RESULT( VG_(do_sys_sigaltstack) (tid) );
+ SET_RESULT( VG_(do_sys_sigaltstack) (tid, (vki_stack_t*)ARG1,=20
+ (vki_stack_t*)ARG2) );
}
=20
POST(sys_sigaltstack)
@@ -6165,10 +6166,9 @@
=20
vg_assert(VG_(is_running_thread)(tid));
=20
- // The RES part is redundant -- we're assigning the value to itself -=
-
- // but we need this call to tell the tool that the assignment has
- // occurred.
- SET_SYSCALL_RETVAL(tid, RES);
+ // Tell the tool that the assignment has occurred, so it can update
+ // shadow regs as necessary.
+ VGP_TRACK_SYSCALL_RETVAL(tid);
=20
VG_(post_syscall)(tid);
=20
Modified: trunk/coregrind/x86-linux/core_platform.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/coregrind/x86-linux/core_platform.h 2005-05-08 00:45:11 UTC (re=
v 3629)
+++ trunk/coregrind/x86-linux/core_platform.h 2005-05-08 02:04:49 UTC (re=
v 3630)
@@ -52,11 +52,9 @@
// Setting a syscall result
#define VGP_SET_SYSCALL_RESULT(regs, val) ((regs).vex.guest_EAX =3D (=
val))
=20
-// For setting thread regs and shadow regs from within the core, once a
-// syscall has completed.
-#define SET_SYSCALL_RETVAL(zztid, zzval) \
- SET_THREAD_REG(zztid, zzval, SYSCALL_RET, post_reg_write, \
- Vg_CoreSysCall, zztid, O_SYSCALL_RET, sizeof(UWord))
+// For informing tools that a syscall result has been set.
+#define VGP_TRACK_SYSCALL_RETVAL(zztid) \
+ VG_TRACK( post_reg_write, Vg_CoreSysCall, zztid, O_SYSCALL_RET, sizeo=
f(UWord) );
=20
/* ---------------------------------------------------------------------
Exports of vg_ldt.c
@@ -107,7 +105,7 @@
} while (0)
=20
#define VGP_GET_MMAP_ARGS(tst, a1, a2, a3, a4, a5, a6) do { \
- UInt *arg_block =3D (UInt*)SYSCALL_ARG1(tst->arch); \
+ UInt *arg_block =3D (UInt*)(tst->arch.vex.VGP_SYSCALL_ARG1); \
PRE_MEM_READ( "old_mmap(args)", (Addr)arg_block, 6*sizeof(UWord) );\
a1 =3D arg_block[0]; \
a2 =3D arg_block[1]; \
|