]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Introduce RegWord type
authorPetar Jovanovic <petar.jovanovic@rt-rk.com>
Tue, 10 Apr 2018 12:09:08 +0000 (14:09 +0200)
committerPetar Jovanovic <petar.jovanovic@rt-rk.com>
Tue, 10 Apr 2018 12:09:08 +0000 (14:09 +0200)
On majority of architectures size of long matches register width.
On mips n32 size of long is 32 bits and register width is 64 bits.
Valgrind is written with assumption that long size matches register
width. This is the reason why both UWord for Valgrind and HWord for VEX
match size of long. Long size differs from register size on mips n32 ABI.

Introducing RegWord type that will match size of registers.

Part of the changes required for BZ issue - #345763.

Contributed by:
  Tamara Vlahovic and Dimitrije Nikolic.

18 files changed:
VEX/priv/ir_defs.c
VEX/priv/ir_inject.c
VEX/pub/libvex_basictypes.h
cachegrind/cg_main.c
callgrind/main.c
coregrind/m_debuglog.c
coregrind/m_libcfile.c
coregrind/m_libcsignal.c
coregrind/m_scheduler/scheduler.c
coregrind/m_signals.c
coregrind/m_syscall.c
coregrind/m_syswrap/priv_types_n_macros.h
coregrind/m_syswrap/syswrap-generic.c
coregrind/m_syswrap/syswrap-linux.c
coregrind/m_syswrap/syswrap-main.c
coregrind/m_syswrap/syswrap-mips64-linux.c
coregrind/m_translate.c
coregrind/pub_core_syscall.h

index 2cffd0b5713256b4227fc69d912dcbb8f24348bb..15524bffb09907836385c18a573ef4bd0d423000 100644 (file)
@@ -4818,9 +4818,9 @@ IRType integerIRTypeOfSize ( Int szB )
 IRExpr* mkIRExpr_HWord ( HWord hw )
 {
    vassert(sizeof(void*) == sizeof(HWord));
-   if (sizeof(HWord) == 4)
+   if (sizeof(RegWord) == 4)
       return IRExpr_Const(IRConst_U32((UInt)hw));
-   if (sizeof(HWord) == 8)
+   if (sizeof(RegWord) == 8)
       return IRExpr_Const(IRConst_U64((ULong)hw));
    vpanic("mkIRExpr_HWord");
 }
index c127acad2b47f93db392a4d2f0c5e11ad84ecf9f..eec3dd2fe6ec88a371eb2962f0b876cff36199ab 100644 (file)
@@ -87,7 +87,8 @@ load(IREndness endian, IRType type, HWord haddr)
 
    vassert(type == Ity_I1 || sizeofIRType(type) <= 16);
 
-   if (VEX_HOST_WORDSIZE == 8) {
+   if (VEX_HOST_WORDSIZE == 8 ||
+      (VEX_HOST_WORDSIZE == 4 && sizeof(RegWord) == 8)) {
       addr = mkU64(haddr);
       next_addr = binop(Iop_Add64, addr, mkU64(8));
    } else if (VEX_HOST_WORDSIZE == 4) {
@@ -148,7 +149,8 @@ store(IRSB *irsb, IREndness endian, HWord haddr, IRExpr *data)
    IROp high, low;
    IRExpr *addr, *next_addr;
 
-   if (VEX_HOST_WORDSIZE == 8) {
+   if (VEX_HOST_WORDSIZE == 8 ||
+      (VEX_HOST_WORDSIZE == 4 && sizeof(RegWord) == 8)) {
       addr = mkU64(haddr);
       next_addr = binop(Iop_Add64, addr, mkU64(8));
    } else if (VEX_HOST_WORDSIZE == 4) {
index 86df4446bf5ad9b7ea3203916a5322d947b39ebc..d633cde63eeae063b83c2e446b109b05acf79f25 100644 (file)
@@ -142,6 +142,10 @@ typedef unsigned long Addr;
    machine. */
 typedef  unsigned long HWord;
 
+/* Size of GPRs */
+typedef HWord RegWord;
+#define FMT_REGWORD "l"
+
 /* Set up VEX_HOST_WORDSIZE and VEX_REGPARM. */
 #undef VEX_HOST_WORDSIZE
 #undef VEX_REGPARM
index cd4de769c9d1ea3a1f473a374398906981685892..f23b82b650e1f4271e8bbed3dd232bd22ace77ec 100644 (file)
@@ -1002,7 +1002,7 @@ void addEvent_Bc ( CgState* cgs, InstrInfo* inode, IRAtom* guard )
    Event* evt;
    tl_assert(isIRAtom(guard));
    tl_assert(typeOfIRExpr(cgs->sbOut->tyenv, guard) 
-             == (sizeof(HWord)==4 ? Ity_I32 : Ity_I64));
+             == (sizeof(RegWord)==4 ? Ity_I32 : Ity_I64));
    if (!clo_branch_sim)
       return;
    if (cgs->events_used == N_EVENTS)
@@ -1022,7 +1022,7 @@ void addEvent_Bi ( CgState* cgs, InstrInfo* inode, IRAtom* whereTo )
    Event* evt;
    tl_assert(isIRAtom(whereTo));
    tl_assert(typeOfIRExpr(cgs->sbOut->tyenv, whereTo) 
-             == (sizeof(HWord)==4 ? Ity_I32 : Ity_I64));
+             == (sizeof(RegWord)==4 ? Ity_I32 : Ity_I64));
    if (!clo_branch_sim)
       return;
    if (cgs->events_used == N_EVENTS)
index ab49272965bfed0c88e607b1905be47c1ee6253f..46968539cad294c174565a7884dc6d329fd6dae8 100644 (file)
@@ -719,7 +719,7 @@ void addEvent_Bc ( ClgState* clgs, InstrInfo* inode, IRAtom* guard )
    Event* evt;
    tl_assert(isIRAtom(guard));
    tl_assert(typeOfIRExpr(clgs->sbOut->tyenv, guard)
-             == (sizeof(HWord)==4 ? Ity_I32 : Ity_I64));
+             == (sizeof(RegWord)==4 ? Ity_I32 : Ity_I64));
    if (!CLG_(clo).simulate_branch) return;
 
    if (clgs->events_used == N_EVENTS)
@@ -739,7 +739,7 @@ void addEvent_Bi ( ClgState* clgs, InstrInfo* inode, IRAtom* whereTo )
    Event* evt;
    tl_assert(isIRAtom(whereTo));
    tl_assert(typeOfIRExpr(clgs->sbOut->tyenv, whereTo)
-             == (sizeof(HWord)==4 ? Ity_I32 : Ity_I64));
+             == (sizeof(RegWord)==4 ? Ity_I32 : Ity_I64));
    if (!CLG_(clo).simulate_branch) return;
 
    if (clgs->events_used == N_EVENTS)
@@ -839,11 +839,11 @@ Addr IRConst2Addr(IRConst* con)
 {
     Addr addr;
 
-    if (sizeof(Addr) == 4) {
+    if (sizeof(RegWord) == 4) {
        CLG_ASSERT( con->tag == Ico_U32 );
        addr = con->Ico.U32;
     }
-    else if (sizeof(Addr) == 8) {
+    else if (sizeof(RegWord) == 8) {
        CLG_ASSERT( con->tag == Ico_U64 );
        addr = con->Ico.U64;
     }
index 5c25e33b571f42e51bc5f4a05536ead536fabed1..8ca80c17f8eea30787e6844a70552b7892b896e4 100644 (file)
@@ -480,7 +480,7 @@ static UInt local_sys_getpid ( void )
 static UInt local_sys_write_stderr ( const HChar* buf, Int n )
 {
    volatile Long block[2];
-   block[0] = (Long)buf;
+   block[0] = (Long)(Addr)buf;
    block[1] = n;
    __asm__ volatile (
       "li   $4, 2\n\t"      /* std output*/
index c43682111b228193097780aded2845c10e78e64e..1815874e9f01d3e51ec07bc6bee93509e46ad280 100644 (file)
@@ -292,7 +292,7 @@ Off64T VG_(lseek) ( Int fd, Off64T offset, Int whence )
    return sr_isError(res) ? (-1) : result;
 #  else
    SysRes res = VG_(do_syscall3)(__NR_lseek, fd, offset, whence);
-   vg_assert(sizeof(Off64T) == sizeof(Word));
+   vg_assert(sizeof(Off64T) == sizeof(sr_Res(res)));
    return sr_isError(res) ? (-1) : sr_Res(res);
 #  endif
 #  elif defined(VGP_x86_darwin)
@@ -412,7 +412,7 @@ Int VG_(fstat) ( Int fd, struct vg_stat* vgbuf )
    }
 #  endif /* if defined(__NR_fstat64) */
    { struct vki_stat buf;
-     res = VG_(do_syscall2)(__NR_fstat, (UWord)fd, (UWord)&buf);
+     res = VG_(do_syscall2)(__NR_fstat, (RegWord)fd, (RegWord)(Addr)&buf);
      if (!sr_isError(res))
         TRANSLATE_TO_vg_stat(vgbuf, &buf);
      return sr_isError(res) ? (-1) : 0;
index d5e5f4fd399a736ebf820e2c907c5d50e7ebf338..4703ad6a25c3702dac79de38ada74372ba34333f 100644 (file)
@@ -92,7 +92,7 @@ Bool VG_(isemptysigset)( const vki_sigset_t* set )
       }
       else {
          /* Partial word check. */
-         ULong mask = (1UL << (_VKI_MAXSIG % _VKI_NSIG_BPW)) - 1;
+         ULong mask = ((ULong)1UL << (_VKI_MAXSIG % _VKI_NSIG_BPW)) - 1;
          if ((set->sig[i] & mask) != 0) return False;
          break;
       }
@@ -111,7 +111,7 @@ Bool VG_(isfullsigset)( const vki_sigset_t* set )
       }
       else {
          /* Partial word check. */
-         ULong mask = (1UL << (_VKI_MAXSIG % _VKI_NSIG_BPW)) - 1;
+         ULong mask = ((ULong)1UL << (_VKI_MAXSIG % _VKI_NSIG_BPW)) - 1;
          if ((set->sig[i] & mask) != mask) return False;
          break;
       }
@@ -130,7 +130,7 @@ Bool VG_(iseqsigset)( const vki_sigset_t* set1, const vki_sigset_t* set2 )
       }
       else {
          /* Partial word comparison. */
-         ULong mask = (1UL << (_VKI_MAXSIG % _VKI_NSIG_BPW)) - 1;
+         ULong mask = ((ULong)1UL << (_VKI_MAXSIG % _VKI_NSIG_BPW)) - 1;
          if ((set1->sig[i] & mask) != (set2->sig[i] & mask)) return False;
          break;
       }
index 2ffcf4b8661b25db82457c0c95a0788e3365f8cd..87cb4d6646ae2cdb1a95e55210b2ef9104ee2bcf 100644 (file)
@@ -978,7 +978,7 @@ void run_thread_for_a_while ( /*OUT*/HWord* two_words,
    /* Invalidate any in-flight LL/SC transactions, in the case that we're
       using the fallback LL/SC implementation.  See bugs 344524 and 369459. */
 #  if defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
-   tst->arch.vex.guest_LLaddr = (HWord)(-1);
+   tst->arch.vex.guest_LLaddr = (RegWord)(-1);
 #  elif defined(VGP_arm64_linux)
    tst->arch.vex.guest_LLSC_SIZE = 0;
 #  endif
@@ -1648,7 +1648,7 @@ VgSchedReturnCode VG_(scheduler) ( ThreadId tid )
          break;
 
       case VEX_TRC_JMP_FLUSHDCACHE: {
-         void* start = (void*)VG_(threads)[tid].arch.vex.guest_CMSTART;
+         void* start = (void*)(Addr)VG_(threads)[tid].arch.vex.guest_CMSTART;
          SizeT len   = VG_(threads)[tid].arch.vex.guest_CMLEN;
          VG_(debugLog)(2, "sched", "flush_dcache(%p, %lu)\n", start, len);
          VG_(flush_dcache)(start, len);
@@ -1898,7 +1898,7 @@ Int print_client_message( ThreadId tid, const HChar *format,
 static
 void do_client_request ( ThreadId tid )
 {
-   UWord* arg = (UWord*)(CLREQ_ARGS(VG_(threads)[tid].arch));
+   UWord* arg = (UWord*)(Addr)(CLREQ_ARGS(VG_(threads)[tid].arch));
    UWord req_no = arg[0];
 
    if (0)
index a1749e2946a41fed8ae7e3799a9b481532e17444..e158fe3cb82d64bf6c158247d8653a3f67e7367e 100644 (file)
@@ -2778,7 +2778,7 @@ void sync_signalhandler_from_kernel ( ThreadId tid,
 
       VG_(dmsg)("si_code=%d;  Faulting address: %p;  sp: %#lx\n",
                 info->si_code, info->VKI_SIGINFO_si_addr,
-                VG_UCONTEXT_STACK_PTR(uc));
+                (Addr)VG_UCONTEXT_STACK_PTR(uc));
 
       if (0)
          VG_(kill_self)(sigNo);  /* generate a core dump */
@@ -2824,7 +2824,7 @@ void sync_signalhandler ( Int sigNo,
       VG_(dmsg)("sync signal handler: "
                 "signal=%d, si_code=%d, EIP=%#lx, eip=%#lx, from %s\n",
                 sigNo, info->si_code, VG_(get_IP)(tid), 
-                VG_UCONTEXT_INSTR_PTR(uc),
+                (Addr)VG_UCONTEXT_INSTR_PTR(uc),
                 ( from_user ? "user" : "kernel" ));
    }
    vg_assert(sigNo >= 1 && sigNo <= VG_(max_signal));
index 35699487b60b1a91ba4309085ddd8c2030fce93e..b3410540de911bd83f0f3be6cb122cff170ba7b4 100644 (file)
@@ -919,9 +919,9 @@ __asm__ (
 /* Finally, the generic code.  This sends the call to the right
    helper. */
 
-SysRes VG_(do_syscall) ( UWord sysno, UWord a1, UWord a2, UWord a3,
-                                      UWord a4, UWord a5, UWord a6,
-                                      UWord a7, UWord a8 )
+SysRes VG_(do_syscall) ( UWord sysno, RegWord a1, RegWord a2, RegWord a3,
+                                      RegWord a4, RegWord a5, RegWord a6,
+                                      RegWord a7, RegWord a8 )
 {
 #  if defined(VGP_x86_linux)
    UWord val = do_syscall_WRK(sysno,a1,a2,a3,a4,a5,a6);
index 62ad65a5e6fda34794866a79326045f828e5ccc4..2dd95f68e31a8b02444a40761e74b1d8a2aa789b 100644 (file)
 typedef
    struct SyscallArgs {
       Word sysno;
-      UWord arg1;
-      UWord arg2;
-      UWord arg3;
-      UWord arg4;
-      UWord arg5;
-      UWord arg6;
-      UWord arg7;
-      UWord arg8;
+      RegWord arg1;
+      RegWord arg2;
+      RegWord arg3;
+      RegWord arg4;
+      RegWord arg5;
+      RegWord arg6;
+      RegWord arg7;
+      RegWord arg8;
    }
    SyscallArgs;
 
@@ -438,7 +438,7 @@ static inline UWord getERR ( SyscallStatus* st ) {
 /* Tell the tool that the syscall number is being read. */
 #define PRRSN \
       VG_(tdict).track_pre_reg_read(Vg_CoreSysCall, tid, "(syscallno)", \
-                                    layout->o_sysno, sizeof(UWord));
+                                    layout->o_sysno, sizeof(RegWord));
 
 /* REGISTER PARAMETERS */
 
@@ -456,7 +456,7 @@ static inline UWord getERR ( SyscallStatus* st ) {
 #define PRRAn_LE(n,s,t,a)                          \
    do {                                            \
       Int here = layout->o_arg##n;                 \
-      vg_assert(sizeof(t) <= sizeof(UWord));       \
+      vg_assert(sizeof(t) <= sizeof(RegWord));     \
       vg_assert(here >= 0);                        \
       VG_(tdict).track_pre_reg_read(               \
          Vg_CoreSysCall, tid, s"("#a")",           \
@@ -470,16 +470,16 @@ static inline UWord getERR ( SyscallStatus* st ) {
    since the least significant parts of the guest register are stored
    in memory at the highest address.
 */
-#define PRRAn_BE(n,s,t,a)                          \
-   do {                                            \
-      Int here = layout->o_arg##n;                 \
-      Int next = layout->o_arg##n + sizeof(UWord); \
-      vg_assert(sizeof(t) <= sizeof(UWord));       \
-      vg_assert(here >= 0);                        \
-      VG_(tdict).track_pre_reg_read(               \
-         Vg_CoreSysCall, tid, s"("#a")",           \
-         next-sizeof(t), sizeof(t)                 \
-      );                                           \
+#define PRRAn_BE(n,s,t,a)                            \
+   do {                                              \
+      Int here = layout->o_arg##n;                   \
+      Int next = layout->o_arg##n + sizeof(RegWord); \
+      vg_assert(sizeof(t) <= sizeof(RegWord));       \
+      vg_assert(here >= 0);                          \
+      VG_(tdict).track_pre_reg_read(                 \
+         Vg_CoreSysCall, tid, s"("#a")",             \
+         next-sizeof(t), sizeof(t)                   \
+      );                                             \
    } while (0)
 
 #if defined(VG_BIGENDIAN)
@@ -507,7 +507,7 @@ static inline UWord getERR ( SyscallStatus* st ) {
 #define PSRAn_LE(n,s,t,a)                          \
    do {                                            \
       Addr here = layout->s_arg##n + VG_(get_SP)(tid); \
-      vg_assert(sizeof(t) <= sizeof(UWord));       \
+      vg_assert(sizeof(t) <= sizeof(RegWord));     \
       VG_(tdict).track_pre_mem_read(               \
          Vg_CoreSysCallArgInMem, tid, s"("#a")",   \
          here, sizeof(t)                           \
@@ -523,9 +523,9 @@ static inline UWord getERR ( SyscallStatus* st ) {
 #if (defined(VGP_mips32_linux) && defined (_MIPSEB))
  #define PSRAn_BE(n,s,t,a)                                        \
     do {                                                          \
-      Addr next = layout->s_arg##n + sizeof(UWord) +              \
+      Addr next = layout->s_arg##n + sizeof(RegWord) +            \
                   VG_(get_SP)(tid);                               \
-      vg_assert(sizeof(t) <= sizeof(UWord));                      \
+      vg_assert(sizeof(t) <= sizeof(RegWord));                    \
       VG_(tdict).track_pre_mem_read(                              \
          Vg_CoreSysCallArgInMem, tid, s"("#a")",                  \
          next-sizeof(t), sizeof(t)                                \
@@ -534,9 +534,9 @@ static inline UWord getERR ( SyscallStatus* st ) {
 #else
 #define PSRAn_BE(n,s,t,a)                                         \
    do {                                                           \
-      Addr next = layout->o_arg##n + sizeof(UWord) +              \
+      Addr next = layout->o_arg##n + sizeof(RegWord) +            \
                   VG_(threads)[tid].arch.vex.VG_STACK_PTR;        \
-      vg_assert(sizeof(t) <= sizeof(UWord));                      \
+      vg_assert(sizeof(t) <= sizeof(RegWord));                    \
       VG_(tdict).track_pre_mem_read(                              \
          Vg_CoreSysCallArgInMem, tid, s"("#a")",                  \
          next-sizeof(t), sizeof(t)                                \
index 702231630310585ac1029843d2cdea560f9b6702..5bb6f47dfb5c4ca5c3f19e7d4d978bcbb8daf15b 100644 (file)
@@ -2472,28 +2472,29 @@ PRE(sys_ni_syscall)
 
 PRE(sys_iopl)
 {
-   PRINT("sys_iopl ( %lu )", ARG1);
+   PRINT("sys_iopl ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "iopl", unsigned long, level);
 }
 
 PRE(sys_fsync)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_fsync ( %lu )", ARG1);
+   PRINT("sys_fsync ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "fsync", unsigned int, fd);
 }
 
 PRE(sys_fdatasync)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_fdatasync ( %lu )", ARG1);
+   PRINT("sys_fdatasync ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "fdatasync", unsigned int, fd);
 }
 
 PRE(sys_msync)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_msync ( %#lx, %lu, %#lx )", ARG1, ARG2, ARG3);
+   PRINT("sys_msync ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %#"
+                      FMT_REGWORD "x )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "msync",
                  unsigned long, start, vki_size_t, length, int, flags);
    PRE_MEM_READ( "msync(start)", ARG1, ARG2 );
@@ -2514,13 +2515,14 @@ PRE(sys_getpmsg)
    struct vki_pmsg_strbuf *ctrl;
    struct vki_pmsg_strbuf *data;
    *flags |= SfMayBlock;
-   PRINT("sys_getpmsg ( %ld, %#lx, %#lx, %#lx, %#lx )", SARG1, ARG2, ARG3,
-         ARG4, ARG5);
+   PRINT("sys_getpmsg ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#"
+                        FMT_REGWORD "x, %#" FMT_REGWORD "x )", SARG1,
+                        ARG2, ARG3, ARG4, ARG5);
    PRE_REG_READ5(int, "getpmsg",
                  int, fd, struct strbuf *, ctrl, struct strbuf *, data, 
                  int *, bandp, int *, flagsp);
-   ctrl = (struct vki_pmsg_strbuf *)ARG2;
-   data = (struct vki_pmsg_strbuf *)ARG3;
+   ctrl = (struct vki_pmsg_strbuf *)(Addr)ARG2;
+   data = (struct vki_pmsg_strbuf *)(Addr)ARG3;
    if (ctrl && ctrl->maxlen > 0)
       PRE_MEM_WRITE( "getpmsg(ctrl)", (Addr)ctrl->buf, ctrl->maxlen);
    if (data && data->maxlen > 0)
@@ -2535,8 +2537,8 @@ POST(sys_getpmsg)
    struct vki_pmsg_strbuf *ctrl;
    struct vki_pmsg_strbuf *data;
    vg_assert(SUCCESS);
-   ctrl = (struct vki_pmsg_strbuf *)ARG2;
-   data = (struct vki_pmsg_strbuf *)ARG3;
+   ctrl = (struct vki_pmsg_strbuf *)(Addr)ARG2;
+   data = (struct vki_pmsg_strbuf *)(Addr)ARG3;
    if (RES == 0 && ctrl && ctrl->len > 0) {
       POST_MEM_WRITE( (Addr)ctrl->buf, ctrl->len);
    }
@@ -2551,13 +2553,13 @@ PRE(sys_putpmsg)
    struct vki_pmsg_strbuf *ctrl;
    struct vki_pmsg_strbuf *data;
    *flags |= SfMayBlock;
-   PRINT("sys_putpmsg ( %ld, %#lx, %#lx, %ld, %ld )", SARG1, ARG2, ARG3,
-         SARG4, SARG5);
+   PRINT("sys_putpmsg ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD
+                        "x, %ld, %ld )", SARG1, ARG2, ARG3, SARG4, SARG5);
    PRE_REG_READ5(int, "putpmsg",
                  int, fd, struct strbuf *, ctrl, struct strbuf *, data, 
                  int, band, int, flags);
-   ctrl = (struct vki_pmsg_strbuf *)ARG2;
-   data = (struct vki_pmsg_strbuf *)ARG3;
+   ctrl = (struct vki_pmsg_strbuf *)(Addr)ARG2;
+   data = (struct vki_pmsg_strbuf *)(Addr)ARG3;
    if (ctrl && ctrl->len > 0)
       PRE_MEM_READ( "putpmsg(ctrl)", (Addr)ctrl->buf, ctrl->len);
    if (data && data->len > 0)
@@ -2566,8 +2568,8 @@ PRE(sys_putpmsg)
 
 PRE(sys_getitimer)
 {
-   struct vki_itimerval *value = (struct vki_itimerval*)ARG2;
-   PRINT("sys_getitimer ( %ld, %#lx )", SARG1, ARG2);
+   struct vki_itimerval *value = (struct vki_itimerval*)(Addr)ARG2;
+   PRINT("sys_getitimer ( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2);
    PRE_REG_READ2(long, "getitimer", int, which, struct itimerval *, value);
 
    PRE_timeval_WRITE( "getitimer(&value->it_interval)", &(value->it_interval));
@@ -2577,7 +2579,7 @@ PRE(sys_getitimer)
 POST(sys_getitimer)
 {
    if (ARG2 != (Addr)NULL) {
-      struct vki_itimerval *value = (struct vki_itimerval*)ARG2;
+      struct vki_itimerval *value = (struct vki_itimerval*)(Addr)ARG2;
       POST_timeval_WRITE( &(value->it_interval) );
       POST_timeval_WRITE( &(value->it_value) );
    }
@@ -2585,19 +2587,20 @@ POST(sys_getitimer)
 
 PRE(sys_setitimer)
 {
-   PRINT("sys_setitimer ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+   PRINT("sys_setitimer ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+                          SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "setitimer", 
                  int, which,
                  struct itimerval *, value, struct itimerval *, ovalue);
    if (ARG2 != (Addr)NULL) {
-      struct vki_itimerval *value = (struct vki_itimerval*)ARG2;
+      struct vki_itimerval *value = (struct vki_itimerval*)(Addr)ARG2;
       PRE_timeval_READ( "setitimer(&value->it_interval)",
                          &(value->it_interval));
       PRE_timeval_READ( "setitimer(&value->it_value)",
                          &(value->it_value));
    }
    if (ARG3 != (Addr)NULL) {
-      struct vki_itimerval *ovalue = (struct vki_itimerval*)ARG3;
+      struct vki_itimerval *ovalue = (struct vki_itimerval*)(Addr)ARG3;
       PRE_timeval_WRITE( "setitimer(&ovalue->it_interval)",
                          &(ovalue->it_interval));
       PRE_timeval_WRITE( "setitimer(&ovalue->it_value)",
@@ -2608,7 +2611,7 @@ PRE(sys_setitimer)
 POST(sys_setitimer)
 {
    if (ARG3 != (Addr)NULL) {
-      struct vki_itimerval *ovalue = (struct vki_itimerval*)ARG3;
+      struct vki_itimerval *ovalue = (struct vki_itimerval*)(Addr)ARG3;
       POST_timeval_WRITE( &(ovalue->it_interval) );
       POST_timeval_WRITE( &(ovalue->it_value) );
    }
@@ -2616,7 +2619,7 @@ POST(sys_setitimer)
 
 PRE(sys_chroot)
 {
-   PRINT("sys_chroot ( %#lx )", ARG1);
+   PRINT("sys_chroot ( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(long, "chroot", const char *, path);
    PRE_MEM_RASCIIZ( "chroot(path)", ARG1 );
 }
@@ -2624,7 +2627,8 @@ PRE(sys_chroot)
 PRE(sys_madvise)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_madvise ( %#lx, %lu, %ld )", ARG1, ARG2, SARG3);
+   PRINT("sys_madvise ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %ld )",
+                        ARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "madvise",
                  unsigned long, start, vki_size_t, length, int, advice);
 }
@@ -2635,14 +2639,16 @@ PRE(sys_mremap)
    // Nb: this is different to the glibc version described in the man pages,
    // which lacks the fifth 'new_address' argument.
    if (ARG4 & VKI_MREMAP_FIXED) {
-      PRINT("sys_mremap ( %#lx, %lu, %lu, %#lx, %#lx )",
+      PRINT("sys_mremap ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %"
+            FMT_REGWORD "u, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
             ARG1, ARG2, ARG3, ARG4, ARG5);
       PRE_REG_READ5(unsigned long, "mremap",
                     unsigned long, old_addr, unsigned long, old_size,
                     unsigned long, new_size, unsigned long, flags,
                     unsigned long, new_addr);
    } else {
-      PRINT("sys_mremap ( %#lx, %lu, %lu, 0x%lx )",
+      PRINT("sys_mremap ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %"
+            FMT_REGWORD "u, 0x%" FMT_REGWORD "x )",
             ARG1, ARG2, ARG3, ARG4);
       PRE_REG_READ4(unsigned long, "mremap",
                     unsigned long, old_addr, unsigned long, old_size,
@@ -2663,21 +2669,21 @@ PRE(sys_nice)
 PRE(sys_mlock)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_mlock ( %#lx, %lu )", ARG1, ARG2);
+   PRINT("sys_mlock ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u )", ARG1, ARG2);
    PRE_REG_READ2(long, "mlock", unsigned long, addr, vki_size_t, len);
 }
 
 PRE(sys_munlock)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_munlock ( %#lx, %lu )", ARG1, ARG2);
+   PRINT("sys_munlock ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u )", ARG1, ARG2);
    PRE_REG_READ2(long, "munlock", unsigned long, addr, vki_size_t, len);
 }
 
 PRE(sys_mlockall)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_mlockall ( %lx )", ARG1);
+   PRINT("sys_mlockall ( %" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(long, "mlockall", int, flags);
 }
 
@@ -2697,8 +2703,8 @@ PRE(sys_pwrite64)
 {
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
-   PRINT("sys_pwrite64 ( %lu, %#lx, %lu, %lld )",
-         ARG1, ARG2, ARG3, (Long)MERGE64(ARG4,ARG5));
+   PRINT("sys_pwrite64 ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %"
+         FMT_REGWORD "u, %lld )", ARG1, ARG2, ARG3, (Long)MERGE64(ARG4,ARG5));
    PRE_REG_READ5(ssize_t, "pwrite64",
                  unsigned int, fd, const char *, buf, vki_size_t, count,
                  vki_u32, MERGE64_FIRST(offset), vki_u32, MERGE64_SECOND(offset));
@@ -2724,7 +2730,7 @@ PRE(sys_sync)
 PRE(sys_fstatfs)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_fstatfs ( %lu, %#lx )", ARG1, ARG2);
+   PRINT("sys_fstatfs ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x )", ARG1, ARG2);
    PRE_REG_READ2(long, "fstatfs",
                  unsigned int, fd, struct statfs *, buf);
    PRE_MEM_WRITE( "fstatfs(buf)", ARG2, sizeof(struct vki_statfs) );
@@ -2738,7 +2744,8 @@ POST(sys_fstatfs)
 PRE(sys_fstatfs64)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_fstatfs64 ( %lu, %lu, %#lx )", ARG1, ARG2, ARG3);
+   PRINT("sys_fstatfs64 ( %" FMT_REGWORD "u, %" FMT_REGWORD "u, %#"
+         FMT_REGWORD "x )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "fstatfs64",
                  unsigned int, fd, vki_size_t, size, struct statfs64 *, buf);
    PRE_MEM_WRITE( "fstatfs64(buf)", ARG3, ARG2 );
@@ -2758,8 +2765,8 @@ PRE(sys_pread64)
 {
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
-   PRINT("sys_pread64 ( %lu, %#lx, %lu, %lld )",
-         ARG1, ARG2, ARG3, (Long)MERGE64(ARG4,ARG5));
+   PRINT("sys_pread64 ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %"
+         FMT_REGWORD "u, %lld )", ARG1, ARG2, ARG3, (Long)MERGE64(ARG4,ARG5));
    PRE_REG_READ5(ssize_t, "pread64",
                  unsigned int, fd, char *, buf, vki_size_t, count,
                  vki_u32, MERGE64_FIRST(offset), vki_u32, MERGE64_SECOND(offset));
@@ -2785,7 +2792,8 @@ POST(sys_pread64)
 PRE(sys_mknod)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_mknod ( %#lx(%s), %#lx, %#lx )", ARG1, (HChar*)ARG1, ARG2, ARG3 );
+   PRINT("sys_mknod ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x )", ARG1, (HChar*)(Addr)ARG1, ARG2, ARG3 );
    PRE_REG_READ3(long, "mknod",
                  const char *, pathname, int, mode, unsigned, dev);
    PRE_MEM_RASCIIZ( "mknod(pathname)", ARG1 );
@@ -2794,7 +2802,7 @@ PRE(sys_mknod)
 PRE(sys_flock)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_flock ( %lu, %lu )", ARG1, ARG2 );
+   PRINT("sys_flock ( %" FMT_REGWORD "u, %" FMT_REGWORD "u )", ARG1, ARG2 );
    PRE_REG_READ2(long, "flock", unsigned int, fd, unsigned int, operation);
 }
 
@@ -2845,13 +2853,14 @@ PRE(sys_execve)
    SysRes       res;
    Bool         setuid_allowed, trace_this_child;
 
-   PRINT("sys_execve ( %#lx(%s), %#lx, %#lx )", ARG1, (HChar*)ARG1, ARG2, ARG3);
+   PRINT("sys_execve ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x )", ARG1, (HChar*)(Addr)ARG1, ARG2, ARG3);
    PRE_REG_READ3(vki_off_t, "execve",
                  char *, filename, char **, argv, char **, envp);
    PRE_MEM_RASCIIZ( "execve(filename)", ARG1 );
    if (ARG2 != 0) {
       /* At least the terminating NULL must be addressable. */
-      if (!ML_(safe_to_deref)((HChar **) ARG2, sizeof(HChar *))) {
+      if (!ML_(safe_to_deref)((HChar **) (Addr)ARG2, sizeof(HChar *))) {
          SET_STATUS_Failure(VKI_EFAULT);
          return;
       }
@@ -2859,7 +2868,7 @@ PRE(sys_execve)
    }
    if (ARG3 != 0) {
       /* At least the terminating NULL must be addressable. */
-      if (!ML_(safe_to_deref)((HChar **) ARG3, sizeof(HChar *))) {
+      if (!ML_(safe_to_deref)((HChar **) (Addr)ARG3, sizeof(HChar *))) {
          SET_STATUS_Failure(VKI_EFAULT);
          return;
       }
@@ -2885,11 +2894,11 @@ PRE(sys_execve)
 
    // debug-only printing
    if (0) {
-      VG_(printf)("ARG1 = %p(%s)\n", (void*)ARG1, (HChar*)ARG1);
+      VG_(printf)("ARG1 = %p(%s)\n", (void*)(Addr)ARG1, (HChar*)(Addr)ARG1);
       if (ARG2) {
          VG_(printf)("ARG2 = ");
          Int q;
-         HChar** vec = (HChar**)ARG2;
+         HChar** vec = (HChar**)(Addr)ARG2;
          for (q = 0; vec[q]; q++)
             VG_(printf)("%p(%s) ", vec[q], vec[q]);
          VG_(printf)("\n");
@@ -2901,17 +2910,18 @@ PRE(sys_execve)
    // Decide whether or not we want to follow along
    { // Make 'child_argv' be a pointer to the child's arg vector
      // (skipping the exe name)
-     const HChar** child_argv = (const HChar**)ARG2;
+     const HChar** child_argv = (const HChar**)(Addr)ARG2;
      if (child_argv && child_argv[0] == NULL)
         child_argv = NULL;
-     trace_this_child = VG_(should_we_trace_this_child)( (HChar*)ARG1, child_argv );
+     trace_this_child = VG_(should_we_trace_this_child)( (HChar*)(Addr)ARG1,
+                                                          child_argv );
    }
 
    // Do the important checks:  it is a file, is executable, permissions are
    // ok, etc.  We allow setuid executables to run only in the case when
    // we are not simulating them, that is, they to be run natively.
    setuid_allowed = trace_this_child  ? False  : True;
-   res = VG_(pre_exec_check)((const HChar *)ARG1, NULL, setuid_allowed);
+   res = VG_(pre_exec_check)((const HChar *)(Addr)ARG1, NULL, setuid_allowed);
    if (sr_isError(res)) {
       SET_STATUS_Failure( sr_Err(res) );
       return;
@@ -2928,7 +2938,7 @@ PRE(sys_execve)
    }
 
    /* After this point, we can't recover if the execve fails. */
-   VG_(debugLog)(1, "syswrap", "Exec of %s\n", (HChar*)ARG1);
+   VG_(debugLog)(1, "syswrap", "Exec of %s\n", (HChar*)(Addr)ARG1);
 
    
    // Terminate gdbserver if it is active.
@@ -2964,7 +2974,7 @@ PRE(sys_execve)
       }
 
    } else {
-      path = (HChar*)ARG1;
+      path = (HChar*)(Addr)ARG1;
    }
 
    // Set up the child's environment.
@@ -2981,7 +2991,7 @@ PRE(sys_execve)
    if (ARG3 == 0) {
       envp = NULL;
    } else {
-      envp = VG_(env_clone)( (HChar**)ARG3 );
+      envp = VG_(env_clone)( (HChar**)(Addr)ARG3 );
       if (envp == NULL) goto hosed;
       VG_(env_remove_valgrind_env_stuff)( envp, True /*ro_strings*/, NULL );
    }
@@ -3000,7 +3010,7 @@ PRE(sys_execve)
    // are omitted.
    //
    if (!trace_this_child) {
-      argv = (HChar**)ARG2;
+      argv = (HChar**)(Addr)ARG2;
    } else {
       vg_assert( VG_(args_for_valgrind) );
       vg_assert( VG_(args_for_valgrind_noexecpass) >= 0 );
@@ -3015,7 +3025,7 @@ PRE(sys_execve)
       // name of client exe
       tot_args++;
       // args for client exe, skipping [0]
-      arg2copy = (HChar**)ARG2;
+      arg2copy = (HChar**)(Addr)ARG2;
       if (arg2copy && arg2copy[0]) {
          for (i = 1; arg2copy[i]; i++)
             tot_args++;
@@ -3031,7 +3041,7 @@ PRE(sys_execve)
             continue;
          argv[j++] = * (HChar**) VG_(indexXA)( VG_(args_for_valgrind), i );
       }
-      argv[j++] = (HChar*)ARG1;
+      argv[j++] = (HChar*)(Addr)ARG1;
       if (arg2copy && arg2copy[0])
          for (i = 1; arg2copy[i]; i++)
             argv[j++] = arg2copy[i];
@@ -3103,8 +3113,9 @@ PRE(sys_execve)
       too much of a mess to continue, so we have to abort. */
   hosed:
    vg_assert(FAILURE);
-   VG_(message)(Vg_UserMsg, "execve(%#lx(%s), %#lx, %#lx) failed, errno %lu\n",
-                ARG1, (HChar*)ARG1, ARG2, ARG3, ERR);
+   VG_(message)(Vg_UserMsg, "execve(%#" FMT_REGWORD "x(%s), %#" FMT_REGWORD
+                "x, %#" FMT_REGWORD "x) failed, errno %lu\n",
+                ARG1, (HChar*)(Addr)ARG1, ARG2, ARG3, ERR);
    VG_(message)(Vg_UserMsg, "EXEC FAILED: I can't recover from "
                             "execve() failing, so I'm dying.\n");
    VG_(message)(Vg_UserMsg, "Add more stringent tests in PRE(sys_execve), "
@@ -3114,14 +3125,15 @@ PRE(sys_execve)
 
 PRE(sys_access)
 {
-   PRINT("sys_access ( %#lx(%s), %ld )", ARG1, (HChar*)ARG1, SARG2);
+   PRINT("sys_access ( %#" FMT_REGWORD "x(%s), %ld )", ARG1,
+         (HChar*)(Addr)ARG1, SARG2);
    PRE_REG_READ2(long, "access", const char *, pathname, int, mode);
    PRE_MEM_RASCIIZ( "access(pathname)", ARG1 );
 }
 
 PRE(sys_alarm)
 {
-   PRINT("sys_alarm ( %lu )", ARG1);
+   PRINT("sys_alarm ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(unsigned long, "alarm", unsigned int, seconds);
 }
 
@@ -3145,7 +3157,7 @@ PRE(sys_brk)
 
       Both will seg fault if you shrink it back into a text segment.
    */
-   PRINT("sys_brk ( %#lx )", ARG1);
+   PRINT("sys_brk ( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(unsigned long, "brk", unsigned long, end_data_segment);
 
    brk_new = do_brk(ARG1, tid);
@@ -3172,7 +3184,7 @@ PRE(sys_brk)
 PRE(sys_chdir)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_chdir ( %#lx(%s) )", ARG1,(char*)ARG1);
+   PRINT("sys_chdir ( %#" FMT_REGWORD "x(%s) )", ARG1,(char*)(Addr)ARG1);
    PRE_REG_READ1(long, "chdir", const char *, path);
    PRE_MEM_RASCIIZ( "chdir(path)", ARG1 );
 }
@@ -3180,7 +3192,8 @@ PRE(sys_chdir)
 PRE(sys_chmod)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_chmod ( %#lx(%s), %lu )", ARG1, (HChar*)ARG1, ARG2);
+   PRINT("sys_chmod ( %#" FMT_REGWORD "x(%s), %" FMT_REGWORD "u )", ARG1,
+         (HChar*)(Addr)ARG1, ARG2);
    PRE_REG_READ2(long, "chmod", const char *, path, vki_mode_t, mode);
    PRE_MEM_RASCIIZ( "chmod(path)", ARG1 );
 }
@@ -3188,7 +3201,8 @@ PRE(sys_chmod)
 PRE(sys_chown)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_chown ( %#lx(%s), 0x%lx, 0x%lx )", ARG1,(char*)ARG1,ARG2,ARG3);
+   PRINT("sys_chown ( %#" FMT_REGWORD "x(%s), 0x%" FMT_REGWORD "x, 0x%"
+         FMT_REGWORD "x )", ARG1,(char*)(Addr)ARG1,ARG2,ARG3);
    PRE_REG_READ3(long, "chown",
                  const char *, path, vki_uid_t, owner, vki_gid_t, group);
    PRE_MEM_RASCIIZ( "chown(path)", ARG1 );
@@ -3197,7 +3211,8 @@ PRE(sys_chown)
 PRE(sys_lchown)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_lchown ( %#lx(%s), 0x%lx, 0x%lx )", ARG1,(char*)ARG1,ARG2,ARG3);
+   PRINT("sys_lchown ( %#" FMT_REGWORD "x(%s), 0x%" FMT_REGWORD "x, 0x%"
+         FMT_REGWORD "x )", ARG1,(char*)(Addr)ARG1,ARG2,ARG3);
    PRE_REG_READ3(long, "lchown",
                  const char *, path, vki_uid_t, owner, vki_gid_t, group);
    PRE_MEM_RASCIIZ( "lchown(path)", ARG1 );
@@ -3206,7 +3221,7 @@ PRE(sys_lchown)
 PRE(sys_close)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_close ( %lu )", ARG1);
+   PRINT("sys_close ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "close", unsigned int, fd);
 
    /* Detect and negate attempts by the client to close Valgrind's log fd */
@@ -3224,7 +3239,7 @@ POST(sys_close)
 
 PRE(sys_dup)
 {
-   PRINT("sys_dup ( %lu )", ARG1);
+   PRINT("sys_dup ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "dup", unsigned int, oldfd);
 }
 
@@ -3242,7 +3257,7 @@ POST(sys_dup)
 
 PRE(sys_dup2)
 {
-   PRINT("sys_dup2 ( %lu, %lu )", ARG1, ARG2);
+   PRINT("sys_dup2 ( %" FMT_REGWORD "u, %" FMT_REGWORD "u )", ARG1, ARG2);
    PRE_REG_READ2(long, "dup2", unsigned int, oldfd, unsigned int, newfd);
    if (!ML_(fd_allowed)(ARG2, "dup2", tid, True))
       SET_STATUS_Failure( VKI_EBADF );
@@ -3258,14 +3273,15 @@ POST(sys_dup2)
 PRE(sys_fchdir)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_fchdir ( %lu )", ARG1);
+   PRINT("sys_fchdir ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "fchdir", unsigned int, fd);
 }
 
 PRE(sys_fchown)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_fchown ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
+   PRINT("sys_fchown ( %" FMT_REGWORD "u, %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "fchown",
                  unsigned int, fd, vki_uid_t, owner, vki_gid_t, group);
 }
@@ -3273,14 +3289,14 @@ PRE(sys_fchown)
 PRE(sys_fchmod)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_fchmod ( %lu, %lu )", ARG1, ARG2);
+   PRINT("sys_fchmod ( %" FMT_REGWORD "u, %" FMT_REGWORD "u )", ARG1, ARG2);
    PRE_REG_READ2(long, "fchmod", unsigned int, fildes, vki_mode_t, mode);
 }
 
 PRE(sys_newfstat)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_newfstat ( %lu, %#lx )", ARG1, ARG2);
+   PRINT("sys_newfstat ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x )", ARG1, ARG2);
    PRE_REG_READ2(long, "fstat", unsigned int, fd, struct stat *, buf);
    PRE_MEM_WRITE( "fstat(buf)", ARG2, sizeof(struct vki_stat) );
 }
@@ -3346,14 +3362,15 @@ PRE(sys_fork)
 PRE(sys_ftruncate)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_ftruncate ( %lu, %lu )", ARG1, ARG2);
+   PRINT("sys_ftruncate ( %" FMT_REGWORD "u, %" FMT_REGWORD "u )", ARG1, ARG2);
    PRE_REG_READ2(long, "ftruncate", unsigned int, fd, unsigned long, length);
 }
 
 PRE(sys_truncate)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_truncate ( %#lx(%s), %lu )", ARG1, (HChar*)ARG1, ARG2);
+   PRINT("sys_truncate ( %#" FMT_REGWORD "x(%s), %" FMT_REGWORD "u )",
+         ARG1, (HChar*)(Addr)ARG1, ARG2);
    PRE_REG_READ2(long, "truncate", 
                  const char *, path, unsigned long, length);
    PRE_MEM_RASCIIZ( "truncate(path)", ARG1 );
@@ -3363,7 +3380,8 @@ PRE(sys_ftruncate64)
 {
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
-   PRINT("sys_ftruncate64 ( %lu, %llu )", ARG1, MERGE64(ARG2,ARG3));
+   PRINT("sys_ftruncate64 ( %" FMT_REGWORD "u, %llu )", ARG1,
+         MERGE64(ARG2,ARG3));
    PRE_REG_READ3(long, "ftruncate64",
                  unsigned int, fd,
                  UWord, MERGE64_FIRST(length), UWord, MERGE64_SECOND(length));
@@ -3378,7 +3396,8 @@ PRE(sys_truncate64)
 {
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
-   PRINT("sys_truncate64 ( %#lx, %lld )", ARG1, (Long)MERGE64(ARG2, ARG3));
+   PRINT("sys_truncate64 ( %#" FMT_REGWORD "x, %lld )", ARG1,
+         (Long)MERGE64(ARG2, ARG3));
    PRE_REG_READ3(long, "truncate64",
                  const char *, path,
                  UWord, MERGE64_FIRST(length), UWord, MERGE64_SECOND(length));
@@ -3393,7 +3412,8 @@ PRE(sys_truncate64)
 PRE(sys_getdents)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_getdents ( %lu, %#lx, %lu )", ARG1, ARG2, ARG3);
+   PRINT("sys_getdents ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %" FMT_REGWORD
+         "u )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "getdents",
                  unsigned int, fd, struct vki_dirent *, dirp,
                  unsigned int, count);
@@ -3410,7 +3430,8 @@ POST(sys_getdents)
 PRE(sys_getdents64)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_getdents64 ( %lu, %#lx, %lu )",ARG1, ARG2, ARG3);
+   PRINT("sys_getdents64 ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %"
+         FMT_REGWORD "u )",ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "getdents64",
                  unsigned int, fd, struct vki_dirent64 *, dirp,
                  unsigned int, count);
@@ -3426,7 +3447,7 @@ POST(sys_getdents64)
 
 PRE(sys_getgroups)
 {
-   PRINT("sys_getgroups ( %ld, %#lx )", SARG1, ARG2);
+   PRINT("sys_getgroups ( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2);
    PRE_REG_READ2(long, "getgroups", int, size, vki_gid_t *, list);
    if (ARG1 > 0)
       PRE_MEM_WRITE( "getgroups(list)", ARG2, ARG1 * sizeof(vki_gid_t) );
@@ -3447,7 +3468,7 @@ PRE(sys_getcwd)
    //   (which includes the ending '\0' character), or a negative error
    //   value.
    // Is this Linux-specific?  If so it should be moved to syswrap-linux.c.
-   PRINT("sys_getcwd ( %#lx, %llu )", ARG1,(ULong)ARG2);
+   PRINT("sys_getcwd ( %#" FMT_REGWORD "x, %llu )", ARG1,(ULong)ARG2);
    PRE_REG_READ2(long, "getcwd", char *, buf, unsigned long, size);
    PRE_MEM_WRITE( "getcwd(buf)", ARG1, ARG2 );
 }
@@ -3529,7 +3550,8 @@ static void common_post_getrlimit(ThreadId tid, UWord a1, UWord a2)
 
 PRE(sys_old_getrlimit)
 {
-   PRINT("sys_old_getrlimit ( %lu, %#lx )", ARG1, ARG2);
+   PRINT("sys_old_getrlimit ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x )",
+         ARG1, ARG2);
    PRE_REG_READ2(long, "old_getrlimit",
                  unsigned int, resource, struct rlimit *, rlim);
    PRE_MEM_WRITE( "old_getrlimit(rlim)", ARG2, sizeof(struct vki_rlimit) );
@@ -3542,7 +3564,7 @@ POST(sys_old_getrlimit)
 
 PRE(sys_getrlimit)
 {
-   PRINT("sys_getrlimit ( %lu, %#lx )", ARG1, ARG2);
+   PRINT("sys_getrlimit ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x )", ARG1, ARG2);
    PRE_REG_READ2(long, "getrlimit",
                  unsigned int, resource, struct rlimit *, rlim);
    PRE_MEM_WRITE( "getrlimit(rlim)", ARG2, sizeof(struct vki_rlimit) );
@@ -3555,7 +3577,7 @@ POST(sys_getrlimit)
 
 PRE(sys_getrusage)
 {
-   PRINT("sys_getrusage ( %ld, %#lx )", SARG1, ARG2);
+   PRINT("sys_getrusage ( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2);
    PRE_REG_READ2(long, "getrusage", int, who, struct rusage *, usage);
    PRE_MEM_WRITE( "getrusage(usage)", ARG2, sizeof(struct vki_rusage) );
 }
@@ -3569,12 +3591,13 @@ POST(sys_getrusage)
 
 PRE(sys_gettimeofday)
 {
-   PRINT("sys_gettimeofday ( %#lx, %#lx )", ARG1,ARG2);
+   PRINT("sys_gettimeofday ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+         ARG1,ARG2);
    PRE_REG_READ2(long, "gettimeofday",
                  struct timeval *, tv, struct timezone *, tz);
    // GrP fixme does darwin write to *tz anymore?
    if (ARG1 != 0)
-      PRE_timeval_WRITE( "gettimeofday(tv)", ARG1 );
+      PRE_timeval_WRITE( "gettimeofday(tv)", (Addr)ARG1 );
    if (ARG2 != 0)
       PRE_MEM_WRITE( "gettimeofday(tz)", ARG2, sizeof(struct vki_timezone) );
 }
@@ -3584,7 +3607,7 @@ POST(sys_gettimeofday)
    vg_assert(SUCCESS);
    if (RES == 0) {
       if (ARG1 != 0)
-         POST_timeval_WRITE( ARG1 );
+         POST_timeval_WRITE( (Addr)ARG1 );
       if (ARG2 != 0)
         POST_MEM_WRITE( ARG2, sizeof(struct vki_timezone) );
    }
@@ -3592,11 +3615,12 @@ POST(sys_gettimeofday)
 
 PRE(sys_settimeofday)
 {
-   PRINT("sys_settimeofday ( %#lx, %#lx )", ARG1,ARG2);
+   PRINT("sys_settimeofday ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+         ARG1,ARG2);
    PRE_REG_READ2(long, "settimeofday",
                  struct timeval *, tv, struct timezone *, tz);
    if (ARG1 != 0)
-      PRE_timeval_READ( "settimeofday(tv)", ARG1 );
+      PRE_timeval_READ( "settimeofday(tv)", (Addr)ARG1 );
    if (ARG2 != 0) {
       PRE_MEM_READ( "settimeofday(tz)", ARG2, sizeof(struct vki_timezone) );
       /* maybe should warn if tz->tz_dsttime is non-zero? */
@@ -3774,7 +3798,8 @@ PRE(sys_kill)
 PRE(sys_link)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_link ( %#lx(%s), %#lx(%s) )", ARG1,(char*)ARG1,ARG2,(char*)ARG2);
+   PRINT("sys_link ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x(%s) )", ARG1,
+         (char*)(Addr)ARG1,ARG2,(char*)(Addr)ARG2);
    PRE_REG_READ2(long, "link", const char *, oldpath, const char *, newpath);
    PRE_MEM_RASCIIZ( "link(oldpath)", ARG1);
    PRE_MEM_RASCIIZ( "link(newpath)", ARG2);
@@ -3782,7 +3807,8 @@ PRE(sys_link)
 
 PRE(sys_newlstat)
 {
-   PRINT("sys_newlstat ( %#lx(%s), %#lx )", ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_newlstat ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x )", ARG1,
+         (char*)(Addr)ARG1,ARG2);
    PRE_REG_READ2(long, "lstat", char *, file_name, struct stat *, buf);
    PRE_MEM_RASCIIZ( "lstat(file_name)", ARG1 );
    PRE_MEM_WRITE( "lstat(buf)", ARG2, sizeof(struct vki_stat) );
@@ -3797,14 +3823,16 @@ POST(sys_newlstat)
 PRE(sys_mkdir)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_mkdir ( %#lx(%s), %ld )", ARG1, (HChar*)ARG1, SARG2);
+   PRINT("sys_mkdir ( %#" FMT_REGWORD "x(%s), %ld )", ARG1,
+         (HChar*)(Addr)ARG1, SARG2);
    PRE_REG_READ2(long, "mkdir", const char *, pathname, int, mode);
    PRE_MEM_RASCIIZ( "mkdir(pathname)", ARG1 );
 }
 
 PRE(sys_mprotect)
 {
-   PRINT("sys_mprotect ( %#lx, %lu, %lu )", ARG1, ARG2, ARG3);
+   PRINT("sys_mprotect ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "mprotect",
                  unsigned long, addr, vki_size_t, len, unsigned long, prot);
 
@@ -3877,8 +3905,8 @@ POST(sys_mprotect)
 
 PRE(sys_munmap)
 {
-   if (0) VG_(printf)("  munmap( %#lx )\n", ARG1);
-   PRINT("sys_munmap ( %#lx, %llu )", ARG1,(ULong)ARG2);
+   if (0) VG_(printf)("  munmap( %#" FMT_REGWORD "x )\n", ARG1);
+   PRINT("sys_munmap ( %#" FMT_REGWORD "x, %llu )", ARG1,(ULong)ARG2);
    PRE_REG_READ2(long, "munmap", unsigned long, start, vki_size_t, length);
 
    if (!ML_(valid_client_addr)(ARG1, ARG2, tid, "munmap"))
@@ -3895,7 +3923,8 @@ POST(sys_munmap)
 
 PRE(sys_mincore)
 {
-   PRINT("sys_mincore ( %#lx, %llu, %#lx )", ARG1,(ULong)ARG2,ARG3);
+   PRINT("sys_mincore ( %#" FMT_REGWORD "x, %llu, %#" FMT_REGWORD "x )",
+         ARG1, (ULong)ARG2, ARG3);
    PRE_REG_READ3(long, "mincore",
                  unsigned long, start, vki_size_t, length,
                  unsigned char *, vec);
@@ -3909,7 +3938,7 @@ POST(sys_mincore)
 PRE(sys_nanosleep)
 {
    *flags |= SfMayBlock|SfPostOnFail;
-   PRINT("sys_nanosleep ( %#lx, %#lx )", ARG1,ARG2);
+   PRINT("sys_nanosleep ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", ARG1,ARG2);
    PRE_REG_READ2(long, "nanosleep", 
                  struct timespec *, req, struct timespec *, rem);
    PRE_MEM_READ( "nanosleep(req)", ARG1, sizeof(struct vki_timespec) );
@@ -3971,12 +4000,14 @@ PRE(sys_open)
 {
    if (ARG2 & VKI_O_CREAT) {
       // 3-arg version
-      PRINT("sys_open ( %#lx(%s), %ld, %ld )",ARG1, (HChar*)ARG1, SARG2, SARG3);
+      PRINT("sys_open ( %#" FMT_REGWORD "x(%s), %ld, %ld )",ARG1,
+            (HChar*)(Addr)ARG1, SARG2, SARG3);
       PRE_REG_READ3(long, "open",
                     const char *, filename, int, flags, int, mode);
    } else {
       // 2-arg version
-      PRINT("sys_open ( %#lx(%s), %ld )",ARG1, (HChar*)ARG1, SARG2);
+      PRINT("sys_open ( %#" FMT_REGWORD "x(%s), %ld )",ARG1,
+            (HChar*)(Addr)ARG1, SARG2);
       PRE_REG_READ2(long, "open",
                     const char *, filename, int, flags);
    }
@@ -3989,7 +4020,7 @@ PRE(sys_open)
       cloned fd back to the start. */
    {
       HChar  name[30];   // large enough
-      HChar* arg1s = (HChar*) ARG1;
+      HChar* arg1s = (HChar*) (Addr)ARG1;
       SysRes sres;
 
       VG_(sprintf)(name, "/proc/%d/cmdline", VG_(getpid)());
@@ -4007,7 +4038,7 @@ PRE(sys_open)
    }
 
    /* Handle also the case of /proc/self/auxv or /proc/<pid>/auxv. */
-   if (ML_(handle_auxv_open)(status, (const HChar *)ARG1, ARG2))
+   if (ML_(handle_auxv_open)(status, (const HChar *)(Addr)ARG1, ARG2))
       return;
 #endif // defined(VGO_linux)
 
@@ -4023,14 +4054,15 @@ POST(sys_open)
       SET_STATUS_Failure( VKI_EMFILE );
    } else {
       if (VG_(clo_track_fds))
-         ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)ARG1);
+         ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)(Addr)ARG1);
    }
 }
 
 PRE(sys_read)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_read ( %lu, %#lx, %lu )", ARG1, ARG2, ARG3);
+   PRINT("sys_read ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %"
+         FMT_REGWORD "u )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(ssize_t, "read",
                  unsigned int, fd, char *, buf, vki_size_t, count);
 
@@ -4050,7 +4082,8 @@ PRE(sys_write)
 {
    Bool ok;
    *flags |= SfMayBlock;
-   PRINT("sys_write ( %lu, %#lx, %lu )", ARG1, ARG2, ARG3);
+   PRINT("sys_write ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %"
+         FMT_REGWORD "u )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(ssize_t, "write",
                  unsigned int, fd, const char *, buf, vki_size_t, count);
    /* check to see if it is allowed.  If not, try for an exemption from
@@ -4073,7 +4106,8 @@ PRE(sys_write)
 PRE(sys_creat)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_creat ( %#lx(%s), %ld )", ARG1, (HChar*)ARG1, SARG2);
+   PRINT("sys_creat ( %#" FMT_REGWORD "x(%s), %ld )", ARG1,
+         (HChar*)(Addr)ARG1, SARG2);
    PRE_REG_READ2(long, "creat", const char *, pathname, int, mode);
    PRE_MEM_RASCIIZ( "creat(pathname)", ARG1 );
 }
@@ -4086,7 +4120,7 @@ POST(sys_creat)
       SET_STATUS_Failure( VKI_EMFILE );
    } else {
       if (VG_(clo_track_fds))
-         ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)ARG1);
+         ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)(Addr)ARG1);
    }
 }
 
@@ -4100,9 +4134,10 @@ PRE(sys_poll)
       int poll(struct pollfd *ufds, unsigned int nfds, int timeout) 
    */
    UInt i;
-   struct vki_pollfd* ufds = (struct vki_pollfd *)ARG1;
+   struct vki_pollfd* ufds = (struct vki_pollfd *)(Addr)ARG1;
    *flags |= SfMayBlock;
-   PRINT("sys_poll ( %#lx, %lu, %ld )\n", ARG1, ARG2, SARG3);
+   PRINT("sys_poll ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %ld )\n",
+         ARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "poll",
                  struct vki_pollfd *, ufds, unsigned int, nfds, long, timeout);
 
@@ -4120,7 +4155,7 @@ POST(sys_poll)
 {
    if (RES >= 0) {
       UInt i;
-      struct vki_pollfd* ufds = (struct vki_pollfd *)ARG1;
+      struct vki_pollfd* ufds = (struct vki_pollfd *)(Addr)ARG1;
       for (i = 0; i < ARG2; i++)
         POST_MEM_WRITE( (Addr)(&ufds[i].revents), sizeof(ufds[i].revents) );
    }
@@ -4131,7 +4166,8 @@ PRE(sys_readlink)
    FUSE_COMPATIBLE_MAY_BLOCK();
    Word saved = SYSNO;
 
-   PRINT("sys_readlink ( %#lx(%s), %#lx, %llu )", ARG1,(char*)ARG1,ARG2,(ULong)ARG3);
+   PRINT("sys_readlink ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x, %llu )",
+         ARG1, (char*)(Addr)ARG1, ARG2, (ULong)ARG3);
    PRE_REG_READ3(long, "readlink",
                  const char *, path, char *, buf, int, bufsiz);
    PRE_MEM_RASCIIZ( "readlink(path)", ARG1 );
@@ -4154,7 +4190,7 @@ PRE(sys_readlink)
        * /proc/<pid>/exe, or equivalent on Solaris.
        */
       HChar  name[30];   // large enough
-      HChar* arg1s = (HChar*) ARG1;
+      HChar* arg1s = (HChar*) (Addr)ARG1;
       VG_(sprintf)(name, PID_EXEPATH, VG_(getpid)());
       if (ML_(safe_to_deref)(arg1s, 1)
           && (VG_STREQ(arg1s, name) || VG_STREQ(arg1s, SELF_EXEPATH))) {
@@ -4178,7 +4214,8 @@ PRE(sys_readv)
    Int i;
    struct vki_iovec * vec;
    *flags |= SfMayBlock;
-   PRINT("sys_readv ( %lu, %#lx, %lu )", ARG1, ARG2, ARG3);
+   PRINT("sys_readv ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %"
+         FMT_REGWORD "u )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(ssize_t, "readv",
                  unsigned long, fd, const struct iovec *, vector,
                  unsigned long, count);
@@ -4190,7 +4227,7 @@ PRE(sys_readv)
 
       if (ARG2 != 0) {
          /* ToDo: don't do any of the following if the vector is invalid */
-         vec = (struct vki_iovec *)ARG2;
+         vec = (struct vki_iovec *)(Addr)ARG2;
          for (i = 0; i < (Int)ARG3; i++)
             PRE_MEM_WRITE( "readv(vector[...])",
                            (Addr)vec[i].iov_base, vec[i].iov_len );
@@ -4203,7 +4240,7 @@ POST(sys_readv)
    vg_assert(SUCCESS);
    if (RES > 0) {
       Int i;
-      struct vki_iovec * vec = (struct vki_iovec *)ARG2;
+      struct vki_iovec * vec = (struct vki_iovec *)(Addr)ARG2;
       Int remains = RES;
 
       /* RES holds the number of bytes read. */
@@ -4220,7 +4257,8 @@ POST(sys_readv)
 PRE(sys_rename)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_rename ( %#lx(%s), %#lx(%s) )", ARG1,(char*)ARG1,ARG2,(char*)ARG2);
+   PRINT("sys_rename ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x(%s) )", ARG1,
+         (char*)(Addr)ARG1,ARG2,(char*)(Addr)ARG2);
    PRE_REG_READ2(long, "rename", const char *, oldpath, const char *, newpath);
    PRE_MEM_RASCIIZ( "rename(oldpath)", ARG1 );
    PRE_MEM_RASCIIZ( "rename(newpath)", ARG2 );
@@ -4229,7 +4267,7 @@ PRE(sys_rename)
 PRE(sys_rmdir)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_rmdir ( %#lx(%s) )", ARG1,(char*)ARG1);
+   PRINT("sys_rmdir ( %#" FMT_REGWORD "x(%s) )", ARG1,(char*)(Addr)ARG1);
    PRE_REG_READ1(long, "rmdir", const char *, pathname);
    PRE_MEM_RASCIIZ( "rmdir(pathname)", ARG1 );
 }
@@ -4237,8 +4275,8 @@ PRE(sys_rmdir)
 PRE(sys_select)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_select ( %ld, %#lx, %#lx, %#lx, %#lx )", SARG1, ARG2, ARG3,
-         ARG4, ARG5);
+   PRINT("sys_select ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x, %#" FMT_REGWORD "x )", SARG1, ARG2, ARG3, ARG4, ARG5);
    PRE_REG_READ5(long, "select",
                  int, n, vki_fd_set *, readfds, vki_fd_set *, writefds,
                  vki_fd_set *, exceptfds, struct vki_timeval *, timeout);
@@ -4253,12 +4291,12 @@ PRE(sys_select)
       PRE_MEM_READ( "select(exceptfds)", 
                     ARG4, ARG1/8 /* __FD_SETSIZE/8 */ );
    if (ARG5 != 0)
-      PRE_timeval_READ( "select(timeout)", ARG5 );
+      PRE_timeval_READ( "select(timeout)", (Addr)ARG5 );
 }
 
 PRE(sys_setgid)
 {
-   PRINT("sys_setgid ( %lu )", ARG1);
+   PRINT("sys_setgid ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "setgid", vki_gid_t, gid);
 }
 
@@ -4270,7 +4308,7 @@ PRE(sys_setsid)
 
 PRE(sys_setgroups)
 {
-   PRINT("setgroups ( %llu, %#lx )", (ULong)ARG1, ARG2);
+   PRINT("setgroups ( %llu, %#" FMT_REGWORD "x )", (ULong)ARG1, ARG2);
    PRE_REG_READ2(long, "setgroups", int, size, vki_gid_t *, list);
    if (ARG1 > 0)
       PRE_MEM_READ( "setgroups(list)", ARG2, ARG1 * sizeof(vki_gid_t) );
@@ -4284,20 +4322,21 @@ PRE(sys_setpgid)
 
 PRE(sys_setregid)
 {
-   PRINT("sys_setregid ( %lu, %lu )", ARG1, ARG2);
+   PRINT("sys_setregid ( %" FMT_REGWORD "u, %" FMT_REGWORD "u )", ARG1, ARG2);
    PRE_REG_READ2(long, "setregid", vki_gid_t, rgid, vki_gid_t, egid);
 }
 
 PRE(sys_setreuid)
 {
-   PRINT("sys_setreuid ( 0x%lx, 0x%lx )", ARG1, ARG2);
+   PRINT("sys_setreuid ( 0x%" FMT_REGWORD "x, 0x%" FMT_REGWORD "x )",
+         ARG1, ARG2);
    PRE_REG_READ2(long, "setreuid", vki_uid_t, ruid, vki_uid_t, euid);
 }
 
 PRE(sys_setrlimit)
 {
    UWord arg1 = ARG1;
-   PRINT("sys_setrlimit ( %lu, %#lx )", ARG1, ARG2);
+   PRINT("sys_setrlimit ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x )", ARG1, ARG2);
    PRE_REG_READ2(long, "setrlimit",
                  unsigned int, resource, struct rlimit *, rlim);
    PRE_MEM_READ( "setrlimit(rlim)", ARG2, sizeof(struct vki_rlimit) );
@@ -4312,33 +4351,37 @@ PRE(sys_setrlimit)
                                     VKI_PROT_READ)) {
       SET_STATUS_Failure( VKI_EFAULT );
    }
-   else if (((struct vki_rlimit *)ARG2)->rlim_cur 
-            > ((struct vki_rlimit *)ARG2)->rlim_max) {
+   else if (((struct vki_rlimit *)(Addr)ARG2)->rlim_cur
+            > ((struct vki_rlimit *)(Addr)ARG2)->rlim_max) {
       SET_STATUS_Failure( VKI_EINVAL );
    }
    else if (arg1 == VKI_RLIMIT_NOFILE) {
-      if (((struct vki_rlimit *)ARG2)->rlim_cur > VG_(fd_hard_limit) ||
-          ((struct vki_rlimit *)ARG2)->rlim_max != VG_(fd_hard_limit)) {
+      if (((struct vki_rlimit *)(Addr)ARG2)->rlim_cur > VG_(fd_hard_limit) ||
+          ((struct vki_rlimit *)(Addr)ARG2)->rlim_max != VG_(fd_hard_limit)) {
          SET_STATUS_Failure( VKI_EPERM );
       }
       else {
-         VG_(fd_soft_limit) = ((struct vki_rlimit *)ARG2)->rlim_cur;
+         VG_(fd_soft_limit) = ((struct vki_rlimit *)(Addr)ARG2)->rlim_cur;
          SET_STATUS_Success( 0 );
       }
    }
    else if (arg1 == VKI_RLIMIT_DATA) {
-      if (((struct vki_rlimit *)ARG2)->rlim_cur > VG_(client_rlimit_data).rlim_max ||
-          ((struct vki_rlimit *)ARG2)->rlim_max > VG_(client_rlimit_data).rlim_max) {
+      if (((struct vki_rlimit *)(Addr)ARG2)->rlim_cur
+           > VG_(client_rlimit_data).rlim_max ||
+          ((struct vki_rlimit *)(Addr)ARG2)->rlim_max
+           > VG_(client_rlimit_data).rlim_max) {
          SET_STATUS_Failure( VKI_EPERM );
       }
       else {
-         VG_(client_rlimit_data) = *(struct vki_rlimit *)ARG2;
+         VG_(client_rlimit_data) = *(struct vki_rlimit *)(Addr)ARG2;
          SET_STATUS_Success( 0 );
       }
    }
    else if (arg1 == VKI_RLIMIT_STACK && tid == 1) {
-      if (((struct vki_rlimit *)ARG2)->rlim_cur > VG_(client_rlimit_stack).rlim_max ||
-          ((struct vki_rlimit *)ARG2)->rlim_max > VG_(client_rlimit_stack).rlim_max) {
+      if (((struct vki_rlimit *)(Addr)ARG2)->rlim_cur
+           > VG_(client_rlimit_stack).rlim_max ||
+          ((struct vki_rlimit *)(Addr)ARG2)->rlim_max
+           > VG_(client_rlimit_stack).rlim_max) {
          SET_STATUS_Failure( VKI_EPERM );
       }
       else {
@@ -4348,10 +4391,10 @@ PRE(sys_setrlimit)
             TODO: All platforms should set VG_(clstk_max_size) as part of their
                   setup_client_stack(). */
          if ((VG_(clstk_max_size) == 0)
-             || (((struct vki_rlimit *) ARG2)->rlim_cur <= VG_(clstk_max_size)))
-            VG_(threads)[tid].client_stack_szB = ((struct vki_rlimit *)ARG2)->rlim_cur;
+             || (((struct vki_rlimit *) (Addr)ARG2)->rlim_cur <= VG_(clstk_max_size)))
+            VG_(threads)[tid].client_stack_szB = ((struct vki_rlimit *)(Addr)ARG2)->rlim_cur;
 
-         VG_(client_rlimit_stack) = *(struct vki_rlimit *)ARG2;
+         VG_(client_rlimit_stack) = *(struct vki_rlimit *)(Addr)ARG2;
          SET_STATUS_Success( 0 );
       }
    }
@@ -4359,14 +4402,15 @@ PRE(sys_setrlimit)
 
 PRE(sys_setuid)
 {
-   PRINT("sys_setuid ( %lu )", ARG1);
+   PRINT("sys_setuid ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "setuid", vki_uid_t, uid);
 }
 
 PRE(sys_newstat)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_newstat ( %#lx(%s), %#lx )", ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_newstat ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x )",
+         ARG1,(char*)(Addr)ARG1,ARG2);
    PRE_REG_READ2(long, "stat", char *, file_name, struct stat *, buf);
    PRE_MEM_RASCIIZ( "stat(file_name)", ARG1 );
    PRE_MEM_WRITE( "stat(buf)", ARG2, sizeof(struct vki_stat) );
@@ -4380,7 +4424,8 @@ POST(sys_newstat)
 PRE(sys_statfs)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_statfs ( %#lx(%s), %#lx )",ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_statfs ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x )",
+         ARG1, (char*)(Addr)ARG1, ARG2);
    PRE_REG_READ2(long, "statfs", const char *, path, struct statfs *, buf);
    PRE_MEM_RASCIIZ( "statfs(path)", ARG1 );
    PRE_MEM_WRITE( "statfs(buf)", ARG2, sizeof(struct vki_statfs) );
@@ -4392,7 +4437,8 @@ POST(sys_statfs)
 
 PRE(sys_statfs64)
 {
-   PRINT("sys_statfs64 ( %#lx(%s), %llu, %#lx )",ARG1,(char*)ARG1,(ULong)ARG2,ARG3);
+   PRINT("sys_statfs64 ( %#" FMT_REGWORD "x(%s), %llu, %#" FMT_REGWORD "x )",
+         ARG1, (char*)(Addr)ARG1, (ULong)ARG2, ARG3);
    PRE_REG_READ3(long, "statfs64",
                  const char *, path, vki_size_t, size, struct statfs64 *, buf);
    PRE_MEM_RASCIIZ( "statfs64(path)", ARG1 );
@@ -4406,7 +4452,8 @@ POST(sys_statfs64)
 PRE(sys_symlink)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_symlink ( %#lx(%s), %#lx(%s) )",ARG1,(char*)ARG1,ARG2,(char*)ARG2);
+   PRINT("sys_symlink ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x(%s) )",
+         ARG1, (char*)(Addr)ARG1, ARG2, (char*)(Addr)ARG2);
    PRE_REG_READ2(long, "symlink", const char *, oldpath, const char *, newpath);
    PRE_MEM_RASCIIZ( "symlink(oldpath)", ARG1 );
    PRE_MEM_RASCIIZ( "symlink(newpath)", ARG2 );
@@ -4415,7 +4462,7 @@ PRE(sys_symlink)
 PRE(sys_time)
 {
    /* time_t time(time_t *t); */
-   PRINT("sys_time ( %#lx )",ARG1);
+   PRINT("sys_time ( %#" FMT_REGWORD "x )",ARG1);
    PRE_REG_READ1(long, "time", int *, t);
    if (ARG1 != 0) {
       PRE_MEM_WRITE( "time(t)", ARG1, sizeof(vki_time_t) );
@@ -4431,7 +4478,7 @@ POST(sys_time)
 
 PRE(sys_times)
 {
-   PRINT("sys_times ( %#lx )", ARG1);
+   PRINT("sys_times ( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(long, "times", struct tms *, buf);
    if (ARG1 != 0) {
       PRE_MEM_WRITE( "times(buf)", ARG1, sizeof(struct vki_tms) );
@@ -4454,14 +4501,14 @@ PRE(sys_umask)
 PRE(sys_unlink)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_unlink ( %#lx(%s) )", ARG1,(char*)ARG1);
+   PRINT("sys_unlink ( %#" FMT_REGWORD "x(%s) )", ARG1,(char*)(Addr)ARG1);
    PRE_REG_READ1(long, "unlink", const char *, pathname);
    PRE_MEM_RASCIIZ( "unlink(pathname)", ARG1 );
 }
 
 PRE(sys_newuname)
 {
-   PRINT("sys_newuname ( %#lx )", ARG1);
+   PRINT("sys_newuname ( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(long, "uname", struct new_utsname *, buf);
    PRE_MEM_WRITE( "uname(buf)", ARG1, sizeof(struct vki_new_utsname) );
 }
@@ -4476,7 +4523,7 @@ POST(sys_newuname)
 PRE(sys_waitpid)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_waitpid ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+   PRINT("sys_waitpid ( %ld, %#" FMT_REGWORD "x, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "waitpid", 
                  vki_pid_t, pid, unsigned int *, status, int, options);
 
@@ -4493,7 +4540,8 @@ POST(sys_waitpid)
 PRE(sys_wait4)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_wait4 ( %ld, %#lx, %ld, %#lx )", SARG1, ARG2, SARG3, ARG4);
+   PRINT("sys_wait4 ( %ld, %#" FMT_REGWORD "x, %ld, %#" FMT_REGWORD "x )",
+         SARG1, ARG2, SARG3, ARG4);
 
    PRE_REG_READ4(long, "wait4", 
                  vki_pid_t, pid, unsigned int *, status, int, options,
@@ -4517,7 +4565,8 @@ PRE(sys_writev)
    Int i;
    struct vki_iovec * vec;
    *flags |= SfMayBlock;
-   PRINT("sys_writev ( %lu, %#lx, %lu )", ARG1, ARG2, ARG3);
+   PRINT("sys_writev ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %"
+         FMT_REGWORD "u )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(ssize_t, "writev",
                  unsigned long, fd, const struct iovec *, vector,
                  unsigned long, count);
@@ -4529,7 +4578,7 @@ PRE(sys_writev)
                        ARG2, ARG3 * sizeof(struct vki_iovec) );
       if (ARG2 != 0) {
          /* ToDo: don't do any of the following if the vector is invalid */
-         vec = (struct vki_iovec *)ARG2;
+         vec = (struct vki_iovec *)(Addr)ARG2;
          for (i = 0; i < (Int)ARG3; i++)
             PRE_MEM_READ( "writev(vector[...])",
                            (Addr)vec[i].iov_base, vec[i].iov_len );
@@ -4540,18 +4589,20 @@ PRE(sys_writev)
 PRE(sys_utimes)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_utimes ( %#lx(%s), %#lx )", ARG1,(char*)ARG1,ARG2);
+   PRINT("sys_utimes ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x )",
+         ARG1, (char*)(Addr)ARG1, ARG2);
    PRE_REG_READ2(long, "utimes", char *, filename, struct timeval *, tvp);
    PRE_MEM_RASCIIZ( "utimes(filename)", ARG1 );
    if (ARG2 != 0) {
-      PRE_timeval_READ( "utimes(tvp[0])", ARG2 );
-      PRE_timeval_READ( "utimes(tvp[1])", ARG2+sizeof(struct vki_timeval) );
+      PRE_timeval_READ( "utimes(tvp[0])", (Addr)ARG2 );
+      PRE_timeval_READ( "utimes(tvp[1])",
+                        (Addr)ARG2+sizeof(struct vki_timeval) );
    }
 }
 
 PRE(sys_acct)
 {
-   PRINT("sys_acct ( %#lx(%s) )", ARG1,(char*)ARG1);
+   PRINT("sys_acct ( %#" FMT_REGWORD "x(%s) )", ARG1,(char*)(Addr)ARG1);
    PRE_REG_READ1(long, "acct", const char *, filename);
    PRE_MEM_RASCIIZ( "acct(filename)", ARG1 );
 }
@@ -4565,11 +4616,11 @@ PRE(sys_pause)
 
 PRE(sys_sigaltstack)
 {
-   PRINT("sigaltstack ( %#lx, %#lx )",ARG1,ARG2);
+   PRINT("sigaltstack ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",ARG1,ARG2);
    PRE_REG_READ2(int, "sigaltstack",
                  const vki_stack_t *, ss, vki_stack_t *, oss);
    if (ARG1 != 0) {
-      const vki_stack_t *ss = (vki_stack_t *)ARG1;
+      const vki_stack_t *ss = (vki_stack_t *)(Addr)ARG1;
       PRE_MEM_READ( "sigaltstack(ss)", (Addr)&ss->ss_sp, sizeof(ss->ss_sp) );
       PRE_MEM_READ( "sigaltstack(ss)", (Addr)&ss->ss_flags, sizeof(ss->ss_flags) );
       PRE_MEM_READ( "sigaltstack(ss)", (Addr)&ss->ss_size, sizeof(ss->ss_size) );
@@ -4579,18 +4630,18 @@ PRE(sys_sigaltstack)
    }
 
    /* Be safe. */
-   if (ARG1 && !ML_(safe_to_deref((void*)ARG1, sizeof(vki_stack_t)))) {
+   if (ARG1 && !ML_(safe_to_deref((void*)(Addr)ARG1, sizeof(vki_stack_t)))) {
       SET_STATUS_Failure(VKI_EFAULT);
       return;
    }
-   if (ARG2 && !ML_(safe_to_deref((void*)ARG2, sizeof(vki_stack_t)))) {
+   if (ARG2 && !ML_(safe_to_deref((void*)(Addr)ARG2, sizeof(vki_stack_t)))) {
       SET_STATUS_Failure(VKI_EFAULT);
       return;
    }
 
    SET_STATUS_from_SysRes( 
-      VG_(do_sys_sigaltstack) (tid, (vki_stack_t*)ARG1, 
-                              (vki_stack_t*)ARG2)
+      VG_(do_sys_sigaltstack) (tid, (vki_stack_t*)(Addr)ARG1,
+                              (vki_stack_t*)(Addr)ARG2)
    );
 }
 POST(sys_sigaltstack)
@@ -4602,7 +4653,7 @@ POST(sys_sigaltstack)
 
 PRE(sys_sethostname)
 {
-   PRINT("sys_sethostname ( %#lx, %ld )", ARG1, SARG2);
+   PRINT("sys_sethostname ( %#" FMT_REGWORD "x, %ld )", ARG1, SARG2);
    PRE_REG_READ2(long, "sethostname", char *, name, int, len);
    PRE_MEM_READ( "sethostname(name)", ARG1, ARG2 );
 }
index b103d13d4829754ee3b05e90cbdc83b10c2e4b1c..5ed732c364137acd0d4040d0c2e7d6e03b7cebea 100644 (file)
@@ -795,7 +795,9 @@ PRE(sys_clone)
    UInt cloneflags;
    Bool badarg = False;
 
-   PRINT("sys_clone ( %lx, %#lx, %#lx, %#lx, %#lx )",ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_clone ( %" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#" FMT_REGWORD
+         "x, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", ARG1, ARG2, ARG3,
+         ARG4, ARG5);
 
 // Order of arguments differs between platforms.
 #if defined(VGP_x86_linux) \
@@ -890,8 +892,8 @@ PRE(sys_clone)
          do_clone(tid,
                   ARG_FLAGS,               /* flags */
                   (Addr)ARG_CHILD_STACK,   /* child ESP */
-                  (Int*)ARG3,              /* parent_tidptr */
-                  (Int*)ARG_CHILD_TIDPTR,  /* child_tidptr */
+                  (Int*)(Addr)ARG3,              /* parent_tidptr */
+                  (Int*)(Addr)ARG_CHILD_TIDPTR,  /* child_tidptr */
                   (Addr)ARG_TLS));         /* set_tls */
       break;
 
@@ -903,14 +905,15 @@ PRE(sys_clone)
       SET_STATUS_from_SysRes(
          ML_(do_fork_clone)(tid,
                        cloneflags,      /* flags */
-                       (Int*)ARG3,     /* parent_tidptr */
-                       (Int*)ARG_CHILD_TIDPTR,     /* child_tidptr */
+                       (Int*)(Addr)ARG3,     /* parent_tidptr */
+                       (Int*)(Addr)ARG_CHILD_TIDPTR,     /* child_tidptr */
                        (Addr)ARG_CHILD_STACK));
       break;
 
    default:
       /* should we just ENOSYS? */
-      VG_(message)(Vg_UserMsg, "Unsupported clone() flags: 0x%lx\n", ARG_FLAGS);
+      VG_(message)(Vg_UserMsg, "Unsupported clone() flags: 0x%" FMT_REGWORD
+                   "x\n", ARG_FLAGS);
       VG_(message)(Vg_UserMsg, "\n");
       VG_(message)(Vg_UserMsg, "The only supported clone() uses are:\n");
       VG_(message)(Vg_UserMsg, " - via a threads library (LinuxThreads or NPTL)\n");
@@ -950,8 +953,10 @@ PRE(sys_mount)
    // We are conservative and check everything, except the memory pointed to
    // by 'data'.
    *flags |= SfMayBlock;
-   PRINT("sys_mount( %#lx(%s), %#lx(%s), %#lx(%s), %#lx, %#lx )",
-         ARG1,(HChar*)ARG1, ARG2,(HChar*)ARG2, ARG3,(HChar*)ARG3, ARG4, ARG5);
+   PRINT("sys_mount( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x(%s), %#"
+         FMT_REGWORD "x(%s), %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+         ARG1, (HChar*)(Addr)ARG1, ARG2, (HChar*)(Addr)ARG2, ARG3,
+         (HChar*)(Addr)ARG3, ARG4, ARG5);
    PRE_REG_READ5(long, "mount",
                  char *, source, char *, target, char *, type,
                  unsigned long, flags, void *, data);
@@ -963,14 +968,14 @@ PRE(sys_mount)
 
 PRE(sys_oldumount)
 {
-   PRINT("sys_oldumount( %#lx )", ARG1);
+   PRINT("sys_oldumount( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(long, "umount", char *, path);
    PRE_MEM_RASCIIZ( "umount(path)", ARG1);
 }
 
 PRE(sys_umount)
 {
-   PRINT("sys_umount( %#lx, %ld )", ARG1, SARG2);
+   PRINT("sys_umount( %#" FMT_REGWORD "x, %ld )", ARG1, SARG2);
    PRE_REG_READ2(long, "umount2", char *, path, int, flags);
    PRE_MEM_RASCIIZ( "umount2(path)", ARG1);
 }
@@ -980,7 +985,7 @@ PRE(sys_umount)
  */
 PRE(sys_pivot_root)
 {
-   PRINT("sys_pivot_root ( %s %s )", (HChar*)ARG1, (HChar*)ARG2);
+   PRINT("sys_pivot_root ( %s %s )", (HChar*)(Addr)ARG1, (HChar*)(Addr)ARG2);
    PRE_REG_READ2(int, "pivot_root", char *, new_root, char *, old_root);
    PRE_MEM_RASCIIZ( "pivot_root(new_root)", ARG1);
    PRE_MEM_RASCIIZ( "pivot_root(old_root)", ARG2);
@@ -993,45 +998,48 @@ PRE(sys_pivot_root)
 
 PRE(sys_setfsuid16)
 {
-   PRINT("sys_setfsuid16 ( %lu )", ARG1);
+   PRINT("sys_setfsuid16 ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "setfsuid16", vki_old_uid_t, uid);
 }
 
 PRE(sys_setfsuid)
 {
-   PRINT("sys_setfsuid ( %lu )", ARG1);
+   PRINT("sys_setfsuid ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "setfsuid", vki_uid_t, uid);
 }
 
 PRE(sys_setfsgid16)
 {
-   PRINT("sys_setfsgid16 ( %lu )", ARG1);
+   PRINT("sys_setfsgid16 ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "setfsgid16", vki_old_gid_t, gid);
 }
 
 PRE(sys_setfsgid)
 {
-   PRINT("sys_setfsgid ( %lu )", ARG1);
+   PRINT("sys_setfsgid ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "setfsgid", vki_gid_t, gid);
 }
 
 PRE(sys_setresuid16)
 {
-   PRINT("sys_setresuid16 ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
+   PRINT("sys_setresuid16 ( %" FMT_REGWORD "u, %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "setresuid16",
                  vki_old_uid_t, ruid, vki_old_uid_t, euid, vki_old_uid_t, suid);
 }
 
 PRE(sys_setresuid)
 {
-   PRINT("sys_setresuid ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
+   PRINT("sys_setresuid ( %" FMT_REGWORD "u, %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "setresuid",
                  vki_uid_t, ruid, vki_uid_t, euid, vki_uid_t, suid);
 }
 
 PRE(sys_getresuid16)
 {
-   PRINT("sys_getresuid16 ( %#lx, %#lx, %#lx )", ARG1,ARG2,ARG3);
+   PRINT("sys_getresuid16 ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x )", ARG1,ARG2,ARG3);
    PRE_REG_READ3(long, "getresuid16",
                  vki_old_uid_t *, ruid, vki_old_uid_t *, euid,
                  vki_old_uid_t *, suid);
@@ -1051,7 +1059,8 @@ POST(sys_getresuid16)
 
 PRE(sys_getresuid)
 {
-   PRINT("sys_getresuid ( %#lx, %#lx, %#lx )", ARG1,ARG2,ARG3);
+   PRINT("sys_getresuid ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x )", ARG1,ARG2,ARG3);
    PRE_REG_READ3(long, "getresuid", 
                  vki_uid_t *, ruid, vki_uid_t *, euid, vki_uid_t *, suid);
    PRE_MEM_WRITE( "getresuid(ruid)", ARG1, sizeof(vki_uid_t) );
@@ -1070,7 +1079,8 @@ POST(sys_getresuid)
 
 PRE(sys_setresgid16)
 {
-   PRINT("sys_setresgid16 ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
+   PRINT("sys_setresgid16 ( %" FMT_REGWORD "u, %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "setresgid16",
                  vki_old_gid_t, rgid, 
                  vki_old_gid_t, egid, vki_old_gid_t, sgid);
@@ -1078,14 +1088,16 @@ PRE(sys_setresgid16)
 
 PRE(sys_setresgid)
 {
-   PRINT("sys_setresgid ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
+   PRINT("sys_setresgid ( %" FMT_REGWORD "u, %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "setresgid",
                  vki_gid_t, rgid, vki_gid_t, egid, vki_gid_t, sgid);
 }
 
 PRE(sys_getresgid16)
 {
-   PRINT("sys_getresgid16 ( %#lx, %#lx, %#lx )", ARG1,ARG2,ARG3);
+   PRINT("sys_getresgid16 ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x )", ARG1,ARG2,ARG3);
    PRE_REG_READ3(long, "getresgid16",
                  vki_old_gid_t *, rgid, vki_old_gid_t *, egid,
                  vki_old_gid_t *, sgid);
@@ -1105,7 +1117,8 @@ POST(sys_getresgid16)
 
 PRE(sys_getresgid)
 {
-   PRINT("sys_getresgid ( %#lx, %#lx, %#lx )", ARG1,ARG2,ARG3);
+   PRINT("sys_getresgid ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x )", ARG1,ARG2,ARG3);
    PRE_REG_READ3(long, "getresgid", 
                  vki_gid_t *, rgid, vki_gid_t *, egid, vki_gid_t *, sgid);
    PRE_MEM_WRITE( "getresgid(rgid)", ARG1, sizeof(vki_gid_t) );
@@ -1198,7 +1211,9 @@ PRE(sys_exit_group)
 
 PRE(sys_llseek)
 {
-   PRINT("sys_llseek ( %lu, 0x%lx, 0x%lx, %#lx, %lu )", ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_llseek ( %" FMT_REGWORD "u, 0x%" FMT_REGWORD "x, 0x%"
+         FMT_REGWORD "x, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )",
+         ARG1, ARG2, ARG3, ARG4, ARG5);
    PRE_REG_READ5(long, "llseek",
                  unsigned int, fd, unsigned long, offset_high,
                  unsigned long, offset_low, vki_loff_t *, result,
@@ -1217,8 +1232,8 @@ POST(sys_llseek)
 
 PRE(sys_adjtimex)
 {
-   struct vki_timex *tx = (struct vki_timex *)ARG1;
-   PRINT("sys_adjtimex ( %#lx )", ARG1);
+   struct vki_timex *tx = (struct vki_timex *)(Addr)ARG1;
+   PRINT("sys_adjtimex ( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(long, "adjtimex", struct timex *, buf);
 
    if (ML_(safe_to_deref) (tx, sizeof(struct vki_timex))) {
@@ -1254,8 +1269,8 @@ POST(sys_adjtimex)
 
 PRE(sys_clock_adjtime)
 {
-   struct vki_timex *tx = (struct vki_timex *)ARG2;
-   PRINT("sys_clock_adjtime ( %ld, %#lx )", SARG1,ARG2);
+   struct vki_timex *tx = (struct vki_timex *)(Addr)ARG2;
+   PRINT("sys_clock_adjtime ( %ld, %#" FMT_REGWORD "x )", SARG1,ARG2);
    PRE_REG_READ2(long, "clock_adjtime", vki_clockid_t, id, struct timex *, buf);
    PRE_MEM_READ( "clock_adjtime(timex->modes)", ARG2, sizeof(tx->modes));
 
@@ -1288,7 +1303,8 @@ POST(sys_clock_adjtime)
 
 PRE(sys_ioperm)
 {
-   PRINT("sys_ioperm ( %lu, %lu, %ld )", ARG1, ARG2, SARG3 );
+   PRINT("sys_ioperm ( %" FMT_REGWORD "u, %" FMT_REGWORD "u, %ld )",
+         ARG1, ARG2, SARG3 );
    PRE_REG_READ3(long, "ioperm",
                  unsigned long, from, unsigned long, num, int, turn_on);
 }
@@ -1296,7 +1312,7 @@ PRE(sys_ioperm)
 PRE(sys_syslog)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_syslog (%ld, %#lx, %ld)", SARG1, ARG2, SARG3);
+   PRINT("sys_syslog (%ld, %#" FMT_REGWORD "x, %ld)", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "syslog", int, type, char *, bufp, int, len);
    switch (ARG1) {
    // The kernel uses magic numbers here, rather than named constants,
@@ -1327,7 +1343,7 @@ PRE(sys_vhangup)
 
 PRE(sys_sysinfo)
 {
-   PRINT("sys_sysinfo ( %#lx )",ARG1);
+   PRINT("sys_sysinfo ( %#" FMT_REGWORD "x )",ARG1);
    PRE_REG_READ1(long, "sysinfo", struct sysinfo *, info);
    PRE_MEM_WRITE( "sysinfo(info)", ARG1, sizeof(struct vki_sysinfo) );
 }
@@ -1345,8 +1361,8 @@ PRE(sys_personality)
 PRE(sys_sysctl)
 {
    struct __vki_sysctl_args *args;
-   PRINT("sys_sysctl ( %#lx )", ARG1 );
-   args = (struct __vki_sysctl_args *)ARG1;
+   PRINT("sys_sysctl ( %#" FMT_REGWORD "x )", ARG1 );
+   args = (struct __vki_sysctl_args *)(Addr)ARG1;
    PRE_REG_READ1(long, "sysctl", struct __sysctl_args *, args);
    PRE_MEM_WRITE( "sysctl(args)", ARG1, sizeof(struct __vki_sysctl_args) );
    if (!VG_(am_is_valid_for_client)(ARG1, sizeof(struct __vki_sysctl_args), 
@@ -1366,7 +1382,7 @@ PRE(sys_sysctl)
 POST(sys_sysctl)
 {
    struct __vki_sysctl_args *args;
-   args = (struct __vki_sysctl_args *)ARG1;
+   args = (struct __vki_sysctl_args *)(Addr)ARG1;
    if (args->oldlenp != NULL) {
       POST_MEM_WRITE((Addr)args->oldlenp, sizeof(*args->oldlenp));
       POST_MEM_WRITE((Addr)args->oldval, 1 + *args->oldlenp);
@@ -1428,8 +1444,9 @@ PRE(sys_prctl)
       PRE_REG_READ2(int, "prctl", int, option, char *, name);
       /* The name can be up to TASK_COMM_LEN(16) bytes long, including
          the terminating null byte. So do not check more than 16 bytes. */
-      if (ML_(safe_to_deref)((const HChar *) ARG2, VKI_TASK_COMM_LEN)) {
-         SizeT len = VG_(strnlen)((const HChar *) ARG2, VKI_TASK_COMM_LEN);
+      if (ML_(safe_to_deref)((const HChar *) (Addr)ARG2, VKI_TASK_COMM_LEN)) {
+         SizeT len = VG_(strnlen)((const HChar *) (Addr)ARG2,
+                                  VKI_TASK_COMM_LEN);
          if (len < VKI_TASK_COMM_LEN) {
             PRE_MEM_RASCIIZ("prctl(set-name)", ARG2);
          } else {
@@ -1438,7 +1455,7 @@ PRE(sys_prctl)
       } else {
          /* Do it the slow way, one byte at a time, while checking for
             terminating '\0'. */
-         const HChar *name = (const HChar *) ARG2;
+         const HChar *name = (const HChar *) (Addr)ARG2;
          for (UInt i = 0; i < VKI_TASK_COMM_LEN; i++) {
             PRE_MEM_READ("prctl(set-name)", (Addr) &name[i], 1);
             if (!ML_(safe_to_deref)(&name[i], 1) || name[i] == '\0') {
@@ -1506,7 +1523,7 @@ POST(sys_prctl)
       break;
    case VKI_PR_SET_NAME:
       {
-         const HChar* new_name = (const HChar*) ARG2;
+         const HChar* new_name = (const HChar*) (Addr)ARG2;
          if (new_name) {    // Paranoia
             ThreadState* tst = VG_(get_ThreadState)(tid);
             SizeT new_len = VG_(strnlen)(new_name, VKI_TASK_COMM_LEN);
@@ -1524,7 +1541,8 @@ POST(sys_prctl)
 PRE(sys_sendfile)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_sendfile ( %ld, %ld, %#lx, %lu )", SARG1,SARG2,ARG3,ARG4);
+   PRINT("sys_sendfile ( %ld, %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )",
+         SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(ssize_t, "sendfile",
                  int, out_fd, int, in_fd, vki_off_t *, offset,
                  vki_size_t, count);
@@ -1541,7 +1559,8 @@ POST(sys_sendfile)
 PRE(sys_sendfile64)
 {
    *flags |= SfMayBlock;
-   PRINT("sendfile64 ( %ld, %ld, %#lx, %lu )",SARG1,SARG2,ARG3,ARG4);
+   PRINT("sendfile64 ( %ld, %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )",
+         SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(ssize_t, "sendfile64",
                  int, out_fd, int, in_fd, vki_loff_t *, offset,
                  vki_size_t, count);
@@ -1567,7 +1586,8 @@ PRE(sys_futex)
       ARG5 - u32 *uaddr2                       REQUEUE,CMP_REQUEUE
       ARG6 - int val3                          CMP_REQUEUE
     */
-   PRINT("sys_futex ( %#lx, %ld, %ld, %#lx, %#lx )", ARG1,SARG2,SARG3,ARG4,ARG5);
+   PRINT("sys_futex ( %#" FMT_REGWORD "x, %ld, %ld, %#" FMT_REGWORD
+         "x, %#" FMT_REGWORD "x )", ARG1, SARG2, SARG3, ARG4, ARG5);
    switch(ARG2 & ~(VKI_FUTEX_PRIVATE_FLAG|VKI_FUTEX_CLOCK_REALTIME)) {
    case VKI_FUTEX_CMP_REQUEUE:
    case VKI_FUTEX_WAKE_OP:
@@ -1588,7 +1608,7 @@ PRE(sys_futex)
             SET_STATUS_Failure( VKI_EFAULT );
             return;
       }
-      if (*(vki_u32 *)ARG1 != ARG3) {
+      if (*(vki_u32 *)(Addr)ARG1 != ARG3) {
          PRE_REG_READ4(long, "futex",
                        vki_u32 *, futex, int, op, int, val,
                        struct timespec *, utime);
@@ -1677,7 +1697,8 @@ POST(sys_futex)
 
 PRE(sys_set_robust_list)
 {
-   PRINT("sys_set_robust_list ( %#lx, %lu )", ARG1,ARG2);
+   PRINT("sys_set_robust_list ( %#" FMT_REGWORD "x, %"
+         FMT_REGWORD "u )", ARG1, ARG2);
    PRE_REG_READ2(long, "set_robust_list", 
                  struct vki_robust_list_head *, head, vki_size_t, len);
 
@@ -1690,7 +1711,8 @@ PRE(sys_set_robust_list)
 
 PRE(sys_get_robust_list)
 {
-   PRINT("sys_get_robust_list ( %ld, %#lx, %#lx )", SARG1,ARG2,ARG3);
+   PRINT("sys_get_robust_list ( %ld, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "get_robust_list",
                  int, pid,
                  struct vki_robust_list_head **, head_ptr,
@@ -1718,7 +1740,8 @@ struct pselect_adjusted_sigset {
 PRE(sys_pselect6)
 {
    *flags |= SfMayBlock | SfPostOnFail;
-   PRINT("sys_pselect6 ( %ld, %#lx, %#lx, %#lx, %#lx, %#lx )",
+   PRINT("sys_pselect6 ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
          SARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(long, "pselect6",
                  int, n, vki_fd_set *, readfds, vki_fd_set *, writefds,
@@ -1738,7 +1761,7 @@ PRE(sys_pselect6)
       PRE_MEM_READ( "pselect6(timeout)", ARG5, sizeof(struct vki_timeval) );
    if (ARG6 != 0) {
       const struct pselect_sized_sigset *pss =
-          (struct pselect_sized_sigset *)ARG6;
+          (struct pselect_sized_sigset *)(Addr)ARG6;
       PRE_MEM_READ( "pselect6(sig)", ARG6, sizeof(*pss) );
       if (!ML_(safe_to_deref)(pss, sizeof(*pss))) {
          ARG6 = 1; /* Something recognisable to POST() hook. */
@@ -1766,16 +1789,18 @@ PRE(sys_pselect6)
 POST(sys_pselect6)
 {
    if (ARG6 != 0 && ARG6 != 1) {
-       VG_(free)((struct pselect_adjusted_sigset *)ARG6);
+       VG_(free)((struct pselect_adjusted_sigset *)(Addr)ARG6);
    }
 }
 
 PRE(sys_ppoll)
 {
    UInt i;
-   struct vki_pollfd* ufds = (struct vki_pollfd *)ARG1;
+   struct vki_pollfd* ufds = (struct vki_pollfd *)(Addr)ARG1;
    *flags |= SfMayBlock | SfPostOnFail;
-   PRINT("sys_ppoll ( %#lx, %lu, %#lx, %#lx, %lu )\n", ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_ppoll ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %#" FMT_REGWORD
+         "x, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )\n",
+         ARG1, ARG2, ARG3, ARG4, ARG5);
    PRE_REG_READ5(long, "ppoll",
                  struct vki_pollfd *, ufds, unsigned int, nfds,
                  struct vki_timespec *, tsp, vki_sigset_t *, sigmask,
@@ -1793,7 +1818,7 @@ PRE(sys_ppoll)
    if (ARG3)
       PRE_MEM_READ( "ppoll(tsp)", ARG3, sizeof(struct vki_timespec) );
    if (ARG4 != 0 && sizeof(vki_sigset_t) == ARG5) {
-      const vki_sigset_t *guest_sigmask = (vki_sigset_t *)ARG4;
+      const vki_sigset_t *guest_sigmask = (vki_sigset_t *)(Addr)ARG4;
       PRE_MEM_READ( "ppoll(sigmask)", ARG4, ARG5);
       if (!ML_(safe_to_deref)(guest_sigmask, sizeof(*guest_sigmask))) {
          ARG4 = 1; /* Something recognisable to POST() hook. */
@@ -1812,12 +1837,12 @@ POST(sys_ppoll)
    vg_assert(SUCCESS || FAILURE);
    if (SUCCESS && (RES >= 0)) {
       UInt i;
-      struct vki_pollfd* ufds = (struct vki_pollfd *)ARG1;
+      struct vki_pollfd* ufds = (struct vki_pollfd *)(Addr)ARG1;
       for (i = 0; i < ARG2; i++)
         POST_MEM_WRITE( (Addr)(&ufds[i].revents), sizeof(ufds[i].revents) );
    }
    if (ARG4 != 0 && ARG5 == sizeof(vki_sigset_t) && ARG4 != 1) {
-      VG_(free)((vki_sigset_t *) ARG4);
+      VG_(free)((vki_sigset_t *) (Addr)ARG4);
    }
 }
 
@@ -1867,7 +1892,7 @@ PRE(sys_epoll_ctl)
       "EPOLL_CTL_DEL",
       "EPOLL_CTL_MOD"
    };
-   PRINT("sys_epoll_ctl ( %ld, %s, %ld, %#lx )",
+   PRINT("sys_epoll_ctl ( %ld, %s, %ld, %#" FMT_REGWORD "x )",
          SARG1, ( ARG2<3 ? epoll_ctl_s[ARG2] : "?" ), SARG3, ARG4);
    PRE_REG_READ4(long, "epoll_ctl",
                  int, epfd, int, op, int, fd, struct vki_epoll_event *, event);
@@ -1878,7 +1903,8 @@ PRE(sys_epoll_ctl)
 PRE(sys_epoll_wait)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_epoll_wait ( %ld, %#lx, %ld, %ld )", SARG1, ARG2, SARG3, SARG4);
+   PRINT("sys_epoll_wait ( %ld, %#" FMT_REGWORD "x, %ld, %ld )",
+         SARG1, ARG2, SARG3, SARG4);
    PRE_REG_READ4(long, "epoll_wait",
                  int, epfd, struct vki_epoll_event *, events,
                  int, maxevents, int, timeout);
@@ -1894,7 +1920,8 @@ POST(sys_epoll_wait)
 PRE(sys_epoll_pwait)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_epoll_pwait ( %ld, %#lx, %ld, %ld, %#lx, %lu )",
+   PRINT("sys_epoll_pwait ( %ld, %#" FMT_REGWORD "x, %ld, %ld, %#"
+          FMT_REGWORD "x, %" FMT_REGWORD "u )",
          SARG1, ARG2, SARG3, SARG4, ARG5, ARG6);
    PRE_REG_READ6(long, "epoll_pwait",
                  int, epfd, struct vki_epoll_event *, events,
@@ -1913,7 +1940,7 @@ POST(sys_epoll_pwait)
 
 PRE(sys_eventfd)
 {
-   PRINT("sys_eventfd ( %lu )", ARG1);
+   PRINT("sys_eventfd ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "sys_eventfd", unsigned int, count);
 }
 POST(sys_eventfd)
@@ -1929,7 +1956,7 @@ POST(sys_eventfd)
 
 PRE(sys_eventfd2)
 {
-   PRINT("sys_eventfd2 ( %lu, %ld )", ARG1, SARG2);
+   PRINT("sys_eventfd2 ( %" FMT_REGWORD "u, %ld )", ARG1, SARG2);
    PRE_REG_READ2(long, "sys_eventfd2", unsigned int, count, int, flags);
 }
 POST(sys_eventfd2)
@@ -1967,7 +1994,8 @@ PRE(sys_fallocate)
 
 PRE(sys_prlimit64)
 {
-   PRINT("sys_prlimit64 ( %ld, %lu, %#lx, %#lx )", SARG1,ARG2,ARG3,ARG4);
+   PRINT("sys_prlimit64 ( %ld, %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %#"
+          FMT_REGWORD "x )", SARG1,ARG2,ARG3,ARG4);
    PRE_REG_READ4(long, "prlimit64",
                  vki_pid_t, pid, unsigned int, resource,
                  const struct rlimit64 *, new_rlim,
@@ -1978,7 +2006,8 @@ PRE(sys_prlimit64)
       PRE_MEM_WRITE( "rlimit64(old_rlim)", ARG4, sizeof(struct vki_rlimit64) );
 
    if (ARG3 &&
-       ((struct vki_rlimit64 *)ARG3)->rlim_cur > ((struct vki_rlimit64 *)ARG3)->rlim_max) {
+       ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_cur
+        > ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_max) {
       SET_STATUS_Failure( VKI_EINVAL );
    }
    else if (ARG1 == 0 || ARG1 == VG_(getpid)()) {
@@ -1986,16 +2015,19 @@ PRE(sys_prlimit64)
       case VKI_RLIMIT_NOFILE:
          SET_STATUS_Success( 0 );
          if (ARG4) {
-            ((struct vki_rlimit64 *)ARG4)->rlim_cur = VG_(fd_soft_limit);
-            ((struct vki_rlimit64 *)ARG4)->rlim_max = VG_(fd_hard_limit);
+            ((struct vki_rlimit64 *)(Addr)ARG4)->rlim_cur = VG_(fd_soft_limit);
+            ((struct vki_rlimit64 *)(Addr)ARG4)->rlim_max = VG_(fd_hard_limit);
          }
          if (ARG3) {
-            if (((struct vki_rlimit64 *)ARG3)->rlim_cur > VG_(fd_hard_limit) ||
-                ((struct vki_rlimit64 *)ARG3)->rlim_max != VG_(fd_hard_limit)) {
+            if (((struct vki_rlimit64 *)(Addr)ARG3)->rlim_cur
+                  > VG_(fd_hard_limit) ||
+                ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_max
+                  != VG_(fd_hard_limit)) {
                SET_STATUS_Failure( VKI_EPERM );
             }
             else {
-               VG_(fd_soft_limit) = ((struct vki_rlimit64 *)ARG3)->rlim_cur;
+               VG_(fd_soft_limit) =
+                  ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_cur;
             }
          }
          break;
@@ -2003,17 +2035,23 @@ PRE(sys_prlimit64)
       case VKI_RLIMIT_DATA:
          SET_STATUS_Success( 0 );
          if (ARG4) {
-            ((struct vki_rlimit64 *)ARG4)->rlim_cur = VG_(client_rlimit_data).rlim_cur;
-            ((struct vki_rlimit64 *)ARG4)->rlim_max = VG_(client_rlimit_data).rlim_max;
+            ((struct vki_rlimit64 *)(Addr)ARG4)->rlim_cur =
+               VG_(client_rlimit_data).rlim_cur;
+            ((struct vki_rlimit64 *)(Addr)ARG4)->rlim_max =
+               VG_(client_rlimit_data).rlim_max;
          }
          if (ARG3) {
-            if (((struct vki_rlimit64 *)ARG3)->rlim_cur > VG_(client_rlimit_data).rlim_max ||
-                ((struct vki_rlimit64 *)ARG3)->rlim_max > VG_(client_rlimit_data).rlim_max) {
+            if (((struct vki_rlimit64 *)(Addr)ARG3)->rlim_cur
+               > VG_(client_rlimit_data).rlim_max ||
+            ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_max
+               > VG_(client_rlimit_data).rlim_max) {
                SET_STATUS_Failure( VKI_EPERM );
             }
             else {
-               VG_(client_rlimit_data).rlim_cur = ((struct vki_rlimit64 *)ARG3)->rlim_cur;
-               VG_(client_rlimit_data).rlim_max = ((struct vki_rlimit64 *)ARG3)->rlim_max;
+               VG_(client_rlimit_data).rlim_cur =
+                  ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_cur;
+               VG_(client_rlimit_data).rlim_max =
+                  ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_max;
             }
          }
          break;
@@ -2021,18 +2059,25 @@ PRE(sys_prlimit64)
       case VKI_RLIMIT_STACK:
          SET_STATUS_Success( 0 );
          if (ARG4) {
-            ((struct vki_rlimit64 *)ARG4)->rlim_cur = VG_(client_rlimit_stack).rlim_cur;
-            ((struct vki_rlimit64 *)ARG4)->rlim_max = VG_(client_rlimit_stack).rlim_max;
+            ((struct vki_rlimit64 *)(Addr)ARG4)->rlim_cur =
+               VG_(client_rlimit_stack).rlim_cur;
+            ((struct vki_rlimit64 *)(Addr)ARG4)->rlim_max =
+               VG_(client_rlimit_stack).rlim_max;
          }
          if (ARG3) {
-            if (((struct vki_rlimit64 *)ARG3)->rlim_cur > VG_(client_rlimit_stack).rlim_max ||
-                ((struct vki_rlimit64 *)ARG3)->rlim_max > VG_(client_rlimit_stack).rlim_max) {
+            if (((struct vki_rlimit64 *)(Addr)ARG3)->rlim_cur
+               > VG_(client_rlimit_stack).rlim_max ||
+            ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_max
+               > VG_(client_rlimit_stack).rlim_max) {
                SET_STATUS_Failure( VKI_EPERM );
             }
             else {
-               VG_(threads)[tid].client_stack_szB = ((struct vki_rlimit64 *)ARG3)->rlim_cur;
-               VG_(client_rlimit_stack).rlim_cur = ((struct vki_rlimit64 *)ARG3)->rlim_cur;
-               VG_(client_rlimit_stack).rlim_max = ((struct vki_rlimit64 *)ARG3)->rlim_max;
+               VG_(threads)[tid].client_stack_szB =
+                  ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_cur;
+               VG_(client_rlimit_stack).rlim_cur =
+                   ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_cur;
+               VG_(client_rlimit_stack).rlim_max =
+                   ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_max;
            }
          }
          break;
@@ -2058,7 +2103,7 @@ PRE(sys_gettid)
 
 PRE(sys_set_tid_address)
 {
-   PRINT("sys_set_tid_address ( %#lx )", ARG1);
+   PRINT("sys_set_tid_address ( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(long, "set_tid_address", int *, tidptr);
 }
 
@@ -2152,7 +2197,7 @@ POST(sys_tgkill)
 
 PRE(sys_fadvise64)
 {
-   PRINT("sys_fadvise64 ( %ld, %llu, %lu, %ld )",
+   PRINT("sys_fadvise64 ( %ld, %llu, %" FMT_REGWORD "u, %ld )",
          SARG1, MERGE64(ARG2,ARG3), ARG4, SARG5);
    PRE_REG_READ5(long, "fadvise64",
                  int, fd, vki_u32, MERGE64_FIRST(offset), vki_u32, MERGE64_SECOND(offset),
@@ -2178,7 +2223,7 @@ PRE(sys_fadvise64_64)
 
 PRE(sys_io_setup)
 {
-   PRINT("sys_io_setup ( %lu, %#lx )", ARG1,ARG2);
+   PRINT("sys_io_setup ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x )", ARG1,ARG2);
    PRE_REG_READ2(long, "io_setup",
                  unsigned, nr_events, vki_aio_context_t *, ctxp);
    PRE_MEM_WRITE( "io_setup(ctxp)", ARG2, sizeof(vki_aio_context_t) );
@@ -2191,7 +2236,7 @@ POST(sys_io_setup)
            
    size = VG_PGROUNDUP(sizeof(struct vki_aio_ring) +
                        ARG1*sizeof(struct vki_io_event));
-   r = *(struct vki_aio_ring **)ARG2;
+   r = *(struct vki_aio_ring **)(Addr)ARG2;
    vg_assert(ML_(valid_client_addr)((Addr)r, size, tid, "io_setup"));
 
    ML_(notify_core_and_tool_of_mmap)( (Addr)r, size,
@@ -2218,8 +2263,8 @@ PRE(sys_io_destroy)
 
    // If we are going to seg fault (due to a bogus ARG1) do it as late as
    // possible...
-   if (ML_(safe_to_deref)( (void*)ARG1, sizeof(struct vki_aio_ring))) {
-      struct vki_aio_ring *r = (struct vki_aio_ring *)ARG1;
+   if (ML_(safe_to_deref)( (void*)(Addr)ARG1, sizeof(struct vki_aio_ring))) {
+      struct vki_aio_ring *r = (struct vki_aio_ring *)(Addr)ARG1;
       size = VG_PGROUNDUP(sizeof(struct vki_aio_ring) + 
                           r->nr*sizeof(struct vki_io_event));
    }
@@ -2238,7 +2283,8 @@ PRE(sys_io_destroy)
 PRE(sys_io_getevents)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_io_getevents ( %llu, %lld, %lld, %#lx, %#lx )",
+   PRINT("sys_io_getevents ( %llu, %lld, %lld, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x )",
          (ULong)ARG1,(Long)ARG2,(Long)ARG3,ARG4,ARG5);
    PRE_REG_READ5(long, "io_getevents",
                  vki_aio_context_t, ctx_id, long, min_nr, long, nr,
@@ -2258,7 +2304,8 @@ POST(sys_io_getevents)
    if (RES > 0) {
       POST_MEM_WRITE( ARG4, sizeof(struct vki_io_event)*RES );
       for (i = 0; i < RES; i++) {
-         const struct vki_io_event *vev = ((struct vki_io_event *)ARG4) + i;
+         const struct vki_io_event *vev =
+            ((struct vki_io_event *)(Addr)ARG4) + i;
          const struct vki_iocb *cb = (struct vki_iocb *)(Addr)vev->obj;
 
          switch (cb->aio_lio_opcode) {
@@ -2309,14 +2356,15 @@ PRE(sys_io_submit)
 {
    Int i, j;
 
-   PRINT("sys_io_submit ( %lu, %ld, %#lx )", ARG1, SARG2, ARG3);
+   PRINT("sys_io_submit ( %" FMT_REGWORD "u, %ld, %#" FMT_REGWORD "x )",
+         ARG1, SARG2, ARG3);
    PRE_REG_READ3(long, "io_submit",
                  vki_aio_context_t, ctx_id, long, nr,
                  struct iocb **, iocbpp);
    PRE_MEM_READ( "io_submit(iocbpp)", ARG3, ARG2*sizeof(struct vki_iocb *) );
    if (ARG3 != 0) {
       for (i = 0; i < ARG2; i++) {
-         struct vki_iocb *cb = ((struct vki_iocb **)ARG3)[i];
+         struct vki_iocb *cb = ((struct vki_iocb **)(Addr)ARG3)[i];
          struct vki_iovec *iov;
 
          PRE_MEM_READ( "io_submit(iocb)", (Addr)cb, sizeof(struct vki_iocb) );
@@ -2360,7 +2408,8 @@ PRE(sys_io_submit)
 
 PRE(sys_io_cancel)
 {
-   PRINT("sys_io_cancel ( %llu, %#lx, %#lx )", (ULong)ARG1,ARG2,ARG3);
+   PRINT("sys_io_cancel ( %llu, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+         (ULong)ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "io_cancel",
                  vki_aio_context_t, ctx_id, struct iocb *, iocb,
                  struct io_event *, result);
@@ -2378,7 +2427,9 @@ POST(sys_io_cancel)
 
 PRE(sys_mbind)
 {
-   PRINT("sys_mbind ( %#lx, %lu, %lu, %#lx, %lu, %lu )", ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
+   PRINT("sys_mbind ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %" FMT_REGWORD
+         "u, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %" FMT_REGWORD "u )",
+         ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(long, "mbind",
                  unsigned long, start, unsigned long, len,
                  unsigned long, policy, unsigned long *, nodemask,
@@ -2390,7 +2441,8 @@ PRE(sys_mbind)
 
 PRE(sys_set_mempolicy)
 {
-   PRINT("sys_set_mempolicy ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
+   PRINT("sys_set_mempolicy ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )",
+         SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "set_mempolicy",
                  int, policy, unsigned long *, nodemask,
                  unsigned long, maxnode);
@@ -2400,7 +2452,9 @@ PRE(sys_set_mempolicy)
 
 PRE(sys_get_mempolicy)
 {
-   PRINT("sys_get_mempolicy ( %#lx, %#lx, %lu, %#lx, %lx )", ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRINT("sys_get_mempolicy ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %"
+         FMT_REGWORD "u, %#" FMT_REGWORD "x, %" FMT_REGWORD "x )",
+         ARG1, ARG2, ARG3, ARG4, ARG5);
    PRE_REG_READ5(long, "get_mempolicy",
                  int *, policy, unsigned long *, nodemask,
                  unsigned long, maxnode, unsigned long, addr,
@@ -2425,7 +2479,8 @@ POST(sys_get_mempolicy)
 
 PRE(sys_fanotify_init)
 {
-   PRINT("sys_fanotify_init ( %lu, %lu )", ARG1,ARG2);
+   PRINT("sys_fanotify_init ( %" FMT_REGWORD "u, %" FMT_REGWORD "u )",
+         ARG1, ARG2);
    PRE_REG_READ2(long, "fanotify_init",
                  unsigned int, flags, unsigned int, event_f_flags);
 }
@@ -2445,8 +2500,9 @@ POST(sys_fanotify_init)
 PRE(sys_fanotify_mark)
 {
 #if VG_WORDSIZE == 4
-   PRINT( "sys_fanotify_mark ( %ld, %lu, %llu, %ld, %#lx(%s))", 
-          SARG1, ARG2, MERGE64(ARG3,ARG4), SARG5, ARG6, (HChar *)ARG6);
+   PRINT( "sys_fanotify_mark ( %ld, %" FMT_REGWORD "u, %llu, %ld, %#"
+          FMT_REGWORD "x(%s))", SARG1, ARG2, MERGE64(ARG3,ARG4), SARG5, ARG6,
+          (HChar *)(Addr)ARG6);
    PRE_REG_READ6(long, "sys_fanotify_mark", 
                  int, fanotify_fd, unsigned int, flags,
                  __vki_u32, mask0, __vki_u32, mask1,
@@ -2455,7 +2511,7 @@ PRE(sys_fanotify_mark)
       PRE_MEM_RASCIIZ( "fanotify_mark(path)", ARG6);
 #elif VG_WORDSIZE == 8
    PRINT( "sys_fanotify_mark ( %ld, %lu, %lu, %ld, %#lx(%s))", 
-          SARG1, ARG2, ARG3, SARG4, ARG5, (HChar *)ARG5);
+          SARG1, ARG2, ARG3, SARG4, ARG5, (HChar *)(Addr)ARG5);
    PRE_REG_READ5(long, "sys_fanotify_mark", 
                  int, fanotify_fd, unsigned int, flags,
                  __vki_u64, mask,
@@ -2508,14 +2564,15 @@ POST(sys_inotify_init1)
 
 PRE(sys_inotify_add_watch)
 {
-   PRINT( "sys_inotify_add_watch ( %ld, %#lx, %lx )", SARG1, ARG2, ARG3);
+   PRINT( "sys_inotify_add_watch ( %ld, %#" FMT_REGWORD "x, %"
+           FMT_REGWORD "x )", SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "inotify_add_watch", int, fd, char *, path, int, mask);
    PRE_MEM_RASCIIZ( "inotify_add_watch(path)", ARG2 );
 }
 
 PRE(sys_inotify_rm_watch)
 {
-   PRINT( "sys_inotify_rm_watch ( %ld, %lx )", SARG1, ARG2);
+   PRINT( "sys_inotify_rm_watch ( %ld, %" FMT_REGWORD "x )", SARG1, ARG2);
    PRE_REG_READ2(long, "inotify_rm_watch", int, fd, int, wd);
 }
 
@@ -2525,14 +2582,14 @@ PRE(sys_inotify_rm_watch)
 
 PRE(sys_mq_open)
 {
-   PRINT("sys_mq_open( %#lx(%s), %ld, %lu, %#lx )",
-         ARG1, (HChar*)ARG1, SARG2, ARG3, ARG4);
+   PRINT("sys_mq_open( %#" FMT_REGWORD "x(%s), %ld, %" FMT_REGWORD "u, %#"
+         FMT_REGWORD "x )", ARG1, (HChar*)(Addr)ARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "mq_open",
                  const char *, name, int, oflag, vki_mode_t, mode,
                  struct mq_attr *, attr);
    PRE_MEM_RASCIIZ( "mq_open(name)", ARG1 );
    if ((ARG2 & VKI_O_CREAT) != 0 && ARG4 != 0) {
-      const struct vki_mq_attr *attr = (struct vki_mq_attr *)ARG4;
+      const struct vki_mq_attr *attr = (struct vki_mq_attr *)(Addr)ARG4;
       PRE_MEM_READ( "mq_open(attr->mq_maxmsg)",
                      (Addr)&attr->mq_maxmsg, sizeof(attr->mq_maxmsg) );
       PRE_MEM_READ( "mq_open(attr->mq_msgsize)",
@@ -2547,13 +2604,13 @@ POST(sys_mq_open)
       SET_STATUS_Failure( VKI_EMFILE );
    } else {
       if (VG_(clo_track_fds))
-         ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)ARG1);
+         ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)(Addr)ARG1);
    }
 }
 
 PRE(sys_mq_unlink)
 {
-   PRINT("sys_mq_unlink ( %#lx(%s) )", ARG1,(char*)ARG1);
+   PRINT("sys_mq_unlink ( %#" FMT_REGWORD "x(%s) )", ARG1,(char*)(Addr)ARG1);
    PRE_REG_READ1(long, "mq_unlink", const char *, name);
    PRE_MEM_RASCIIZ( "mq_unlink(name)", ARG1 );
 }
@@ -2561,7 +2618,8 @@ PRE(sys_mq_unlink)
 PRE(sys_mq_timedsend)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_mq_timedsend ( %ld, %#lx, %lu, %lu, %#lx )",
+   PRINT("sys_mq_timedsend ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u, %#" FMT_REGWORD "x )",
          SARG1,ARG2,ARG3,ARG4,ARG5);
    PRE_REG_READ5(long, "mq_timedsend",
                  vki_mqd_t, mqdes, const char *, msg_ptr, vki_size_t, msg_len,
@@ -2579,7 +2637,8 @@ PRE(sys_mq_timedsend)
 PRE(sys_mq_timedreceive)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_mq_timedreceive( %ld, %#lx, %lu, %#lx, %#lx )",
+   PRINT("sys_mq_timedreceive( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %#"
+         FMT_REGWORD "x, %#" FMT_REGWORD "x )",
          SARG1,ARG2,ARG3,ARG4,ARG5);
    PRE_REG_READ5(ssize_t, "mq_timedreceive",
                  vki_mqd_t, mqdes, char *, msg_ptr, vki_size_t, msg_len,
@@ -2606,7 +2665,7 @@ POST(sys_mq_timedreceive)
 
 PRE(sys_mq_notify)
 {
-   PRINT("sys_mq_notify( %ld, %#lx )", SARG1, ARG2 );
+   PRINT("sys_mq_notify( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2 );
    PRE_REG_READ2(long, "mq_notify",
                  vki_mqd_t, mqdes, const struct sigevent *, notification);
    if (!ML_(fd_allowed)(ARG1, "mq_notify", tid, False))
@@ -2618,7 +2677,8 @@ PRE(sys_mq_notify)
 
 PRE(sys_mq_getsetattr)
 {
-   PRINT("sys_mq_getsetattr( %ld, %#lx, %#lx )", SARG1,ARG2,ARG3 );
+   PRINT("sys_mq_getsetattr( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+         SARG1, ARG2, ARG3 );
    PRE_REG_READ3(long, "mq_getsetattr",
                  vki_mqd_t, mqdes, const struct mq_attr *, mqstat,
                  struct mq_attr *, omqstat);
@@ -2626,7 +2686,7 @@ PRE(sys_mq_getsetattr)
       SET_STATUS_Failure( VKI_EBADF );
    } else {
       if (ARG2 != 0) {
-         const struct vki_mq_attr *attr = (struct vki_mq_attr *)ARG2;
+         const struct vki_mq_attr *attr = (struct vki_mq_attr *)(Addr)ARG2;
          PRE_MEM_READ( "mq_getsetattr(mqstat->mq_flags)",
                         (Addr)&attr->mq_flags, sizeof(attr->mq_flags) );
       }
@@ -2647,7 +2707,7 @@ POST(sys_mq_getsetattr)
 
 PRE(sys_clock_settime)
 {
-   PRINT("sys_clock_settime( %ld, %#lx )", SARG1, ARG2);
+   PRINT("sys_clock_settime( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2);
    PRE_REG_READ2(long, "clock_settime", 
                  vki_clockid_t, clk_id, const struct timespec *, tp);
    PRE_MEM_READ( "clock_settime(tp)", ARG2, sizeof(struct vki_timespec) );
@@ -2655,7 +2715,7 @@ PRE(sys_clock_settime)
 
 PRE(sys_clock_gettime)
 {
-   PRINT("sys_clock_gettime( %ld, %#lx )" , SARG1, ARG2);
+   PRINT("sys_clock_gettime( %ld, %#" FMT_REGWORD "x )" , SARG1, ARG2);
    PRE_REG_READ2(long, "clock_gettime", 
                  vki_clockid_t, clk_id, struct timespec *, tp);
    PRE_MEM_WRITE( "clock_gettime(tp)", ARG2, sizeof(struct vki_timespec) );
@@ -2667,7 +2727,7 @@ POST(sys_clock_gettime)
 
 PRE(sys_clock_getres)
 {
-   PRINT("sys_clock_getres( %ld, %#lx )" , SARG1, ARG2);
+   PRINT("sys_clock_getres( %ld, %#" FMT_REGWORD "x )" , SARG1, ARG2);
    // Nb: we can't use "RES" as the param name because that's a macro
    // defined above!
    PRE_REG_READ2(long, "clock_getres", 
@@ -2684,7 +2744,8 @@ POST(sys_clock_getres)
 PRE(sys_clock_nanosleep)
 {
    *flags |= SfMayBlock|SfPostOnFail;
-   PRINT("sys_clock_nanosleep( %ld, %ld, %#lx, %#lx )",
+   PRINT("sys_clock_nanosleep( %ld, %ld, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x )",
          SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(int32_t, "clock_nanosleep",
                  vki_clockid_t, clkid, int, flags,
@@ -2705,12 +2766,13 @@ POST(sys_clock_nanosleep)
 
 PRE(sys_timer_create)
 {
-   PRINT("sys_timer_create( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+   PRINT("sys_timer_create( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+         SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "timer_create",
                  vki_clockid_t, clockid, struct sigevent *, evp,
                  vki_timer_t *, timerid);
    if (ARG2 != 0) {
-      struct vki_sigevent *evp = (struct vki_sigevent *) ARG2;
+      struct vki_sigevent *evp = (struct vki_sigevent *) (Addr)ARG2;
       PRE_MEM_READ( "timer_create(evp.sigev_value)", (Addr)&evp->sigev_value,
                     sizeof(vki_sigval_t) );
       PRE_MEM_READ( "timer_create(evp.sigev_signo)", (Addr)&evp->sigev_signo,
@@ -2731,7 +2793,8 @@ POST(sys_timer_create)
 
 PRE(sys_timer_settime)
 {
-   PRINT("sys_timer_settime( %ld, %ld, %#lx, %#lx )", SARG1,SARG2,ARG3,ARG4);
+   PRINT("sys_timer_settime( %ld, %ld, %#" FMT_REGWORD "x, %#"
+          FMT_REGWORD "x )", SARG1,SARG2,ARG3,ARG4);
    PRE_REG_READ4(long, "timer_settime", 
                  vki_timer_t, timerid, int, flags,
                  const struct itimerspec *, value,
@@ -2750,7 +2813,7 @@ POST(sys_timer_settime)
 
 PRE(sys_timer_gettime)
 {
-   PRINT("sys_timer_gettime( %ld, %#lx )", SARG1, ARG2);
+   PRINT("sys_timer_gettime( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2);
    PRE_REG_READ2(long, "timer_gettime", 
                  vki_timer_t, timerid, struct itimerspec *, value);
    PRE_MEM_WRITE( "timer_gettime(value)", ARG2,
@@ -2763,13 +2826,13 @@ POST(sys_timer_gettime)
 
 PRE(sys_timer_getoverrun)
 {
-   PRINT("sys_timer_getoverrun( %#lx )", ARG1);
+   PRINT("sys_timer_getoverrun( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(long, "timer_getoverrun", vki_timer_t, timerid);
 }
 
 PRE(sys_timer_delete)
 {
-   PRINT("sys_timer_delete( %#lx )", ARG1);
+   PRINT("sys_timer_delete( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(long, "timer_delete", vki_timer_t, timerid);
 }
 
@@ -2810,7 +2873,7 @@ PRE(sys_timerfd_create)
 {
    if (linux_kernel_2_6_22()) {
       /* 2.6.22 kernel: timerfd system call. */
-      PRINT("sys_timerfd ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+      PRINT("sys_timerfd ( %ld, %ld, %#" FMT_REGWORD "x )", SARG1, SARG2, ARG3);
       PRE_REG_READ3(long, "sys_timerfd",
                     int, fd, int, clockid, const struct itimerspec *, tmr);
       PRE_MEM_READ("timerfd(tmr)", ARG3,
@@ -2851,7 +2914,7 @@ POST(sys_timerfd_create)
 
 PRE(sys_timerfd_gettime)
 {
-   PRINT("sys_timerfd_gettime ( %ld, %#lx )", SARG1, ARG2);
+   PRINT("sys_timerfd_gettime ( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2);
    PRE_REG_READ2(long, "timerfd_gettime",
                  int, ufd,
                  struct vki_itimerspec*, otmr);
@@ -2869,8 +2932,8 @@ POST(sys_timerfd_gettime)
 
 PRE(sys_timerfd_settime)
 {
-   PRINT("sys_timerfd_settime ( %ld, %ld, %#lx, %#lx )",
-         SARG1, SARG2, ARG3, ARG4);
+   PRINT("sys_timerfd_settime ( %ld, %ld, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x )", SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "timerfd_settime",
                  int, ufd,
                  int, flags,
@@ -2901,7 +2964,7 @@ POST(sys_timerfd_settime)
 
 PRE(sys_capget)
 {
-   PRINT("sys_capget ( %#lx, %#lx )", ARG1, ARG2 );
+   PRINT("sys_capget ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", ARG1, ARG2 );
    PRE_REG_READ2(long, "capget", 
                  vki_cap_user_header_t, header, vki_cap_user_data_t, data);
    PRE_MEM_READ( "capget(header)", ARG1, 
@@ -2918,7 +2981,7 @@ POST(sys_capget)
 
 PRE(sys_capset)
 {
-   PRINT("sys_capset ( %#lx, %#lx )", ARG1, ARG2 );
+   PRINT("sys_capset ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", ARG1, ARG2 );
    PRE_REG_READ2(long, "capset", 
                  vki_cap_user_header_t, header,
                  const vki_cap_user_data_t, data);
@@ -2940,7 +3003,7 @@ PRE(sys_getuid16)
 
 PRE(sys_setuid16)
 {
-   PRINT("sys_setuid16 ( %lu )", ARG1);
+   PRINT("sys_setuid16 ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "setuid16", vki_old_uid_t, uid);
 }
 
@@ -2952,7 +3015,7 @@ PRE(sys_getgid16)
 
 PRE(sys_setgid16)
 {
-   PRINT("sys_setgid16 ( %lu )", ARG1);
+   PRINT("sys_setgid16 ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "setgid16", vki_old_gid_t, gid);
 }
 
@@ -2970,19 +3033,19 @@ PRE(sys_getegid16)
 
 PRE(sys_setreuid16)
 {
-   PRINT("setreuid16 ( 0x%lx, 0x%lx )", ARG1, ARG2);
+   PRINT("setreuid16 ( 0x%" FMT_REGWORD "x, 0x%" FMT_REGWORD "x )", ARG1, ARG2);
    PRE_REG_READ2(long, "setreuid16", vki_old_uid_t, ruid, vki_old_uid_t, euid);
 }
 
 PRE(sys_setregid16)
 {
-   PRINT("sys_setregid16 ( %lu, %lu )", ARG1, ARG2);
+   PRINT("sys_setregid16 ( %" FMT_REGWORD "u, %" FMT_REGWORD "u )", ARG1, ARG2);
    PRE_REG_READ2(long, "setregid16", vki_old_gid_t, rgid, vki_old_gid_t, egid);
 }
 
 PRE(sys_getgroups16)
 {
-   PRINT("sys_getgroups16 ( %ld, %#lx )", SARG1, ARG2);
+   PRINT("sys_getgroups16 ( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2);
    PRE_REG_READ2(long, "getgroups16", int, size, vki_old_gid_t *, list);
    if (ARG1 > 0)
       PRE_MEM_WRITE( "getgroups16(list)", ARG2, ARG1 * sizeof(vki_old_gid_t) );
@@ -2996,7 +3059,7 @@ POST(sys_getgroups16)
 
 PRE(sys_setgroups16)
 {
-   PRINT("sys_setgroups16 ( %llu, %#lx )", (ULong)ARG1, ARG2);
+   PRINT("sys_setgroups16 ( %llu, %#" FMT_REGWORD "x )", (ULong)ARG1, ARG2);
    PRE_REG_READ2(long, "setgroups16", int, size, vki_old_gid_t *, list);
    if (ARG1 > 0)
       PRE_MEM_READ( "setgroups16(list)", ARG2, ARG1 * sizeof(vki_old_gid_t) );
@@ -3008,7 +3071,8 @@ PRE(sys_setgroups16)
 
 PRE(sys_chown16)
 {
-   PRINT("sys_chown16 ( %#lx, 0x%lx, 0x%lx )", ARG1,ARG2,ARG3);
+   PRINT("sys_chown16 ( %#" FMT_REGWORD "x, 0x%" FMT_REGWORD "x, 0x%"
+         FMT_REGWORD "x )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "chown16",
                  const char *, path,
                  vki_old_uid_t, owner, vki_old_gid_t, group);
@@ -3017,7 +3081,8 @@ PRE(sys_chown16)
 
 PRE(sys_fchown16)
 {
-   PRINT("sys_fchown16 ( %lu, %lu, %lu )", ARG1,ARG2,ARG3);
+   PRINT("sys_fchown16 ( %" FMT_REGWORD "u, %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "fchown16",
                  unsigned int, fd, vki_old_uid_t, owner, vki_old_gid_t, group);
 }
@@ -3029,8 +3094,9 @@ PRE(sys_fchown16)
 PRE(sys_setxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_setxattr ( %#lx, %#lx, %#lx, %lu, %ld )",
-         ARG1, ARG2, ARG3, ARG4, SARG5);
+   PRINT("sys_setxattr ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x, %" FMT_REGWORD "u, %ld )", ARG1, ARG2, ARG3,
+         ARG4, SARG5);
    PRE_REG_READ5(long, "setxattr",
                  char *, path, char *, name,
                  void *, value, vki_size_t, size, int, flags);
@@ -3042,7 +3108,8 @@ PRE(sys_setxattr)
 PRE(sys_lsetxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_lsetxattr ( %#lx, %#lx, %#lx, %lu, %ld )",
+   PRINT("sys_lsetxattr ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x, %" FMT_REGWORD "u, %ld )",
          ARG1, ARG2, ARG3, ARG4, SARG5);
    PRE_REG_READ5(long, "lsetxattr",
                  char *, path, char *, name,
@@ -3055,7 +3122,8 @@ PRE(sys_lsetxattr)
 PRE(sys_fsetxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_fsetxattr ( %ld, %#lx, %#lx, %lu, %ld )",
+   PRINT("sys_fsetxattr ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %"
+         FMT_REGWORD "u, %ld )",
          SARG1, ARG2, ARG3, ARG4, SARG5);
    PRE_REG_READ5(long, "fsetxattr",
                  int, fd, char *, name, void *, value,
@@ -3067,7 +3135,8 @@ PRE(sys_fsetxattr)
 PRE(sys_getxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_getxattr ( %#lx, %#lx, %#lx, %llu )", ARG1,ARG2,ARG3, (ULong)ARG4);
+   PRINT("sys_getxattr ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x, %llu )", ARG1, ARG2, ARG3, (ULong)ARG4);
    PRE_REG_READ4(ssize_t, "getxattr",
                  char *, path, char *, name, void *, value, vki_size_t, size);
    PRE_MEM_RASCIIZ( "getxattr(path)", ARG1 );
@@ -3085,7 +3154,8 @@ POST(sys_getxattr)
 PRE(sys_lgetxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_lgetxattr ( %#lx, %#lx, %#lx, %llu )", ARG1,ARG2,ARG3, (ULong)ARG4);
+   PRINT("sys_lgetxattr ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x, %llu )", ARG1, ARG2, ARG3, (ULong)ARG4);
    PRE_REG_READ4(ssize_t, "lgetxattr",
                  char *, path, char *, name, void *, value, vki_size_t, size);
    PRE_MEM_RASCIIZ( "lgetxattr(path)", ARG1 );
@@ -3103,7 +3173,8 @@ POST(sys_lgetxattr)
 PRE(sys_fgetxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_fgetxattr ( %ld, %#lx, %#lx, %lu )", SARG1, ARG2, ARG3, ARG4);
+   PRINT("sys_fgetxattr ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %"
+         FMT_REGWORD "u )", SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(ssize_t, "fgetxattr",
                  int, fd, char *, name, void *, value, vki_size_t, size);
    PRE_MEM_RASCIIZ( "fgetxattr(name)", ARG2 );
@@ -3118,7 +3189,8 @@ POST(sys_fgetxattr)
 PRE(sys_listxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_listxattr ( %#lx, %#lx, %llu )", ARG1, ARG2, (ULong)ARG3);
+   PRINT("sys_listxattr ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %llu )",
+         ARG1, ARG2, (ULong)ARG3);
    PRE_REG_READ3(ssize_t, "listxattr",
                  char *, path, char *, list, vki_size_t, size);
    PRE_MEM_RASCIIZ( "listxattr(path)", ARG1 );
@@ -3133,7 +3205,8 @@ POST(sys_listxattr)
 PRE(sys_llistxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_llistxattr ( %#lx, %#lx, %llu )", ARG1, ARG2, (ULong)ARG3);
+   PRINT("sys_llistxattr ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %llu )",
+         ARG1, ARG2, (ULong)ARG3);
    PRE_REG_READ3(ssize_t, "llistxattr",
                  char *, path, char *, list, vki_size_t, size);
    PRE_MEM_RASCIIZ( "llistxattr(path)", ARG1 );
@@ -3148,7 +3221,8 @@ POST(sys_llistxattr)
 PRE(sys_flistxattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_flistxattr ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
+   PRINT("sys_flistxattr ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )",
+         SARG1, ARG2, ARG3);
    PRE_REG_READ3(ssize_t, "flistxattr",
                  int, fd, char *, list, vki_size_t, size);
    PRE_MEM_WRITE( "flistxattr(list)", ARG2, ARG3 );
@@ -3162,7 +3236,8 @@ POST(sys_flistxattr)
 PRE(sys_removexattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_removexattr ( %#lx, %#lx )", ARG1, ARG2);
+   PRINT("sys_removexattr ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+         ARG1, ARG2);
    PRE_REG_READ2(long, "removexattr", char *, path, char *, name);
    PRE_MEM_RASCIIZ( "removexattr(path)", ARG1 );
    PRE_MEM_RASCIIZ( "removexattr(name)", ARG2 );
@@ -3171,7 +3246,8 @@ PRE(sys_removexattr)
 PRE(sys_lremovexattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_lremovexattr ( %#lx, %#lx )", ARG1, ARG2);
+   PRINT("sys_lremovexattr ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+         ARG1, ARG2);
    PRE_REG_READ2(long, "lremovexattr", char *, path, char *, name);
    PRE_MEM_RASCIIZ( "lremovexattr(path)", ARG1 );
    PRE_MEM_RASCIIZ( "lremovexattr(name)", ARG2 );
@@ -3180,7 +3256,7 @@ PRE(sys_lremovexattr)
 PRE(sys_fremovexattr)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_fremovexattr ( %ld, %#lx )", SARG1, ARG2);
+   PRINT("sys_fremovexattr ( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2);
    PRE_REG_READ2(long, "fremovexattr", int, fd, char *, name);
    PRE_MEM_RASCIIZ( "fremovexattr(name)", ARG2 );
 }
@@ -3191,7 +3267,7 @@ PRE(sys_fremovexattr)
 
 PRE(sys_sched_setparam)
 {
-   PRINT("sched_setparam ( %ld, %#lx )", SARG1, ARG2 );
+   PRINT("sched_setparam ( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2 );
    PRE_REG_READ2(long, "sched_setparam", 
                  vki_pid_t, pid, struct sched_param *, p);
    PRE_MEM_READ( "sched_setparam(p)", ARG2, sizeof(struct vki_sched_param) );
@@ -3203,7 +3279,7 @@ POST(sys_sched_setparam)
 
 PRE(sys_sched_getparam)
 {
-   PRINT("sched_getparam ( %ld, %#lx )", SARG1, ARG2 );
+   PRINT("sched_getparam ( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2 );
    PRE_REG_READ2(long, "sched_getparam", 
                  vki_pid_t, pid, struct sched_param *, p);
    PRE_MEM_WRITE( "sched_getparam(p)", ARG2, sizeof(struct vki_sched_param) );
@@ -3221,7 +3297,8 @@ PRE(sys_sched_getscheduler)
 
 PRE(sys_sched_setscheduler)
 {
-   PRINT("sys_sched_setscheduler ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+   PRINT("sys_sched_setscheduler ( %ld, %ld, %#" FMT_REGWORD "x )",
+         SARG1, SARG2, ARG3);
    PRE_REG_READ3(long, "sched_setscheduler", 
                  vki_pid_t, pid, int, policy, struct sched_param *, p);
    if (ARG3 != 0)
@@ -3250,7 +3327,7 @@ PRE(sys_sched_get_priority_min)
 
 PRE(sys_sched_rr_get_interval)
 {
-   PRINT("sys_sched_rr_get_interval ( %ld, %#lx )", SARG1, ARG2);
+   PRINT("sys_sched_rr_get_interval ( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2);
    PRE_REG_READ2(int, "sched_rr_get_interval",
                  vki_pid_t, pid,
                  struct vki_timespec *, tp);
@@ -3265,7 +3342,8 @@ POST(sys_sched_rr_get_interval)
 
 PRE(sys_sched_setaffinity)
 {
-   PRINT("sched_setaffinity ( %ld, %lu, %#lx )", SARG1, ARG2, ARG3);
+   PRINT("sched_setaffinity ( %ld, %" FMT_REGWORD "u, %#" FMT_REGWORD "x )",
+         SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "sched_setaffinity", 
                  vki_pid_t, pid, unsigned int, len, unsigned long *, mask);
    PRE_MEM_READ( "sched_setaffinity(mask)", ARG3, ARG2);
@@ -3273,7 +3351,8 @@ PRE(sys_sched_setaffinity)
 
 PRE(sys_sched_getaffinity)
 {
-   PRINT("sched_getaffinity ( %ld, %lu, %#lx )", SARG1, ARG2, ARG3);
+   PRINT("sched_getaffinity ( %ld, %" FMT_REGWORD "u, %#" FMT_REGWORD "x )",
+         SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "sched_getaffinity", 
                  vki_pid_t, pid, unsigned int, len, unsigned long *, mask);
    PRE_MEM_WRITE( "sched_getaffinity(mask)", ARG3, ARG2);
@@ -3285,7 +3364,7 @@ POST(sys_sched_getaffinity)
 
 PRE(sys_unshare)
 {
-   PRINT("sys_unshare ( %#lx )", ARG1);
+   PRINT("sys_unshare ( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(int, "unshare", unsigned long, flags);
 }
 
@@ -3314,13 +3393,13 @@ PRE(sys_munlockall)
 // AMD64.
 PRE(sys_pipe)
 {
-   PRINT("sys_pipe ( %#lx )", ARG1);
+   PRINT("sys_pipe ( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(int, "pipe", int *, filedes);
    PRE_MEM_WRITE( "pipe(filedes)", ARG1, 2*sizeof(int) );
 }
 POST(sys_pipe)
 {
-   Int *p = (Int *)ARG1;
+   Int *p = (Int *)(Addr)ARG1;
    if (!ML_(fd_allowed)(p[0], "pipe", tid, True) ||
        !ML_(fd_allowed)(p[1], "pipe", tid, True)) {
       VG_(close)(p[0]);
@@ -3341,13 +3420,13 @@ POST(sys_pipe)
    duplicated code, hence: */
 PRE(sys_pipe2)
 {
-   PRINT("sys_pipe2 ( %#lx, %#lx )", ARG1, ARG2);
+   PRINT("sys_pipe2 ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", ARG1, ARG2);
    PRE_REG_READ2(int, "pipe", int *, filedes, long, flags);
    PRE_MEM_WRITE( "pipe2(filedes)", ARG1, 2*sizeof(int) );
 }
 POST(sys_pipe2)
 {
-   Int *p = (Int *)ARG1;
+   Int *p = (Int *)(Addr)ARG1;
    if (!ML_(fd_allowed)(p[0], "pipe2", tid, True) ||
        !ML_(fd_allowed)(p[1], "pipe2", tid, True)) {
       VG_(close)(p[0]);
@@ -3364,7 +3443,8 @@ POST(sys_pipe2)
 
 PRE(sys_dup3)
 {
-   PRINT("sys_dup3 ( %lu, %lu, %#lx )", ARG1, ARG2, ARG3);
+   PRINT("sys_dup3 ( %" FMT_REGWORD "u, %" FMT_REGWORD "u, %#"
+         FMT_REGWORD "x )", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "dup3", unsigned int, oldfd, unsigned int, newfd, int, flags);
    if (!ML_(fd_allowed)(ARG2, "dup3", tid, True))
       SET_STATUS_Failure( VKI_EBADF );
@@ -3379,7 +3459,8 @@ POST(sys_dup3)
 
 PRE(sys_quotactl)
 {
-   PRINT("sys_quotactl (0x%lx, %#lx, 0x%lx, 0x%lx )", ARG1,ARG2,ARG3, ARG4);
+   PRINT("sys_quotactl (0x%" FMT_REGWORD "x, %#" FMT_REGWORD "x, 0x%"
+         FMT_REGWORD "x, 0x%" FMT_REGWORD "x )", ARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "quotactl",
                  unsigned int, cmd, const char *, special, vki_qid_t, id,
                  void *, addr);
@@ -3389,7 +3470,7 @@ PRE(sys_quotactl)
 PRE(sys_waitid)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_waitid( %ld, %ld, %#lx, %ld, %#lx )",
+   PRINT("sys_waitid( %ld, %ld, %#" FMT_REGWORD "x, %ld, %#" FMT_REGWORD "x )",
          SARG1, SARG2, ARG3, SARG4, ARG5);
    PRE_REG_READ5(int32_t, "sys_waitid",
                  int, which, vki_pid_t, pid, struct vki_siginfo *, infop,
@@ -3409,7 +3490,7 @@ PRE(sys_sync_file_range)
 {
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
-   PRINT("sys_sync_file_range ( %ld, %lld, %lld, %#lx )",
+   PRINT("sys_sync_file_range ( %ld, %lld, %lld, %#" FMT_REGWORD "x )",
          SARG1, (Long)MERGE64(ARG2,ARG3), (Long)MERGE64(ARG4,ARG5),ARG6);
    PRE_REG_READ6(long, "sync_file_range",
                  int, fd,
@@ -3433,7 +3514,7 @@ PRE(sys_sync_file_range2)
 {
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
-   PRINT("sys_sync_file_range2 ( %ld, %lu, %lld, %lld )",
+   PRINT("sys_sync_file_range2 ( %ld, %" FMT_REGWORD "u, %lld, %lld )",
          SARG1, ARG2, (Long)MERGE64(ARG3,ARG4), (Long)MERGE64(ARG5,ARG6));
    PRE_REG_READ6(long, "sync_file_range2",
                  int, fd, unsigned int, flags,
@@ -3454,7 +3535,7 @@ PRE(sys_sync_file_range2)
 
 PRE(sys_stime)
 {
-   PRINT("sys_stime ( %#lx )", ARG1);
+   PRINT("sys_stime ( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(int, "stime", vki_time_t*, t);
    PRE_MEM_READ( "stime(t)", ARG1, sizeof(vki_time_t) );
 }
@@ -3462,13 +3543,13 @@ PRE(sys_stime)
 PRE(sys_perf_event_open)
 {
    struct vki_perf_event_attr *attr;
-   PRINT("sys_perf_event_open ( %#lx, %ld, %ld, %ld, %#lx )",
-         ARG1, SARG2, SARG3, SARG4, ARG5);
+   PRINT("sys_perf_event_open ( %#" FMT_REGWORD "x, %ld, %ld, %ld, %#"
+         FMT_REGWORD "x )", ARG1, SARG2, SARG3, SARG4, ARG5);
    PRE_REG_READ5(long, "perf_event_open",
                  struct vki_perf_event_attr *, attr,
                  vki_pid_t, pid, int, cpu, int, group_fd,
                  unsigned long, flags);
-   attr = (struct vki_perf_event_attr *)ARG1;
+   attr = (struct vki_perf_event_attr *)(Addr)ARG1;
    PRE_MEM_READ( "perf_event_open(attr->size)",
                  (Addr)&attr->size, sizeof(attr->size) );
    PRE_MEM_READ( "perf_event_open(attr)",
@@ -3489,7 +3570,8 @@ POST(sys_perf_event_open)
 
 PRE(sys_getcpu)
 {
-   PRINT("sys_getcpu ( %#lx, %#lx, %#lx )" , ARG1,ARG2,ARG3);
+   PRINT("sys_getcpu ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x )" , ARG1, ARG2, ARG3);
    PRE_REG_READ3(int, "getcpu", 
                  unsigned *, cpu, unsigned *, node, struct vki_getcpu_cache *, tcache);
    if (ARG1 != 0)
@@ -3512,7 +3594,8 @@ POST(sys_getcpu)
 
 PRE(sys_move_pages)
 {
-   PRINT("sys_move_pages ( %ld, %lu, %#lx, %#lx, %#lx, %#lx )",
+   PRINT("sys_move_pages ( %ld, %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
          SARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(int, "move_pages",
                  vki_pid_t, pid, unsigned long, nr_pages, const void **, pages,
@@ -3530,7 +3613,8 @@ POST(sys_move_pages)
 
 PRE(sys_getrandom)
 {
-   PRINT("sys_getrandom ( %#lx, %lu, %lu )" , ARG1, ARG2, ARG3);
+   PRINT("sys_getrandom ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u )" , ARG1, ARG2, ARG3);
    PRE_REG_READ3(int, "getrandom",
                  char *, buf, vki_size_t, count, unsigned int, flags);
    PRE_MEM_WRITE( "getrandom(cpu)", ARG1, ARG2 );
@@ -3543,7 +3627,8 @@ POST(sys_getrandom)
 
 PRE(sys_memfd_create)
 {
-   PRINT("sys_memfd_create ( %#lx, %lu )" , ARG1, ARG2);
+   PRINT("sys_memfd_create ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u )" ,
+         ARG1, ARG2);
    PRE_REG_READ2(int, "memfd_create",
                  char *, uname, unsigned int, flags);
    PRE_MEM_RASCIIZ( "memfd_create(uname)", ARG1 );
@@ -3564,7 +3649,7 @@ POST(sys_memfd_create)
 PRE(sys_syncfs)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_syncfs ( %lu )", ARG1);
+   PRINT("sys_syncfs ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "syncfs", unsigned int, fd);
 }
 
@@ -3575,7 +3660,7 @@ PRE(sys_syncfs)
 PRE(sys_utime)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_utime ( %#lx, %#lx )", ARG1,ARG2);
+   PRINT("sys_utime ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", ARG1,ARG2);
    PRE_REG_READ2(long, "utime", char *, filename, struct utimbuf *, buf);
    PRE_MEM_RASCIIZ( "utime(filename)", ARG1 );
    if (ARG2 != 0)
@@ -3588,7 +3673,8 @@ PRE(sys_utime)
 
 PRE(sys_lseek)
 {
-   PRINT("sys_lseek ( %lu, %ld, %lu )", ARG1, SARG2, ARG3);
+   PRINT("sys_lseek ( %" FMT_REGWORD "u, %ld, %" FMT_REGWORD "u )",
+         ARG1, SARG2, ARG3);
    PRE_REG_READ3(vki_off_t, "lseek",
                  unsigned int, fd, vki_off_t, offset, unsigned int, whence);
 }
@@ -3601,7 +3687,7 @@ PRE(sys_readahead)
 {
    *flags |= SfMayBlock;
 #if VG_WORDSIZE == 4
-   PRINT("sys_readahead ( %ld, %lld, %lu )",
+   PRINT("sys_readahead ( %ld, %lld, %" FMT_REGWORD "u )",
          SARG1, (Long)MERGE64(ARG2,ARG3), ARG4);
    PRE_REG_READ4(vki_off_t, "readahead",
                  int, fd, unsigned, MERGE64_FIRST(offset),
@@ -3623,7 +3709,7 @@ PRE(sys_readahead)
 
 PRE(sys_sigpending)
 {
-   PRINT( "sys_sigpending ( %#lx )", ARG1 );
+   PRINT( "sys_sigpending ( %#" FMT_REGWORD "x )", ARG1 );
    PRE_REG_READ1(long, "sigpending", vki_old_sigset_t *, set);
    PRE_MEM_WRITE( "sigpending(set)", ARG1, sizeof(vki_old_sigset_t));
 }
@@ -3656,8 +3742,8 @@ PRE(sys_sigprocmask)
 
    // Nb: We must convert the smaller vki_old_sigset_t params into bigger
    // vki_sigset_t params.
-   set    = (vki_old_sigset_t*)ARG2;
-   oldset = (vki_old_sigset_t*)ARG3;
+   set    = (vki_old_sigset_t*)(Addr)ARG2;
+   oldset = (vki_old_sigset_t*)(Addr)ARG3;
 
    VG_(memset)(&bigger_set,    0, sizeof(vki_sigset_t));
    VG_(memset)(&bigger_oldset, 0, sizeof(vki_sigset_t));
@@ -3703,7 +3789,7 @@ PRE(sys_sigaction)
    newp = oldp = NULL;
 
    if (ARG2 != 0) {
-      struct vki_old_sigaction *sa = (struct vki_old_sigaction *)ARG2;
+      struct vki_old_sigaction *sa = (struct vki_old_sigaction *)(Addr)ARG2;
       PRE_MEM_READ( "sigaction(act->sa_handler)", (Addr)&sa->ksa_handler, sizeof(sa->ksa_handler));
       PRE_MEM_READ( "sigaction(act->sa_mask)", (Addr)&sa->sa_mask, sizeof(sa->sa_mask));
       PRE_MEM_READ( "sigaction(act->sa_flags)", (Addr)&sa->sa_flags, sizeof(sa->sa_flags));
@@ -3721,20 +3807,21 @@ PRE(sys_sigaction)
       aren't accessible then sigaction returns EFAULT and we cannot
       use either struct for our own bookkeeping. Just fail early. */
    if (ARG2 != 0
-       && ! ML_(safe_to_deref)((void *)ARG2,
+       && ! ML_(safe_to_deref)((void *)(Addr)ARG2,
                                sizeof(struct vki_old_sigaction))) {
       VG_(umsg)("Warning: bad act handler address %p in sigaction()\n",
-                (void *)ARG2);
+                (void *)(Addr)ARG2);
       SET_STATUS_Failure ( VKI_EFAULT );
    } else if ((ARG3 != 0
-               && ! ML_(safe_to_deref)((void *)ARG3,
+               && ! ML_(safe_to_deref)((void *)(Addr)ARG3,
                                        sizeof(struct vki_old_sigaction)))) {
       VG_(umsg)("Warning: bad oldact handler address %p in sigaction()\n",
-                (void *)ARG3);
+                (void *)(Addr)ARG3);
       SET_STATUS_Failure ( VKI_EFAULT );
    } else {
       if (ARG2 != 0) {
-         struct vki_old_sigaction *oldnew = (struct vki_old_sigaction *)ARG2;
+         struct vki_old_sigaction *oldnew =
+            (struct vki_old_sigaction *)(Addr)ARG2;
 
          new.ksa_handler = oldnew->ksa_handler;
          new.sa_flags = oldnew->sa_flags;
@@ -3746,7 +3833,8 @@ PRE(sys_sigaction)
       SET_STATUS_from_SysRes( VG_(do_sys_sigaction)(ARG1, newp, oldp) );
 
       if (ARG3 != 0 && SUCCESS && RES == 0) {
-         struct vki_old_sigaction *oldold = (struct vki_old_sigaction *)ARG3;
+         struct vki_old_sigaction *oldold =
+            (struct vki_old_sigaction *)(Addr)ARG3;
 
          oldold->ksa_handler = oldp->ksa_handler;
          oldold->sa_flags = oldp->sa_flags;
@@ -3765,7 +3853,8 @@ POST(sys_sigaction)
 
 PRE(sys_signalfd)
 {
-   PRINT("sys_signalfd ( %d, %#lx, %llu )", (Int)ARG1,ARG2,(ULong)ARG3);
+   PRINT("sys_signalfd ( %d, %#" FMT_REGWORD "x, %llu )", (Int)ARG1, ARG2,
+         (ULong)ARG3);
    PRE_REG_READ3(long, "sys_signalfd",
                  int, fd, vki_sigset_t *, sigmask, vki_size_t, sigsetsize);
    PRE_MEM_READ( "signalfd(sigmask)", ARG2, sizeof(vki_sigset_t) );
@@ -3785,7 +3874,8 @@ POST(sys_signalfd)
 
 PRE(sys_signalfd4)
 {
-   PRINT("sys_signalfd4 ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRINT("sys_signalfd4 ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %ld )",
+         SARG1, ARG2, ARG3, SARG4);
    PRE_REG_READ4(long, "sys_signalfd4",
                  int, fd, vki_sigset_t *, sigmask, vki_size_t, sigsetsize, int, flags);
    PRE_MEM_READ( "signalfd(sigmask)", ARG2, sizeof(vki_sigset_t) );
@@ -3810,13 +3900,14 @@ POST(sys_signalfd4)
 
 PRE(sys_rt_sigaction)
 {
-   PRINT("sys_rt_sigaction ( %ld, %#lx, %#lx, %lu )", SARG1, ARG2, ARG3, ARG4);
+   PRINT("sys_rt_sigaction ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %"
+         FMT_REGWORD "u )", SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "rt_sigaction",
                  int, signum, const struct sigaction *, act,
                  struct sigaction *, oldact, vki_size_t, sigsetsize);
 
    if (ARG2 != 0) {
-      vki_sigaction_toK_t *sa = (vki_sigaction_toK_t *)ARG2;
+      vki_sigaction_toK_t *sa = (vki_sigaction_toK_t *)(Addr)ARG2;
       PRE_MEM_READ( "rt_sigaction(act->sa_handler)", (Addr)&sa->ksa_handler, sizeof(sa->ksa_handler));
       PRE_MEM_READ( "rt_sigaction(act->sa_mask)", (Addr)&sa->sa_mask, sizeof(sa->sa_mask));
       PRE_MEM_READ( "rt_sigaction(act->sa_flags)", (Addr)&sa->sa_flags, sizeof(sa->sa_flags));
@@ -3831,16 +3922,16 @@ PRE(sys_rt_sigaction)
       aren't accessible then sigaction returns EFAULT and we cannot
       use either struct for our own bookkeeping. Just fail early. */
    if (ARG2 != 0
-       && ! ML_(safe_to_deref)((void *)ARG2,
+       && ! ML_(safe_to_deref)((void *)(Addr)ARG2,
                                sizeof(vki_sigaction_toK_t))) {
       VG_(umsg)("Warning: bad act handler address %p in rt_sigaction()\n",
-                (void *)ARG2);
+                (void *)(Addr)ARG2);
       SET_STATUS_Failure ( VKI_EFAULT );
    } else if ((ARG3 != 0
-               && ! ML_(safe_to_deref)((void *)ARG3,
+               && ! ML_(safe_to_deref)((void *)(Addr)ARG3,
                                        sizeof(vki_sigaction_fromK_t)))) {
       VG_(umsg)("Warning: bad oldact handler address %p in rt_sigaction()\n",
-                (void *)ARG3);
+                (void *)(Addr)ARG3);
       SET_STATUS_Failure ( VKI_EFAULT );
    } else {
 
@@ -3849,8 +3940,8 @@ PRE(sys_rt_sigaction)
       // VG_(do_sys_rt_sigaction)()  --njn
 
       SET_STATUS_from_SysRes(
-         VG_(do_sys_sigaction)(ARG1, (const vki_sigaction_toK_t *)ARG2,
-                               (vki_sigaction_fromK_t *)ARG3)
+         VG_(do_sys_sigaction)(ARG1, (const vki_sigaction_toK_t *)(Addr)ARG2,
+                               (vki_sigaction_fromK_t *)(Addr)ARG3)
       );
    }
 }
@@ -3863,8 +3954,8 @@ POST(sys_rt_sigaction)
 
 PRE(sys_rt_sigprocmask)
 {
-   PRINT("sys_rt_sigprocmask ( %ld, %#lx, %#lx, %lu )",
-         SARG1, ARG2, ARG3, ARG4);
+   PRINT("sys_rt_sigprocmask ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %"
+         FMT_REGWORD "u )", SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "rt_sigprocmask", 
                  int, how, vki_sigset_t *, set, vki_sigset_t *, oldset,
                  vki_size_t, sigsetsize);
@@ -3879,23 +3970,23 @@ PRE(sys_rt_sigprocmask)
    if (sizeof(vki_sigset_t) != ARG4)
       SET_STATUS_Failure( VKI_EINVAL );
    else if (ARG2 != 0
-             && ! ML_(safe_to_deref)((void *)ARG2, sizeof(vki_sigset_t))) {
+             && ! ML_(safe_to_deref)((void *)(Addr)ARG2, sizeof(vki_sigset_t))) {
             VG_(dmsg)("Warning: Bad set handler address %p in sigprocmask\n",
-                      (void *)ARG2);
+                      (void *)(Addr)ARG2);
             SET_STATUS_Failure ( VKI_EFAULT );
          }
    else if (ARG3 != 0
-             && ! ML_(safe_to_deref)((void *)ARG3, sizeof(vki_sigset_t))) {
+             && ! ML_(safe_to_deref)((void *)(Addr)ARG3, sizeof(vki_sigset_t))) {
             VG_(dmsg)("Warning: Bad oldset address %p in sigprocmask\n",
-                      (void *)ARG3);
+                      (void *)(Addr)ARG3);
             SET_STATUS_Failure ( VKI_EFAULT );
          }
 
    else {
       SET_STATUS_from_SysRes( 
                   VG_(do_sys_sigprocmask) ( tid, ARG1 /*how*/, 
-                                            (vki_sigset_t*) ARG2,
-                                            (vki_sigset_t*) ARG3 )
+                                            (vki_sigset_t*) (Addr)ARG2,
+                                            (vki_sigset_t*) (Addr)ARG3 )
       );
    }
 
@@ -3911,7 +4002,7 @@ POST(sys_rt_sigprocmask)
 
 PRE(sys_rt_sigpending)
 {
-   PRINT( "sys_rt_sigpending ( %#lx )", ARG1 );
+   PRINT( "sys_rt_sigpending ( %#" FMT_REGWORD "x )", ARG1 );
    PRE_REG_READ2(long, "rt_sigpending", 
                  vki_sigset_t *, set, vki_size_t, sigsetsize);
    PRE_MEM_WRITE( "rt_sigpending(set)", ARG1, sizeof(vki_sigset_t));
@@ -3924,7 +4015,8 @@ POST(sys_rt_sigpending)
 PRE(sys_rt_sigtimedwait)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_rt_sigtimedwait ( %#lx, %#lx, %#lx, %lu )",
+   PRINT("sys_rt_sigtimedwait ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#"
+         FMT_REGWORD "x, %" FMT_REGWORD "u )",
          ARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "rt_sigtimedwait", 
                  const vki_sigset_t *, set, vki_siginfo_t *, info,
@@ -3945,7 +4037,8 @@ POST(sys_rt_sigtimedwait)
 
 PRE(sys_rt_sigqueueinfo)
 {
-   PRINT("sys_rt_sigqueueinfo(%ld, %ld, %#lx)", SARG1, SARG2, ARG3);
+   PRINT("sys_rt_sigqueueinfo(%ld, %ld, %#" FMT_REGWORD "x)",
+         SARG1, SARG2, ARG3);
    PRE_REG_READ3(long, "rt_sigqueueinfo", 
                  int, pid, int, sig, vki_siginfo_t *, uinfo);
    if (ARG2 != 0)
@@ -3959,7 +4052,7 @@ POST(sys_rt_sigqueueinfo)
 
 PRE(sys_rt_tgsigqueueinfo)
 {
-   PRINT("sys_rt_tgsigqueueinfo(%ld, %ld, %ld, %#lx)",
+   PRINT("sys_rt_tgsigqueueinfo(%ld, %ld, %ld, %#" FMT_REGWORD "x)",
          SARG1, SARG2, SARG3, ARG4);
    PRE_REG_READ4(long, "rt_tgsigqueueinfo",
                  int, tgid, int, pid, int, sig, vki_siginfo_t *, uinfo);
@@ -3984,12 +4077,13 @@ PRE(sys_rt_sigsuspend)
       return EINVAL if it isn't.
     */
    *flags |= SfMayBlock;
-   PRINT("sys_rt_sigsuspend ( %#lx, %lu )", ARG1, ARG2 );
+   PRINT("sys_rt_sigsuspend ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u )",
+         ARG1, ARG2 );
    PRE_REG_READ2(int, "rt_sigsuspend", vki_sigset_t *, mask, vki_size_t, size)
    if (ARG1 != (Addr)NULL) {
       PRE_MEM_READ( "rt_sigsuspend(mask)", ARG1, sizeof(vki_sigset_t) );
-      if (ML_(safe_to_deref)((vki_sigset_t *) ARG1, sizeof(vki_sigset_t))) {
-         VG_(sigdelset)((vki_sigset_t *) ARG1, VG_SIGVGKILL);
+      if (ML_(safe_to_deref)((vki_sigset_t *) (Addr)ARG1, sizeof(vki_sigset_t))) {
+         VG_(sigdelset)((vki_sigset_t *) (Addr)ARG1, VG_SIGVGKILL);
          /* We cannot mask VG_SIGVGKILL, as otherwise this thread would not
             be killable by VG_(nuke_all_threads_except).
             We thus silently ignore the user request to mask this signal.
@@ -4176,10 +4270,10 @@ PRE(sys_ipc)
       Addr msgp;
       Word msgtyp;
  
-      msgp = deref_Addr( tid, (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
+      msgp = deref_Addr( tid, (Addr) (&((struct vki_ipc_kludge *)(Addr)ARG5)->msgp),
                          "msgrcv(msgp)" );
       msgtyp = deref_Addr( tid, 
-                           (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgtyp),
+                           (Addr) (&((struct vki_ipc_kludge *)(Addr)ARG5)->msgtyp),
                            "msgrcv(msgp)" );
 
       ML_(linux_PRE_sys_msgrcv)( tid, ARG2, msgp, ARG3, msgtyp, ARG4 );
@@ -4270,10 +4364,10 @@ POST(sys_ipc)
       Word msgtyp;
 
       msgp = deref_Addr( tid,
-                        (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
+                        (Addr) (&((struct vki_ipc_kludge *)(Addr)ARG5)->msgp),
                         "msgrcv(msgp)" );
       msgtyp = deref_Addr( tid,
-                          (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgtyp),
+                          (Addr) (&((struct vki_ipc_kludge *)(Addr)ARG5)->msgtyp),
                           "msgrcv(msgp)" );
 
       ML_(linux_POST_sys_msgrcv)( tid, RES, ARG2, msgp, ARG3, msgtyp, ARG4 );
@@ -4324,7 +4418,8 @@ PRE(sys_semget)
 PRE(sys_semop)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_semop ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
+   PRINT("sys_semop ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )",
+         SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "semop",
                  int, semid, struct sembuf *, sops, unsigned, nsoops);
    ML_(generic_PRE_sys_semop)(tid, ARG1,ARG2,ARG3);
@@ -4335,20 +4430,23 @@ PRE(sys_semctl)
    switch (ARG3 & ~VKI_IPC_64) {
    case VKI_IPC_INFO:
    case VKI_SEM_INFO:
-      PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
+      PRINT("sys_semctl ( %ld, %ld, %ld, %#" FMT_REGWORD "x )", SARG1, SARG2,
+            SARG3, ARG4);
       PRE_REG_READ4(long, "semctl",
                     int, semid, int, semnum, int, cmd, struct seminfo *, arg);
       break;
    case VKI_IPC_STAT:
    case VKI_SEM_STAT:
    case VKI_IPC_SET:
-      PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
+      PRINT("sys_semctl ( %ld, %ld, %ld, %#" FMT_REGWORD "x )", SARG1, SARG2,
+            SARG3, ARG4);
       PRE_REG_READ4(long, "semctl",
                     int, semid, int, semnum, int, cmd, struct semid_ds *, arg);
       break;
    case VKI_GETALL:
    case VKI_SETALL:
-      PRINT("sys_semctl ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
+      PRINT("sys_semctl ( %ld, %ld, %ld, %#" FMT_REGWORD "x )", SARG1, SARG2,
+            SARG3, ARG4);
       PRE_REG_READ4(long, "semctl",
                     int, semid, int, semnum, int, cmd, unsigned short *, arg);
       break;
@@ -4377,7 +4475,8 @@ POST(sys_semctl)
 PRE(sys_semtimedop)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_semtimedop ( %ld, %#lx, %lu, %#lx )", SARG1, ARG2, ARG3, ARG4);
+   PRINT("sys_semtimedop ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %#"
+         FMT_REGWORD "x )", SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "semtimedop",
                  int, semid, struct sembuf *, sops, unsigned, nsoops,
                  struct timespec *, timeout);
@@ -4392,7 +4491,8 @@ PRE(sys_msgget)
 
 PRE(sys_msgsnd)
 {
-   PRINT("sys_msgsnd ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRINT("sys_msgsnd ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %ld )",
+         SARG1, ARG2, ARG3, SARG4);
    PRE_REG_READ4(long, "msgsnd",
                  int, msqid, struct msgbuf *, msgp, vki_size_t, msgsz, int, msgflg);
    ML_(linux_PRE_sys_msgsnd)(tid, ARG1,ARG2,ARG3,ARG4);
@@ -4402,7 +4502,7 @@ PRE(sys_msgsnd)
 
 PRE(sys_msgrcv)
 {
-   PRINT("sys_msgrcv ( %ld, %#lx, %lu, %ld, %ld )",
+   PRINT("sys_msgrcv ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %ld, %ld )",
          SARG1, ARG2, ARG3, SARG4, SARG5);
    PRE_REG_READ5(long, "msgrcv",
                  int, msqid, struct msgbuf *, msgp, vki_size_t, msgsz,
@@ -4418,7 +4518,7 @@ POST(sys_msgrcv)
 
 PRE(sys_msgctl)
 {
-   PRINT("sys_msgctl ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+   PRINT("sys_msgctl ( %ld, %ld, %#" FMT_REGWORD "x )", SARG1, SARG2, ARG3);
    PRE_REG_READ3(long, "msgctl",
                  int, msqid, int, cmd, struct msqid_ds *, buf);
    ML_(linux_PRE_sys_msgctl)(tid, ARG1,ARG2,ARG3);
@@ -4431,7 +4531,7 @@ POST(sys_msgctl)
 
 PRE(sys_shmget)
 {
-   PRINT("sys_shmget ( %ld, %lu, %ld )", SARG1, ARG2, SARG3);
+   PRINT("sys_shmget ( %ld, %" FMT_REGWORD "u, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "shmget", vki_key_t, key, vki_size_t, size, int, shmflg);
    if (ARG3 & VKI_SHM_HUGETLB) {
       static Bool warning_given = False;
@@ -4447,7 +4547,7 @@ PRE(sys_shmget)
 PRE(sys_shmat)
 {
    UWord arg2tmp;
-   PRINT("sys_shmat ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+   PRINT("sys_shmat ( %ld, %#" FMT_REGWORD "x, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "shmat",
                  int, shmid, const void *, shmaddr, int, shmflg);
 #if defined(VGP_arm_linux)
@@ -4472,7 +4572,7 @@ POST(sys_shmat)
 
 PRE(sys_shmdt)
 {
-   PRINT("sys_shmdt ( %#lx )",ARG1);
+   PRINT("sys_shmdt ( %#" FMT_REGWORD "x )",ARG1);
    PRE_REG_READ1(long, "shmdt", const void *, shmaddr);
    if (!ML_(generic_PRE_sys_shmdt)(tid, ARG1))
       SET_STATUS_Failure( VKI_EINVAL );
@@ -4485,7 +4585,7 @@ POST(sys_shmdt)
 
 PRE(sys_shmctl)
 {
-   PRINT("sys_shmctl ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+   PRINT("sys_shmctl ( %ld, %ld, %#" FMT_REGWORD "x )", SARG1, SARG2, ARG3);
    PRE_REG_READ3(long, "shmctl",
                  int, shmid, int, cmd, struct shmid_ds *, buf);
 #ifdef VGP_amd64_linux
@@ -4514,12 +4614,12 @@ POST(sys_shmctl)
 #ifdef __NR_socketcall
 PRE(sys_socketcall)
 {
-#  define ARG2_0  (((UWord*)ARG2)[0])
-#  define ARG2_1  (((UWord*)ARG2)[1])
-#  define ARG2_2  (((UWord*)ARG2)[2])
-#  define ARG2_3  (((UWord*)ARG2)[3])
-#  define ARG2_4  (((UWord*)ARG2)[4])
-#  define ARG2_5  (((UWord*)ARG2)[5])
+#  define ARG2_0  (((UWord*)(Addr)ARG2)[0])
+#  define ARG2_1  (((UWord*)(Addr)ARG2)[1])
+#  define ARG2_2  (((UWord*)(Addr)ARG2)[2])
+#  define ARG2_3  (((UWord*)(Addr)ARG2)[3])
+#  define ARG2_4  (((UWord*)(Addr)ARG2)[4])
+#  define ARG2_5  (((UWord*)(Addr)ARG2)[5])
 
 // call PRE_MEM_READ and check for EFAULT result.
 #define PRE_MEM_READ_ef(msg, arg, size)                         \
@@ -4649,13 +4749,15 @@ PRE(sys_socketcall)
    case VKI_SYS_SENDMSG:
       /* int sendmsg(int s, const struct msghdr *msg, int flags); */
       PRE_MEM_READ_ef( "socketcall.sendmsg(args)", ARG2, 3*sizeof(Addr) );
-      ML_(generic_PRE_sys_sendmsg)( tid, "msg", (struct vki_msghdr *)ARG2_1 );
+      ML_(generic_PRE_sys_sendmsg)( tid, "msg",
+                                    (struct vki_msghdr *)(Addr)ARG2_1 );
       break;
       
    case VKI_SYS_RECVMSG:
       /* int recvmsg(int s, struct msghdr *msg, int flags); */
       PRE_MEM_READ_ef("socketcall.recvmsg(args)", ARG2, 3*sizeof(Addr) );
-      ML_(generic_PRE_sys_recvmsg)( tid, "msg", (struct vki_msghdr *)ARG2_1 );
+      ML_(generic_PRE_sys_recvmsg)( tid, "msg",
+                                    (struct vki_msghdr *)(Addr)ARG2_1 );
       break;
 
    case VKI_SYS_RECVMMSG:
@@ -4687,12 +4789,12 @@ PRE(sys_socketcall)
 
 POST(sys_socketcall)
 {
-#  define ARG2_0  (((UWord*)ARG2)[0])
-#  define ARG2_1  (((UWord*)ARG2)[1])
-#  define ARG2_2  (((UWord*)ARG2)[2])
-#  define ARG2_3  (((UWord*)ARG2)[3])
-#  define ARG2_4  (((UWord*)ARG2)[4])
-#  define ARG2_5  (((UWord*)ARG2)[5])
+#  define ARG2_0  (((UWord*)(Addr)ARG2)[0])
+#  define ARG2_1  (((UWord*)(Addr)ARG2)[1])
+#  define ARG2_2  (((UWord*)(Addr)ARG2)[2])
+#  define ARG2_3  (((UWord*)(Addr)ARG2)[3])
+#  define ARG2_4  (((UWord*)(Addr)ARG2)[4])
+#  define ARG2_5  (((UWord*)(Addr)ARG2)[5])
 
    SysRes r;
    vg_assert(SUCCESS);
@@ -4774,7 +4876,8 @@ POST(sys_socketcall)
       break;
 
    case VKI_SYS_RECVMSG:
-      ML_(generic_POST_sys_recvmsg)( tid, "msg", (struct vki_msghdr *)ARG2_1, RES );
+      ML_(generic_POST_sys_recvmsg)( tid, "msg",
+                                     (struct vki_msghdr *)(Addr)ARG2_1, RES );
       break;
 
    case VKI_SYS_RECVMMSG:
@@ -4815,8 +4918,8 @@ POST(sys_socket)
 
 PRE(sys_setsockopt)
 {
-   PRINT("sys_setsockopt ( %ld, %ld, %ld, %#lx, %lu )",
-         SARG1, SARG2, SARG3, ARG4, ARG5);
+   PRINT("sys_setsockopt ( %ld, %ld, %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD
+         "u )", SARG1, SARG2, SARG3, ARG4, ARG5);
    PRE_REG_READ5(long, "setsockopt",
                  int, s, int, level, int, optname,
                  const void *, optval, unsigned, optlen); // socklen_t
@@ -4825,7 +4928,7 @@ PRE(sys_setsockopt)
 
 PRE(sys_getsockopt)
 {
-   PRINT("sys_getsockopt ( %ld, %ld, %ld, %#lx, %ld )",
+   PRINT("sys_getsockopt ( %ld, %ld, %ld, %#" FMT_REGWORD "x, %ld )",
          SARG1, SARG2, SARG3, ARG4, SARG5);
    PRE_REG_READ5(long, "getsockopt",
                  int, s, int, level, int, optname,
@@ -4842,7 +4945,7 @@ POST(sys_getsockopt)
 PRE(sys_connect)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_connect ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+   PRINT("sys_connect ( %ld, %#" FMT_REGWORD "x, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "connect",
                  int, sockfd, struct sockaddr *, serv_addr, int, addrlen);
    ML_(generic_PRE_sys_connect)(tid, ARG1,ARG2,ARG3);
@@ -4851,7 +4954,8 @@ PRE(sys_connect)
 PRE(sys_accept)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_accept ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+   PRINT("sys_accept ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+         SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "accept",
                  int, s, struct sockaddr *, addr, int *, addrlen);
    ML_(generic_PRE_sys_accept)(tid, ARG1,ARG2,ARG3);
@@ -4868,7 +4972,8 @@ POST(sys_accept)
 PRE(sys_accept4)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_accept4 ( %ld, %#lx, %#lx, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRINT("sys_accept4 ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %ld )",
+         SARG1, ARG2, ARG3, SARG4);
    PRE_REG_READ4(long, "accept4",
                  int, s, struct sockaddr *, addr, int *, addrlen, int, flags);
    ML_(generic_PRE_sys_accept)(tid, ARG1,ARG2,ARG3);
@@ -4885,7 +4990,8 @@ POST(sys_accept4)
 PRE(sys_send)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_send ( %ld, %#lx, %lu, %#lx )", SARG1, ARG2, ARG3, ARG4);
+   PRINT("sys_send ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %#"
+         FMT_REGWORD "x )", SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "send",
                  int, s, const void *, msg, vki_size_t, len, 
                  int, flags);
@@ -4896,7 +5002,8 @@ PRE(sys_send)
 PRE(sys_sendto)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_sendto ( %ld, %#lx, %lu, %lu, %#lx, %ld )",
+   PRINT("sys_sendto ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u, %#" FMT_REGWORD "x, %ld )",
          SARG1, ARG2, ARG3, ARG4, ARG5, SARG6);
    PRE_REG_READ6(long, "sendto",
                  int, s, const void *, msg, vki_size_t, len, 
@@ -4908,7 +5015,8 @@ PRE(sys_sendto)
 PRE (sys_recv) 
 {
   *flags |= SfMayBlock;
-  PRINT ("sys_recv ( %ld, %#lx, %lu, %lu )", SARG1, ARG2, ARG3, ARG4);
+  PRINT ("sys_recv ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u )", SARG1, ARG2, ARG3, ARG4);
   PRE_REG_READ4 (long, "recv", int, s, void *, buf, vki_size_t, len,
                  unsigned int, flags);
   ML_ (generic_PRE_sys_recv) (tid, ARG1, ARG2, ARG3);
@@ -4922,7 +5030,8 @@ POST (sys_recv)
 PRE(sys_recvfrom)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_recvfrom ( %ld, %#lx, %lu, %lu, %#lx, %#lx )",
+   PRINT("sys_recvfrom ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
          SARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(long, "recvfrom",
                  int, s, void *, buf, vki_size_t, len, unsigned int, flags,
@@ -4939,23 +5048,26 @@ POST(sys_recvfrom)
 PRE(sys_sendmsg)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_sendmsg ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
+   PRINT("sys_sendmsg ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )",
+         SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "sendmsg",
                  int, s, const struct msghdr *, msg, unsigned int, flags);
-   ML_(generic_PRE_sys_sendmsg)(tid, "msg", (struct vki_msghdr *)ARG2);
+   ML_(generic_PRE_sys_sendmsg)(tid, "msg", (struct vki_msghdr *)(Addr)ARG2);
 }
 
 PRE(sys_recvmsg)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_recvmsg ( %ld, %#lx, %lu )", SARG1, ARG2, ARG3);
+   PRINT("sys_recvmsg ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )",
+         SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "recvmsg", int, s, struct msghdr *, msg,
                  unsigned int, flags);
-   ML_(generic_PRE_sys_recvmsg)(tid, "msg", (struct vki_msghdr *)ARG2);
+   ML_(generic_PRE_sys_recvmsg)(tid, "msg", (struct vki_msghdr *)(Addr)ARG2);
 }
 POST(sys_recvmsg)
 {
-   ML_(generic_POST_sys_recvmsg)(tid, "msg", (struct vki_msghdr *)ARG2, RES);
+   ML_(generic_POST_sys_recvmsg)(tid, "msg", (struct vki_msghdr *)(Addr)ARG2,
+                                 RES);
 }
 
 PRE(sys_shutdown)
@@ -4967,7 +5079,7 @@ PRE(sys_shutdown)
 
 PRE(sys_bind)
 {
-   PRINT("sys_bind ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+   PRINT("sys_bind ( %ld, %#" FMT_REGWORD "x, %ld )", SARG1, ARG2, SARG3);
    PRE_REG_READ3(long, "bind",
                  int, sockfd, struct sockaddr *, my_addr, int, addrlen);
    ML_(generic_PRE_sys_bind)(tid, ARG1,ARG2,ARG3);
@@ -4981,7 +5093,8 @@ PRE(sys_listen)
 
 PRE(sys_getsockname)
 {
-   PRINT("sys_getsockname ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+   PRINT("sys_getsockname ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+         SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "getsockname",
                  int, s, struct sockaddr *, name, int *, namelen);
    ML_(generic_PRE_sys_getsockname)(tid, ARG1,ARG2,ARG3);
@@ -4995,7 +5108,8 @@ POST(sys_getsockname)
 
 PRE(sys_getpeername)
 {
-   PRINT("sys_getpeername ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+   PRINT("sys_getpeername ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+         SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "getpeername",
                  int, s, struct sockaddr *, name, int *, namelen);
    ML_(generic_PRE_sys_getpeername)(tid, ARG1,ARG2,ARG3);
@@ -5009,7 +5123,8 @@ POST(sys_getpeername)
 
 PRE(sys_socketpair)
 {
-   PRINT("sys_socketpair ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
+   PRINT("sys_socketpair ( %ld, %ld, %ld, %#" FMT_REGWORD "x )", SARG1, SARG2,
+         SARG3, ARG4);
    PRE_REG_READ4(long, "socketpair",
                  int, d, int, type, int, protocol, int*, sv);
    ML_(generic_PRE_sys_socketpair)(tid, ARG1,ARG2,ARG3,ARG4);
@@ -5033,14 +5148,14 @@ PRE(sys_openat)
 
    if (ARG3 & VKI_O_CREAT) {
       // 4-arg version
-      PRINT("sys_openat ( %ld, %#lx(%s), %ld, %ld )",
-            SARG1, ARG2, (HChar*)ARG2, SARG3, SARG4);
+      PRINT("sys_openat ( %ld, %#" FMT_REGWORD "x(%s), %ld, %ld )",
+            SARG1, ARG2, (HChar*)(Addr)ARG2, SARG3, SARG4);
       PRE_REG_READ4(long, "openat",
                     int, dfd, const char *, filename, int, flags, int, mode);
    } else {
       // 3-arg version
-      PRINT("sys_openat ( %ld, %#lx(%s), %ld )",
-            SARG1, ARG2, (HChar*)ARG2, SARG3);
+      PRINT("sys_openat ( %ld, %#" FMT_REGWORD "x(%s), %ld )",
+            SARG1, ARG2, (HChar*)(Addr)ARG2, SARG3);
       PRE_REG_READ3(long, "openat",
                     int, dfd, const char *, filename, int, flags);
    }
@@ -5050,8 +5165,8 @@ PRE(sys_openat)
    /* For absolute filenames, dfd is ignored.  If dfd is AT_FDCWD,
       filename is relative to cwd.  When comparing dfd against AT_FDCWD,
       be sure only to compare the bottom 32 bits. */
-   if (ML_(safe_to_deref)( (void*)ARG2, 1 )
-       && *(Char *)ARG2 != '/'
+   if (ML_(safe_to_deref)( (void*)(Addr)ARG2, 1 )
+       && *(Char *)(Addr)ARG2 != '/'
        && ((Int)ARG1) != ((Int)VKI_AT_FDCWD)
        && !ML_(fd_allowed)(ARG1, "openat", tid, False))
       SET_STATUS_Failure( VKI_EBADF );
@@ -5062,9 +5177,9 @@ PRE(sys_openat)
       cloned fd back to the start. */
 
    VG_(sprintf)(name, "/proc/%d/cmdline", VG_(getpid)());
-   if (ML_(safe_to_deref)( (void*)ARG2, 1 )
-       && (VG_(strcmp)((HChar *)ARG2, name) == 0 
-           || VG_(strcmp)((HChar *)ARG2, "/proc/self/cmdline") == 0)) {
+   if (ML_(safe_to_deref)( (void*)(Addr)ARG2, 1 )
+       && (VG_(strcmp)((HChar *)(Addr)ARG2, name) == 0 
+           || VG_(strcmp)((HChar *)(Addr)ARG2, "/proc/self/cmdline") == 0)) {
       sres = VG_(dup)( VG_(cl_cmdline_fd) );
       SET_STATUS_from_SysRes( sres );
       if (!sr_isError(sres)) {
@@ -5078,9 +5193,9 @@ PRE(sys_openat)
    /* Do the same for /proc/self/auxv or /proc/<pid>/auxv case. */
 
    VG_(sprintf)(name, "/proc/%d/auxv", VG_(getpid)());
-   if (ML_(safe_to_deref)( (void*)ARG2, 1 )
-       && (VG_(strcmp)((HChar *)ARG2, name) == 0 
-           || VG_(strcmp)((HChar *)ARG2, "/proc/self/auxv") == 0)) {
+   if (ML_(safe_to_deref)( (void*)(Addr)ARG2, 1 )
+       && (VG_(strcmp)((HChar *)(Addr)ARG2, name) == 0 
+           || VG_(strcmp)((HChar *)(Addr)ARG2, "/proc/self/auxv") == 0)) {
       sres = VG_(dup)( VG_(cl_auxv_fd) );
       SET_STATUS_from_SysRes( sres );
       if (!sr_isError(sres)) {
@@ -5103,15 +5218,15 @@ POST(sys_openat)
       SET_STATUS_Failure( VKI_EMFILE );
    } else {
       if (VG_(clo_track_fds))
-         ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)ARG2);
+         ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)(Addr)ARG2);
    }
 }
 
 PRE(sys_mkdirat)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_mkdirat ( %ld, %#lx(%s), %ld )",
-         SARG1, ARG2, (HChar*)ARG2, SARG3);
+   PRINT("sys_mkdirat ( %ld, %#" FMT_REGWORD "x(%s), %ld )",
+         SARG1, ARG2, (HChar*)(Addr)ARG2, SARG3);
    PRE_REG_READ3(long, "mkdirat",
                  int, dfd, const char *, pathname, int, mode);
    PRE_MEM_RASCIIZ( "mkdirat(pathname)", ARG2 );
@@ -5119,8 +5234,8 @@ PRE(sys_mkdirat)
 
 PRE(sys_mknodat)
 {
-   PRINT("sys_mknodat ( %ld, %#lx(%s), 0x%lx, 0x%lx )",
-         SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4 );
+   PRINT("sys_mknodat ( %ld, %#" FMT_REGWORD "x(%s), 0x%" FMT_REGWORD "x, 0x%"
+         FMT_REGWORD "x )", SARG1, ARG2, (HChar*)(Addr)ARG2, ARG3, ARG4 );
    PRE_REG_READ4(long, "mknodat",
                  int, dfd, const char *, pathname, int, mode, unsigned, dev);
    PRE_MEM_RASCIIZ( "mknodat(pathname)", ARG2 );
@@ -5128,8 +5243,8 @@ PRE(sys_mknodat)
 
 PRE(sys_fchownat)
 {
-   PRINT("sys_fchownat ( %ld, %#lx(%s), 0x%lx, 0x%lx )",
-         SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4);
+   PRINT("sys_fchownat ( %ld, %#" FMT_REGWORD "x(%s), 0x%" FMT_REGWORD "x, 0x%"
+          FMT_REGWORD "x )", SARG1, ARG2, (HChar*)(Addr)ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "fchownat",
                  int, dfd, const char *, path,
                  vki_uid_t, owner, vki_gid_t, group);
@@ -5138,8 +5253,8 @@ PRE(sys_fchownat)
 
 PRE(sys_futimesat)
 {
-   PRINT("sys_futimesat ( %ld, %#lx(%s), %#lx )",
-         SARG1, ARG2, (HChar*)ARG2, ARG3);
+   PRINT("sys_futimesat ( %ld, %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x )",
+         SARG1, ARG2, (HChar*)(Addr)ARG2, ARG3);
    PRE_REG_READ3(long, "futimesat",
                  int, dfd, char *, filename, struct timeval *, tvp);
    if (ARG2 != 0)
@@ -5150,8 +5265,8 @@ PRE(sys_futimesat)
 
 PRE(sys_utimensat)
 {
-   PRINT("sys_utimensat ( %ld, %#lx(%s), %#lx, 0x%lx )",
-         SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4);
+   PRINT("sys_utimensat ( %ld, %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x, 0x%"
+          FMT_REGWORD "x )", SARG1, ARG2, (HChar*)(Addr)ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "utimensat",
                  int, dfd, char *, filename, struct timespec *, utimes, int, flags);
    if (ARG2 != 0)
@@ -5163,8 +5278,8 @@ PRE(sys_utimensat)
 PRE(sys_newfstatat)
 {
    FUSE_COMPATIBLE_MAY_BLOCK();
-   PRINT("sys_newfstatat ( %ld, %#lx(%s), %#lx )",
-         SARG1, ARG2, (HChar*)ARG2, ARG3);
+   PRINT("sys_newfstatat ( %ld, %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x )",
+         SARG1, ARG2, (HChar*)(Addr)ARG2, ARG3);
    PRE_REG_READ3(long, "fstatat",
                  int, dfd, char *, file_name, struct stat *, buf);
    PRE_MEM_RASCIIZ( "fstatat(file_name)", ARG2 );
@@ -5179,15 +5294,17 @@ POST(sys_newfstatat)
 PRE(sys_unlinkat)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_unlinkat ( %ld, %#lx(%s) )", SARG1, ARG2, (HChar*)ARG2);
+   PRINT("sys_unlinkat ( %ld, %#" FMT_REGWORD "x(%s) )", SARG1, ARG2,
+         (HChar*)(Addr)ARG2);
    PRE_REG_READ2(long, "unlinkat", int, dfd, const char *, pathname);
    PRE_MEM_RASCIIZ( "unlinkat(pathname)", ARG2 );
 }
 
 PRE(sys_renameat)
 {
-   PRINT("sys_renameat ( %ld, %#lx(%s), %ld, %#lx(%s) )",
-         SARG1, ARG2, (HChar*)ARG2, SARG3, ARG4, (HChar*)ARG4);
+   PRINT("sys_renameat ( %ld, %#" FMT_REGWORD "x(%s), %ld, %#"
+         FMT_REGWORD "x(%s) )", SARG1, ARG2, (HChar*)(Addr)ARG2, SARG3,
+         ARG4, (HChar*)(Addr)ARG4);
    PRE_REG_READ4(long, "renameat",
                  int, olddfd, const char *, oldpath,
                  int, newdfd, const char *, newpath);
@@ -5197,8 +5314,9 @@ PRE(sys_renameat)
 
 PRE(sys_renameat2)
 {
-   PRINT("sys_renameat2 ( %ld, %#lx(%s), %ld, %#lx(%s), %lu )",
-         SARG1, ARG2, (HChar*)ARG2, SARG3, ARG4, (HChar*)ARG4, ARG5);
+   PRINT("sys_renameat2 ( %ld, %#" FMT_REGWORD "x(%s), %ld, %#" FMT_REGWORD
+         "x(%s), %" FMT_REGWORD "u )", SARG1, ARG2, (HChar*)(Addr)ARG2, SARG3,
+         ARG4, (HChar*)(Addr)ARG4, ARG5);
    PRE_REG_READ5(long, "renameat2",
                  int, olddfd, const char *, oldpath,
                  int, newdfd, const char *, newpath,
@@ -5210,8 +5328,9 @@ PRE(sys_renameat2)
 PRE(sys_linkat)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_linkat ( %ld, %#lx(%s), %ld, %#lx(%s), %ld )",
-         SARG1, ARG2, (HChar*)ARG2, SARG3, ARG4, (HChar*)ARG4, SARG5);
+   PRINT("sys_linkat ( %ld, %#" FMT_REGWORD "x(%s), %ld, %#" FMT_REGWORD
+         "x(%s), %ld )", SARG1, ARG2, (HChar*)(Addr)ARG2, SARG3, ARG4,
+         (HChar*)(Addr)ARG4, SARG5);
    PRE_REG_READ5(long, "linkat",
                  int, olddfd, const char *, oldpath,
                  int, newdfd, const char *, newpath,
@@ -5223,8 +5342,8 @@ PRE(sys_linkat)
 PRE(sys_symlinkat)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_symlinkat ( %#lx(%s), %ld, %#lx(%s) )",
-         ARG1, (HChar*)ARG1, SARG2, ARG3, (HChar*)ARG3);
+   PRINT("sys_symlinkat ( %#" FMT_REGWORD "x(%s), %ld, %#" FMT_REGWORD
+         "x(%s) )", ARG1, (HChar*)(Addr)ARG1, SARG2, ARG3, (HChar*)(Addr)ARG3);
    PRE_REG_READ3(long, "symlinkat",
                  const char *, oldpath, int, newdfd, const char *, newpath);
    PRE_MEM_RASCIIZ( "symlinkat(oldpath)", ARG1 );
@@ -5236,8 +5355,8 @@ PRE(sys_readlinkat)
    HChar name[30];       // large enough
    Word  saved = SYSNO;
 
-   PRINT("sys_readlinkat ( %ld, %#lx(%s), %#lx, %lu )",
-         SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4);
+   PRINT("sys_readlinkat ( %ld, %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x, %"
+          FMT_REGWORD "u )", SARG1, ARG2, (HChar*)(Addr)ARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "readlinkat",
                  int, dfd, const char *, path, char *, buf, vki_size_t, bufsiz);
    PRE_MEM_RASCIIZ( "readlinkat(path)", ARG2 );
@@ -5248,9 +5367,9 @@ PRE(sys_readlinkat)
     * /proc/<pid>/exe.
     */
    VG_(sprintf)(name, "/proc/%d/exe", VG_(getpid)());
-   if (ML_(safe_to_deref)((void*)ARG2, 1)
-       && (VG_(strcmp)((HChar *)ARG2, name) == 0 
-           || VG_(strcmp)((HChar *)ARG2, "/proc/self/exe") == 0)) {
+   if (ML_(safe_to_deref)((void*)(Addr)ARG2, 1)
+       && (VG_(strcmp)((HChar *)(Addr)ARG2, name) == 0
+           || VG_(strcmp)((HChar *)(Addr)ARG2, "/proc/self/exe") == 0)) {
       VG_(sprintf)(name, "/proc/self/fd/%d", VG_(cl_exec_fd));
       SET_STATUS_from_SysRes( VG_(do_syscall4)(saved, ARG1, (UWord)name, 
                                                       ARG3, ARG4));
@@ -5265,8 +5384,8 @@ PRE(sys_readlinkat)
 
 PRE(sys_fchmodat)
 {
-   PRINT("sys_fchmodat ( %ld, %#lx(%s), %lu )",
-         SARG1, ARG2, (HChar*)ARG2, ARG3);
+   PRINT("sys_fchmodat ( %ld, %#" FMT_REGWORD "x(%s), %" FMT_REGWORD "u )",
+         SARG1, ARG2, (HChar*)(Addr)ARG2, ARG3);
    PRE_REG_READ3(long, "fchmodat",
                  int, dfd, const char *, path, vki_mode_t, mode);
    PRE_MEM_RASCIIZ( "fchmodat(path)", ARG2 );
@@ -5274,8 +5393,8 @@ PRE(sys_fchmodat)
 
 PRE(sys_faccessat)
 {
-   PRINT("sys_faccessat ( %ld, %#lx(%s), %ld )",
-         SARG1, ARG2, (HChar*)ARG2, SARG3);
+   PRINT("sys_faccessat ( %ld, %#" FMT_REGWORD "x(%s), %ld )",
+         SARG1, ARG2, (HChar*)(Addr)ARG2, SARG3);
    PRE_REG_READ3(long, "faccessat",
                  int, dfd, const char *, pathname, int, mode);
    PRE_MEM_RASCIIZ( "faccessat(pathname)", ARG2 );
@@ -5283,15 +5402,16 @@ PRE(sys_faccessat)
 
 PRE(sys_name_to_handle_at)
 {
-   PRINT("sys_name_to_handle_at ( %ld, %#lx(%s), %#lx, %#lx, %ld )",
-         SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4, SARG5);
+   PRINT("sys_name_to_handle_at ( %ld, %#" FMT_REGWORD "x(%s), %#"
+          FMT_REGWORD "x, %#" FMT_REGWORD "x, %ld )", SARG1, ARG2,
+          (HChar*)(Addr)ARG2, ARG3, ARG4, SARG5);
    PRE_REG_READ5(int, "name_to_handle_at",
                  int, dfd, const char *, name,
                  struct vki_file_handle *, handle,
                  int *, mnt_id, int, flag);
    PRE_MEM_RASCIIZ( "name_to_handle_at(name)", ARG2 );
-   if (ML_(safe_to_deref)( (void*)ARG3, sizeof(struct vki_file_handle))) {
-      struct vki_file_handle *fh = (struct vki_file_handle *)ARG3;
+   if (ML_(safe_to_deref)( (void*)(Addr)ARG3, sizeof(struct vki_file_handle))) {
+      struct vki_file_handle *fh = (struct vki_file_handle *)(Addr)ARG3;
       PRE_MEM_READ( "name_to_handle_at(handle)", (Addr)&fh->handle_bytes, sizeof(fh->handle_bytes) );
       PRE_MEM_WRITE( "name_to_handle_at(handle)", (Addr)fh, sizeof(struct vki_file_handle) + fh->handle_bytes );
    }
@@ -5300,7 +5420,7 @@ PRE(sys_name_to_handle_at)
 
 POST(sys_name_to_handle_at)
 {
-   struct vki_file_handle *fh = (struct vki_file_handle *)ARG3;
+   struct vki_file_handle *fh = (struct vki_file_handle *)(Addr)ARG3;
    POST_MEM_WRITE( ARG3, sizeof(struct vki_file_handle) + fh->handle_bytes );
    POST_MEM_WRITE( ARG4, sizeof(int) );
 }
@@ -5308,12 +5428,15 @@ POST(sys_name_to_handle_at)
 PRE(sys_open_by_handle_at)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_open_by_handle_at ( %ld, %#lx, %ld )", SARG1, ARG2, SARG3);
+   PRINT("sys_open_by_handle_at ( %ld, %#" FMT_REGWORD "x, %ld )", SARG1,
+         ARG2, SARG3);
    PRE_REG_READ3(int, "open_by_handle_at",
                  int, mountdirfd,
                  struct vki_file_handle *, handle,
                  int, flags);
-   PRE_MEM_READ( "open_by_handle_at(handle)", ARG2, sizeof(struct vki_file_handle) + ((struct vki_file_handle*)ARG2)->handle_bytes );
+   PRE_MEM_READ( "open_by_handle_at(handle)", ARG2,
+                 sizeof(struct vki_file_handle) +
+                 ((struct vki_file_handle*)(Addr)ARG2)->handle_bytes);
 }
 
 POST(sys_open_by_handle_at)
@@ -5324,7 +5447,7 @@ POST(sys_open_by_handle_at)
       SET_STATUS_Failure( VKI_EMFILE );
    } else {
       if (VG_(clo_track_fds))
-         ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)ARG2);
+         ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)(Addr)ARG2);
    }
 }
 
@@ -5340,7 +5463,8 @@ PRE(sys_preadv)
 #if VG_WORDSIZE == 4
    /* Note that the offset argument here is in lo+hi order on both
       big and little endian platforms... */
-   PRINT("sys_preadv ( %lu, %#lx, %lu, %lld )",
+   PRINT("sys_preadv ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %" FMT_REGWORD
+         "u, %lld )",
          ARG1, ARG2, ARG3, (Long)LOHI64(ARG4,ARG5));
    PRE_REG_READ5(ssize_t, "preadv",
                  unsigned long, fd, const struct iovec *, vector,
@@ -5361,7 +5485,7 @@ PRE(sys_preadv)
 
       if (ARG2 != 0) {
          /* ToDo: don't do any of the following if the vector is invalid */
-         vec = (struct vki_iovec *)ARG2;
+         vec = (struct vki_iovec *)(Addr)ARG2;
          for (i = 0; i < (Int)ARG3; i++)
             PRE_MEM_WRITE( "preadv(vector[...])",
                            (Addr)vec[i].iov_base, vec[i].iov_len );
@@ -5374,7 +5498,7 @@ POST(sys_preadv)
    vg_assert(SUCCESS);
    if (RES > 0) {
       Int i;
-      struct vki_iovec * vec = (struct vki_iovec *)ARG2;
+      struct vki_iovec * vec = (struct vki_iovec *)(Addr)ARG2;
       Int remains = RES;
 
       /* RES holds the number of bytes read. */
@@ -5396,8 +5520,8 @@ PRE(sys_pwritev)
 #if VG_WORDSIZE == 4
    /* Note that the offset argument here is in lo+hi order on both
       big and little endian platforms... */
-   PRINT("sys_pwritev ( %lu, %#lx, %lu, %lld )",
-         ARG1, ARG2, ARG3, (Long)LOHI64(ARG4,ARG5));
+   PRINT("sys_pwritev ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %" FMT_REGWORD
+         "u, %lld )", ARG1, ARG2, ARG3, (Long)LOHI64(ARG4,ARG5));
    PRE_REG_READ5(ssize_t, "pwritev",
                  unsigned long, fd, const struct iovec *, vector,
                  unsigned long, count, vki_u32, offset_low,
@@ -5417,7 +5541,7 @@ PRE(sys_pwritev)
                     ARG2, ARG3 * sizeof(struct vki_iovec) );
       if (ARG2 != 0) {
          /* ToDo: don't do any of the following if the vector is invalid */
-         vec = (struct vki_iovec *)ARG2;
+         vec = (struct vki_iovec *)(Addr)ARG2;
          for (i = 0; i < (Int)ARG3; i++)
             PRE_MEM_READ( "pwritev(vector[...])",
                            (Addr)vec[i].iov_base, vec[i].iov_len );
@@ -5431,7 +5555,8 @@ PRE(sys_pwritev)
 
 PRE(sys_process_vm_readv)
 {
-   PRINT("sys_process_vm_readv ( %ld, %#lx, %lu, %#lx, %lu, %lu )",
+   PRINT("sys_process_vm_readv ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD
+         "u, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %" FMT_REGWORD "u )",
          SARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(ssize_t, "process_vm_readv",
                  vki_pid_t, pid,
@@ -5445,8 +5570,9 @@ PRE(sys_process_vm_readv)
    PRE_MEM_READ( "process_vm_readv(rvec)",
                  ARG4, ARG5 * sizeof(struct vki_iovec) );
    if (ARG2 != 0
-       && ML_(safe_to_deref) ((void *)ARG2, sizeof(struct vki_iovec) * ARG3)) {
-      const struct vki_iovec *vec = (const struct vki_iovec *)ARG2;
+       && ML_(safe_to_deref) ((void *)(Addr)ARG2,
+                              sizeof(struct vki_iovec) * ARG3)) {
+      const struct vki_iovec *vec = (const struct vki_iovec *)(Addr)ARG2;
       UInt i;
       for (i = 0; i < ARG3; i++)
          PRE_MEM_WRITE( "process_vm_readv(lvec[...])",
@@ -5456,7 +5582,7 @@ PRE(sys_process_vm_readv)
 
 POST(sys_process_vm_readv)
 {
-   const struct vki_iovec *vec = (const struct vki_iovec *)ARG2;
+   const struct vki_iovec *vec = (const struct vki_iovec *)(Addr)ARG2;
    UInt remains = RES;
    UInt i;
    for (i = 0; i < ARG3; i++) {
@@ -5469,7 +5595,8 @@ POST(sys_process_vm_readv)
 
 PRE(sys_process_vm_writev)
 {
-   PRINT("sys_process_vm_writev ( %ld, %#lx, %lu, %#lx, %lu, %lu )",
+   PRINT("sys_process_vm_writev ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD
+         "u, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %" FMT_REGWORD "u )",
          SARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(ssize_t, "process_vm_writev",
                  vki_pid_t, pid,
@@ -5483,8 +5610,9 @@ PRE(sys_process_vm_writev)
    PRE_MEM_READ( "process_vm_writev(rvec)",
                  ARG4, ARG5 * sizeof(struct vki_iovec) );
    if (ARG2 != 0
-       && ML_(safe_to_deref) ((void *)ARG2, sizeof(struct vki_iovec) * ARG3)) {
-      const struct vki_iovec *vec = (const struct vki_iovec *)ARG2;
+       && ML_(safe_to_deref) ((void *)(Addr)ARG2,
+                              sizeof(struct vki_iovec) * ARG3)) {
+      const struct vki_iovec *vec = (const struct vki_iovec *)(Addr)ARG2;
       UInt i;
       for (i = 0; i < ARG3; i++)
          PRE_MEM_READ( "process_vm_writev(lvec[...])",
@@ -5499,7 +5627,8 @@ PRE(sys_process_vm_writev)
 PRE(sys_sendmmsg)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_sendmmsg ( %ld, %#lx, %ld, %ld )", SARG1, ARG2, SARG3, SARG4);
+   PRINT("sys_sendmmsg ( %ld, %#" FMT_REGWORD "x, %ld, %ld )", SARG1, ARG2,
+         SARG3, SARG4);
    PRE_REG_READ4(long, "sendmmsg",
                  int, s, const struct mmsghdr *, mmsg, int, vlen, int, flags);
    ML_(linux_PRE_sys_sendmmsg)(tid, ARG1,ARG2,ARG3,ARG4);
@@ -5513,7 +5642,8 @@ POST(sys_sendmmsg)
 PRE(sys_recvmmsg)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_recvmmsg ( %ld, %#lx, %ld, %ld, %#lx )",
+   PRINT("sys_recvmmsg ( %ld, %#" FMT_REGWORD "x, %ld, %ld, %#"
+         FMT_REGWORD "x )",
          SARG1, ARG2, SARG3, SARG4, ARG5);
    PRE_REG_READ5(long, "recvmmsg",
                  int, s, struct mmsghdr *, mmsg, int, vlen,
@@ -5532,8 +5662,9 @@ POST(sys_recvmmsg)
 
 PRE(sys_request_key)
 {
-   PRINT("sys_request_key ( %#lx(%s), %#lx(%s), %#lx(%s), %ld )",
-         ARG1, (HChar*)ARG1, ARG2, (HChar*)ARG2, ARG3, (HChar*)ARG3, SARG4);
+   PRINT("sys_request_key ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x(%s), %#"
+         FMT_REGWORD "x(%s), %ld )", ARG1, (HChar*)(Addr)ARG1, ARG2,
+         (HChar*)(Addr)ARG2, ARG3, (HChar*)(Addr)ARG3, SARG4);
    PRE_REG_READ4(long, "request_key",
                  const char *, type, const char *, description, 
                  const char *, callout_info, vki_key_serial_t, keyring);
@@ -5545,8 +5676,9 @@ PRE(sys_request_key)
 
 PRE(sys_add_key)
 {
-   PRINT("sys_add_key ( %#lx(%s), %#lx(%s), %#lx, %lu, %ld )",
-         ARG1, (HChar*)ARG1, ARG2, (HChar*)ARG2, ARG3, ARG4, SARG5);
+   PRINT("sys_add_key ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x(%s), %#"
+         FMT_REGWORD "x, %" FMT_REGWORD "u, %ld )", ARG1, (HChar*)(Addr)ARG1,
+          ARG2, (HChar*)(Addr)ARG2, ARG3, ARG4, SARG5);
    PRE_REG_READ5(long, "add_key",
                  const char *, type, const char *, description,
                  const void *, payload, vki_size_t, plen, 
@@ -5566,14 +5698,16 @@ PRE(sys_keyctl)
                     int, option, vki_key_serial_t, id, int, create);
       break;
    case VKI_KEYCTL_JOIN_SESSION_KEYRING:
-      PRINT("sys_keyctl ( KEYCTL_JOIN_SESSION_KEYRING, %#lx(%s) )", ARG2,(char*)ARG2);
+      PRINT("sys_keyctl ( KEYCTL_JOIN_SESSION_KEYRING, %#" FMT_REGWORD
+            "x(%s) )", ARG2,(char*)(Addr)ARG2);
       PRE_REG_READ2(long, "keyctl(KEYCTL_JOIN_SESSION_KEYRING)",
                     int, option, const char *, name);
       if (ARG2 != (UWord)NULL)
          PRE_MEM_RASCIIZ("keyctl(KEYCTL_JOIN_SESSION_KEYRING, name)", ARG2);
       break;
    case VKI_KEYCTL_UPDATE:
-      PRINT("sys_keyctl ( KEYCTL_UPDATE, %ld, %#lx, %lu )", SARG2, ARG3, ARG4);
+      PRINT("sys_keyctl ( KEYCTL_UPDATE, %ld, %#" FMT_REGWORD "x, %"
+            FMT_REGWORD "u )", SARG2, ARG3, ARG4);
       PRE_REG_READ4(long, "keyctl(KEYCTL_UPDATE)",
                     int, option, vki_key_serial_t, key,
                     const void *, payload, vki_size_t, plen);
@@ -5586,18 +5720,21 @@ PRE(sys_keyctl)
                     int, option, vki_key_serial_t, id);
       break;
    case VKI_KEYCTL_CHOWN:
-      PRINT("sys_keyctl ( KEYCTL_CHOWN, %ld, %lu, %lu )", SARG2, ARG3, ARG4);
+      PRINT("sys_keyctl ( KEYCTL_CHOWN, %ld, %" FMT_REGWORD "u, %"
+            FMT_REGWORD "u )", SARG2, ARG3, ARG4);
       PRE_REG_READ4(long, "keyctl(KEYCTL_CHOWN)",
                     int, option, vki_key_serial_t, id,
                     vki_uid_t, uid, vki_gid_t, gid);
       break;
    case VKI_KEYCTL_SETPERM:
-      PRINT("sys_keyctl ( KEYCTL_SETPERM, %ld, %lu )", SARG2, ARG3);
+      PRINT("sys_keyctl ( KEYCTL_SETPERM, %ld, %" FMT_REGWORD "u )",
+            SARG2, ARG3);
       PRE_REG_READ3(long, "keyctl(KEYCTL_SETPERM)",
                     int, option, vki_key_serial_t, id, vki_key_perm_t, perm);
       break;
    case VKI_KEYCTL_DESCRIBE:
-      PRINT("sys_keyctl ( KEYCTL_DESCRIBE, %ld, %#lx, %lu )", SARG2, ARG3, ARG4);
+      PRINT("sys_keyctl ( KEYCTL_DESCRIBE, %ld, %#" FMT_REGWORD "x, %"
+            FMT_REGWORD "u )", SARG2, ARG3, ARG4);
       PRE_REG_READ4(long, "keyctl(KEYCTL_DESCRIBE)",
                     int, option, vki_key_serial_t, id,
                     char *, buffer, vki_size_t, buflen);
@@ -5620,8 +5757,9 @@ PRE(sys_keyctl)
                     vki_key_serial_t, keyring, vki_key_serial_t, key);
       break;
    case VKI_KEYCTL_SEARCH:
-      PRINT("sys_keyctl ( KEYCTL_SEARCH, %ld, %#lx(%s), %#lx(%s), %ld )",
-            SARG2, ARG3, (HChar*)ARG3, ARG4, (HChar*)ARG4, SARG5);
+      PRINT("sys_keyctl ( KEYCTL_SEARCH, %ld, %#" FMT_REGWORD "x(%s), %#"
+            FMT_REGWORD "x(%s), %ld )", SARG2, ARG3, (HChar*)(Addr)ARG3,
+            ARG4, (HChar*)(Addr)ARG4, SARG5);
       PRE_REG_READ5(long, "keyctl(KEYCTL_SEARCH)",
                     int, option, vki_key_serial_t, keyring, 
                     const char *, type, const char *, description,
@@ -5630,7 +5768,8 @@ PRE(sys_keyctl)
       PRE_MEM_RASCIIZ("sys_keyctl(KEYCTL_SEARCH, description)", ARG4);
       break;
    case VKI_KEYCTL_READ:
-      PRINT("sys_keyctl ( KEYCTL_READ, %ld, %#lx, %lu )", SARG2, ARG3, ARG4);
+      PRINT("sys_keyctl ( KEYCTL_READ, %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD
+            "u )", SARG2, ARG3, ARG4);
       PRE_REG_READ4(long, "keyctl(KEYCTL_READ)",
                     int, option, vki_key_serial_t, keyring, 
                     char *, buffer, vki_size_t, buflen);
@@ -5638,8 +5777,8 @@ PRE(sys_keyctl)
          PRE_MEM_WRITE("keyctl(KEYCTL_READ, buffer)", ARG3, ARG4);
       break;
    case VKI_KEYCTL_INSTANTIATE:
-      PRINT("sys_keyctl ( KEYCTL_INSTANTIATE, %ld, %#lx, %lu, %ld )",
-            SARG2, ARG3, ARG4, SARG5);
+      PRINT("sys_keyctl ( KEYCTL_INSTANTIATE, %ld, %#" FMT_REGWORD "x, %"
+            FMT_REGWORD "u, %ld )", SARG2, ARG3, ARG4, SARG5);
       PRE_REG_READ5(long, "keyctl(KEYCTL_INSTANTIATE)",
                     int, option, vki_key_serial_t, key, 
                     char *, payload, vki_size_t, plen,
@@ -5648,7 +5787,8 @@ PRE(sys_keyctl)
          PRE_MEM_READ("keyctl(KEYCTL_INSTANTIATE, payload)", ARG3, ARG4);
       break;
    case VKI_KEYCTL_NEGATE:
-      PRINT("sys_keyctl ( KEYCTL_NEGATE, %ld, %lu, %ld )", SARG2, ARG3, SARG4);
+      PRINT("sys_keyctl ( KEYCTL_NEGATE, %ld, %" FMT_REGWORD "u, %ld )",
+            SARG2, ARG3, SARG4);
       PRE_REG_READ4(long, "keyctl(KEYCTL_NEGATE)",
                     int, option, vki_key_serial_t, key, 
                     unsigned, timeout, vki_key_serial_t, keyring);
@@ -5659,7 +5799,8 @@ PRE(sys_keyctl)
                     int, option, int, reqkey_defl);
       break;
    case VKI_KEYCTL_SET_TIMEOUT:
-      PRINT("sys_keyctl ( KEYCTL_SET_TIMEOUT, %ld, %lu )", SARG2, ARG3);
+      PRINT("sys_keyctl ( KEYCTL_SET_TIMEOUT, %ld, %" FMT_REGWORD "u )",
+            SARG2, ARG3);
       PRE_REG_READ3(long, "keyctl(KEYCTL_SET_TIMEOUT)",
                     int, option, vki_key_serial_t, key, unsigned, timeout);
       break;
@@ -5714,8 +5855,8 @@ PRE(sys_ioprio_get)
 PRE(sys_init_module)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_init_module ( %#lx, %lu, %#lx(\"%s\") )",
-         ARG1, ARG2, ARG3, (HChar*)ARG3);
+   PRINT("sys_init_module ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %#"
+         FMT_REGWORD "x(\"%s\") )", ARG1, ARG2, ARG3, (HChar*)(Addr)ARG3);
    PRE_REG_READ3(long, "init_module",
                  void *, umod, unsigned long, len, const char *, uargs);
    PRE_MEM_READ( "init_module(umod)", ARG1, ARG2 );
@@ -5726,8 +5867,8 @@ PRE(sys_finit_module)
 {
    *flags |= SfMayBlock;
 
-   PRINT("sys_finit_module ( %lx, %#lx(\"%s\"), %lx )",
-         ARG1, ARG2, (HChar*)ARG2, ARG3);
+   PRINT("sys_finit_module ( %" FMT_REGWORD "x, %#" FMT_REGWORD "x(\"%s\"), %"
+          FMT_REGWORD "x )", ARG1, ARG2, (HChar*)(Addr)ARG2, ARG3);
    PRE_REG_READ3(long, "finit_module",
                  int, fd, const char *, params, int, flags);
    PRE_MEM_RASCIIZ("finit_module(params)", ARG2);
@@ -5736,7 +5877,8 @@ PRE(sys_finit_module)
 PRE(sys_delete_module)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_delete_module ( %#lx(\"%s\"), 0x%lx )", ARG1, (HChar*)ARG1, ARG2);
+   PRINT("sys_delete_module ( %#" FMT_REGWORD "x(\"%s\"), 0x%" FMT_REGWORD
+         "x )", ARG1, (HChar*)(Addr)ARG1, ARG2);
    PRE_REG_READ2(long, "delete_module",
                  const char *, name_user, unsigned int, flags);
    PRE_MEM_RASCIIZ("delete_module(name_user)", ARG1);
@@ -5749,7 +5891,8 @@ PRE(sys_delete_module)
 PRE(sys_splice)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_splice ( %ld, %#lx, %ld, %#lx, %lu, %#lx )",
+   PRINT("sys_splice ( %ld, %#" FMT_REGWORD "x, %ld, %#"
+         FMT_REGWORD "x, %" FMT_REGWORD "u, %#" FMT_REGWORD "x )",
          SARG1, ARG2, SARG3, ARG4, ARG5, ARG6);
    PRE_REG_READ6(vki_ssize_t, "splice",
                  int, fd_in, vki_loff_t *, off_in,
@@ -5769,7 +5912,8 @@ PRE(sys_splice)
 PRE(sys_tee)
 {
    *flags |= SfMayBlock;
-   PRINT("sys_tree ( %ld, %ld, %lu, %#lx )", SARG1, SARG2, ARG3, ARG4);
+   PRINT("sys_tree ( %ld, %ld, %" FMT_REGWORD "u, %#" FMT_REGWORD "x )",
+         SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(vki_ssize_t, "tee",
                  int, fd_in, int, fd_out,
                  vki_size_t, len, unsigned int, flags);
@@ -5783,7 +5927,8 @@ PRE(sys_vmsplice)
 {
    Int fdfl;
    *flags |= SfMayBlock;
-   PRINT("sys_vmsplice ( %ld, %#lx, %lu, %lu )", SARG1, ARG2, ARG3, ARG4);
+   PRINT("sys_vmsplice ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u )", SARG1, ARG2, ARG3, ARG4);
    PRE_REG_READ4(vki_ssize_t, "splice",
                  int, fd, struct vki_iovec *, iov,
                  unsigned long, nr_segs, unsigned int, flags);
@@ -5794,8 +5939,8 @@ PRE(sys_vmsplice)
    } else {
       const struct vki_iovec *iov;
       PRE_MEM_READ( "vmsplice(iov)", ARG2, sizeof(struct vki_iovec) * ARG3 );
-      for (iov = (struct vki_iovec *)ARG2;
-           iov < (struct vki_iovec *)ARG2 + ARG3; iov++) 
+      for (iov = (struct vki_iovec *)(Addr)ARG2;
+           iov < (struct vki_iovec *)(Addr)ARG2 + ARG3; iov++)
       {
          if (ML_(safe_to_deref) (iov, sizeof(struct vki_iovec))) {
             if ((fdfl & VKI_O_ACCMODE) == VKI_O_RDONLY)
@@ -5818,8 +5963,8 @@ POST(sys_vmsplice)
       if ((fdfl & VKI_O_ACCMODE) == VKI_O_RDONLY)
       {
          const struct vki_iovec *iov;
-         for (iov = (struct vki_iovec *)ARG2;
-              iov < (struct vki_iovec *)ARG2 + ARG3; iov++) 
+         for (iov = (struct vki_iovec *)(Addr)ARG2;
+              iov < (struct vki_iovec *)(Addr)ARG2 + ARG3; iov++)
          {
             POST_MEM_WRITE( (Addr)iov->iov_base, iov->iov_len );
          }
@@ -5883,7 +6028,7 @@ PRE(sys_fcntl)
    case VKI_F_GETSIG:
    case VKI_F_GETLEASE:
    case VKI_F_GETPIPE_SZ:
-      PRINT("sys_fcntl ( %lu, %lu )", ARG1, ARG2);
+      PRINT("sys_fcntl ( %" FMT_REGWORD "u, %" FMT_REGWORD "u )", ARG1, ARG2);
       PRE_REG_READ2(long, "fcntl", unsigned int, fd, unsigned int, cmd);
       break;
 
@@ -5897,7 +6042,8 @@ PRE(sys_fcntl)
    case VKI_F_SETOWN:
    case VKI_F_SETSIG:
    case VKI_F_SETPIPE_SZ:
-      PRINT("sys_fcntl[ARG3=='arg'] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
+      PRINT("sys_fcntl[ARG3=='arg'] ( %" FMT_REGWORD "u, %" FMT_REGWORD
+            "u, %" FMT_REGWORD "u )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd, unsigned long, arg);
       break;
@@ -5909,12 +6055,13 @@ PRE(sys_fcntl)
    case VKI_F_OFD_GETLK:
    case VKI_F_OFD_SETLK:
    case VKI_F_OFD_SETLKW:
-      PRINT("sys_fcntl[ARG3=='lock'] ( %lu, %lu, %#lx )", ARG1, ARG2, ARG3);
+      PRINT("sys_fcntl[ARG3=='lock'] ( %" FMT_REGWORD "u, %" FMT_REGWORD
+            "u, %#" FMT_REGWORD "x )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct vki_flock *, lock);
       {
-         struct vki_flock *lock = (struct vki_flock *) ARG3;
+         struct vki_flock *lock = (struct vki_flock *) (Addr)ARG3;
          PRE_FIELD_READ("fcntl(lock->l_type)", lock->l_type);
          PRE_FIELD_READ("fcntl(lock->l_whence)", lock->l_whence);
          PRE_FIELD_READ("fcntl(lock->l_start)", lock->l_start);
@@ -5929,12 +6076,13 @@ PRE(sys_fcntl)
    case VKI_F_GETLK64:
    case VKI_F_SETLK64:
    case VKI_F_SETLKW64:
-      PRINT("sys_fcntl[ARG3=='lock'] ( %lu, %lu, %#lx )", ARG1, ARG2, ARG3);
+      PRINT("sys_fcntl[ARG3=='lock'] ( %" FMT_REGWORD "u, %" FMT_REGWORD
+            "u, %#" FMT_REGWORD "x )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct flock64 *, lock);
       {
-         struct vki_flock64 *lock = (struct vki_flock64 *) ARG3;
+         struct vki_flock64 *lock = (struct vki_flock64 *) (Addr)ARG3;
          PRE_FIELD_READ("fcntl(lock->l_type)", lock->l_type);
          PRE_FIELD_READ("fcntl(lock->l_whence)", lock->l_whence);
          PRE_FIELD_READ("fcntl(lock->l_start)", lock->l_start);
@@ -5947,7 +6095,8 @@ PRE(sys_fcntl)
 #  endif
 
    case VKI_F_SETOWN_EX:
-      PRINT("sys_fcntl[F_SETOWN_EX] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
+      PRINT("sys_fcntl[F_SETOWN_EX] ( %" FMT_REGWORD "u, %" FMT_REGWORD
+            "u, %" FMT_REGWORD "u )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct vki_f_owner_ex *, arg);
@@ -5955,7 +6104,8 @@ PRE(sys_fcntl)
       break;
 
    case VKI_F_GETOWN_EX:
-      PRINT("sys_fcntl[F_GETOWN_EX] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
+      PRINT("sys_fcntl[F_GETOWN_EX] ( %" FMT_REGWORD "u, %" FMT_REGWORD
+            "u, %" FMT_REGWORD "u )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct vki_f_owner_ex *, arg);
@@ -5963,8 +6113,10 @@ PRE(sys_fcntl)
       break;
 
    default:
-      PRINT("sys_fcntl[UNKNOWN] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
-      VG_(umsg)("Warning: unimplemented fcntl command: %lu\n", ARG2);
+      PRINT("sys_fcntl[UNKNOWN] ( %" FMT_REGWORD "u, %" FMT_REGWORD "u, %"
+            FMT_REGWORD "u )", ARG1, ARG2, ARG3);
+      VG_(umsg)("Warning: unimplemented fcntl command: %" FMT_REGWORD "u\n",
+                ARG2);
       SET_STATUS_Failure( VKI_EINVAL );
       break;
    }
@@ -6000,11 +6152,11 @@ POST(sys_fcntl)
    } else if (ARG2 == VKI_F_GETOWN_EX) {
       POST_MEM_WRITE(ARG3, sizeof(struct vki_f_owner_ex));
    } else if (ARG2 == VKI_F_GETLK || ARG2 == VKI_F_OFD_GETLK) {
-      struct vki_flock *lock = (struct vki_flock *) ARG3;
+      struct vki_flock *lock = (struct vki_flock *) (Addr)ARG3;
       POST_FIELD_WRITE(lock->l_pid);
 #  if defined(VGP_x86_linux) || defined(VGP_mips64_linux)
    } else if (ARG2 == VKI_F_GETLK64) {
-      struct vki_flock64 *lock = (struct vki_flock64 *) ARG3;
+      struct vki_flock64 *lock = (struct vki_flock64 *) (Addr)ARG3;
       PRE_FIELD_WRITE("fcntl(lock->l_pid)", lock->l_pid);
 #  endif
    }
@@ -6022,7 +6174,7 @@ PRE(sys_fcntl64)
    case VKI_F_GETSIG:
    case VKI_F_SETSIG:
    case VKI_F_GETLEASE:
-      PRINT("sys_fcntl64 ( %lu, %lu )", ARG1, ARG2);
+      PRINT("sys_fcntl64 ( %" FMT_REGWORD "u, %" FMT_REGWORD "u )", ARG1, ARG2);
       PRE_REG_READ2(long, "fcntl64", unsigned int, fd, unsigned int, cmd);
       break;
 
@@ -6033,7 +6185,8 @@ PRE(sys_fcntl64)
    case VKI_F_SETFL:
    case VKI_F_SETLEASE:
    case VKI_F_NOTIFY:
-      PRINT("sys_fcntl64[ARG3=='arg'] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
+      PRINT("sys_fcntl64[ARG3=='arg'] ( %" FMT_REGWORD "u, %" FMT_REGWORD
+            "u, %" FMT_REGWORD "u )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl64",
                     unsigned int, fd, unsigned int, cmd, unsigned long, arg);
       break;
@@ -6050,14 +6203,16 @@ PRE(sys_fcntl64)
    case VKI_F_OFD_GETLK:
    case VKI_F_OFD_SETLK:
    case VKI_F_OFD_SETLKW:
-      PRINT("sys_fcntl64[ARG3=='lock'] ( %lu, %lu, %#lx )", ARG1, ARG2, ARG3);
+      PRINT("sys_fcntl64[ARG3=='lock'] ( %" FMT_REGWORD "u, %" FMT_REGWORD
+            "u, %#" FMT_REGWORD "x )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl64",
                     unsigned int, fd, unsigned int, cmd,
                     struct flock64 *, lock);
       break;
 
    case VKI_F_SETOWN_EX:
-      PRINT("sys_fcntl[F_SETOWN_EX] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
+      PRINT("sys_fcntl[F_SETOWN_EX] ( %" FMT_REGWORD "u, %" FMT_REGWORD
+            "u, %" FMT_REGWORD "u )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct vki_f_owner_ex *, arg);
@@ -6065,7 +6220,8 @@ PRE(sys_fcntl64)
       break;
 
    case VKI_F_GETOWN_EX:
-      PRINT("sys_fcntl[F_GETOWN_EX] ( %lu, %lu, %lu )", ARG1, ARG2, ARG3);
+      PRINT("sys_fcntl[F_GETOWN_EX] ( %" FMT_REGWORD "u, %" FMT_REGWORD
+            "u, %" FMT_REGWORD "u )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "fcntl",
                     unsigned int, fd, unsigned int, cmd,
                     struct vki_f_owner_ex *, arg);
@@ -6187,13 +6343,14 @@ PRE(sys_ioctl)
 
    /* DVB */
    case VKI_DMX_STOP:
-      PRINT("sys_ioctl ( %lu, 0x%lx )", ARG1, ARG2);
+      PRINT("sys_ioctl ( %" FMT_REGWORD "u, 0x%" FMT_REGWORD "x )", ARG1, ARG2);
       PRE_REG_READ2(long, "ioctl",
                     unsigned int, fd, unsigned int, request);
       return;
 
    default:
-      PRINT("sys_ioctl ( %lu, 0x%lx, 0x%lx )", ARG1, ARG2, ARG3);
+      PRINT("sys_ioctl ( %" FMT_REGWORD "u, 0x%" FMT_REGWORD "x, 0x%"
+            FMT_REGWORD "x )", ARG1, ARG2, ARG3);
       PRE_REG_READ3(long, "ioctl",
                     unsigned int, fd, unsigned int, request, unsigned long, arg);
       break;
@@ -6206,7 +6363,7 @@ PRE(sys_ioctl)
 
    case VKI_ION_IOC_ALLOC: {
       struct vki_ion_allocation_data* data
-         = (struct vki_ion_allocation_data*)ARG3;
+         = (struct vki_ion_allocation_data*)(Addr)ARG3;
       PRE_FIELD_READ ("ioctl(ION_IOC_ALLOC).len",          data->len);
       PRE_FIELD_READ ("ioctl(ION_IOC_ALLOC).align",        data->align);
       PRE_FIELD_READ ("ioctl(ION_IOC_ALLOC).heap_id_mask", data->heap_id_mask);
@@ -6215,20 +6372,21 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_ION_IOC_MAP: {
-      struct vki_ion_fd_data* data = (struct vki_ion_fd_data*)ARG3;
+      struct vki_ion_fd_data* data = (struct vki_ion_fd_data*)(Addr)ARG3;
       PRE_FIELD_READ ("ioctl(ION_IOC_MAP).handle", data->handle);
       PRE_FIELD_WRITE("ioctl(ION_IOC_MAP).fd",     data->fd);
       break;
    }
    case VKI_ION_IOC_IMPORT: {
-      struct vki_ion_fd_data* data = (struct vki_ion_fd_data*)ARG3;
+      struct vki_ion_fd_data* data = (struct vki_ion_fd_data*)(Addr)ARG3;
       PRE_FIELD_READ ("ioctl(ION_IOC_IMPORT).fd",     data->fd);
       PRE_FIELD_WRITE("ioctl(ION_IOC_IMPORT).handle", data->handle);
       break;
    }
 
    case VKI_SYNC_IOC_MERGE: {
-      struct vki_sync_merge_data* data = (struct vki_sync_merge_data*)ARG3;
+      struct vki_sync_merge_data* data =
+         (struct vki_sync_merge_data*)(Addr)ARG3;
       PRE_FIELD_READ ("ioctl(SYNC_IOC_MERGE).fd2",   data->fd2);
       PRE_MEM_RASCIIZ("ioctl(SYNC_IOC_MERGE).name",  (Addr)(&data->name[0]));
       PRE_FIELD_WRITE("ioctl(SYNC_IOC_MERGE).fence", data->fence);
@@ -6278,7 +6436,7 @@ PRE(sys_ioctl)
       break;
    case VKI_TIOCLINUX:
       PRE_MEM_READ( "ioctl(TIOCLINUX)",   ARG3, sizeof(char *) );
-      if (*(char *)ARG3 == 11) {
+      if (*(char *)(Addr)ARG3 == 11) {
         PRE_MEM_READ( "ioctl(TIOCLINUX, 11)", ARG3, 2 * sizeof(char *) );
       }
       break;
@@ -6326,7 +6484,7 @@ PRE(sys_ioctl)
    case VKI_SG_IO:
       PRE_MEM_READ( "ioctl(SG_IO)", ARG3, sizeof(vki_sg_io_hdr_t) );
       {
-         vki_sg_io_hdr_t *sgio = (vki_sg_io_hdr_t*)ARG3;
+         vki_sg_io_hdr_t *sgio = (vki_sg_io_hdr_t*)(Addr)ARG3;
          PRE_MEM_READ( "ioctl(SG_IO)", (Addr)sgio->cmdp, sgio->cmd_len );
          if ( sgio->dxfer_direction == VKI_SG_DXFER_TO_DEV ||
               sgio->dxfer_direction == VKI_SG_DXFER_TO_FROM_DEV ) {
@@ -6364,8 +6522,8 @@ PRE(sys_ioctl)
       break;
    case VKI_IIOCNETGPN:
       PRE_MEM_READ( "ioctl(IIOCNETGPN)",
-                    (Addr)&((vki_isdn_net_ioctl_phone *)ARG3)->name,
-                    sizeof(((vki_isdn_net_ioctl_phone *)ARG3)->name) );
+                    (Addr)&((vki_isdn_net_ioctl_phone *)(Addr)ARG3)->name,
+                    sizeof(((vki_isdn_net_ioctl_phone *)(Addr)ARG3)->name) );
       PRE_MEM_WRITE( "ioctl(IIOCNETGPN)", ARG3,
                     sizeof(vki_isdn_net_ioctl_phone) );
       break;
@@ -6373,67 +6531,67 @@ PRE(sys_ioctl)
       /* These all use struct ifreq AFAIK */
    case VKI_SIOCGIFINDEX:        /* get iface index              */
       PRE_MEM_RASCIIZ( "ioctl(SIOCGIFINDEX)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_WRITE( "ioctl(SIOCGIFINDEX)", ARG3, sizeof(struct vki_ifreq));
       break;
    case VKI_SIOCGIFFLAGS:        /* get flags                    */
       PRE_MEM_RASCIIZ( "ioctl(SIOCGIFFLAGS)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_WRITE( "ioctl(SIOCGIFFLAGS)", ARG3, sizeof(struct vki_ifreq));
       break;
    case VKI_SIOCGIFHWADDR:       /* Get hardware address         */
       PRE_MEM_RASCIIZ( "ioctl(SIOCGIFHWADDR)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_WRITE( "ioctl(SIOCGIFHWADDR)", ARG3, sizeof(struct vki_ifreq));
       break;
    case VKI_SIOCGIFMTU:          /* get MTU size                 */
       PRE_MEM_RASCIIZ( "ioctl(SIOCGIFMTU)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_WRITE( "ioctl(SIOCGIFMTU)", ARG3, sizeof(struct vki_ifreq));
       break;
    case VKI_SIOCGIFADDR:         /* get PA address               */
       PRE_MEM_RASCIIZ( "ioctl(SIOCGIFADDR)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_WRITE( "ioctl(SIOCGIFADDR)", ARG3, sizeof(struct vki_ifreq));
       break;
    case VKI_SIOCGIFNETMASK:      /* get network PA mask          */
       PRE_MEM_RASCIIZ( "ioctl(SIOCGIFNETMASK)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_WRITE( "ioctl(SIOCGIFNETMASK)", ARG3, sizeof(struct vki_ifreq));
       break;
    case VKI_SIOCGIFMETRIC:       /* get metric                   */
       PRE_MEM_RASCIIZ( "ioctl(SIOCGIFMETRIC)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_WRITE( "ioctl(SIOCGIFMETRIC)", ARG3, sizeof(struct vki_ifreq));
       break;
    case VKI_SIOCGIFMAP:          /* Get device parameters        */
       PRE_MEM_RASCIIZ( "ioctl(SIOCGIFMAP)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_WRITE( "ioctl(SIOCGIFMAP)", ARG3, sizeof(struct vki_ifreq));
       break;
    case VKI_SIOCGIFTXQLEN:       /* Get the tx queue length      */
       PRE_MEM_RASCIIZ( "ioctl(SIOCGIFTXQLEN)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_WRITE( "ioctl(SIOCGIFTXQLEN)", ARG3, sizeof(struct vki_ifreq));
       break;
    case VKI_SIOCGIFDSTADDR:      /* get remote PA address        */
       PRE_MEM_RASCIIZ( "ioctl(SIOCGIFDSTADDR)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_WRITE( "ioctl(SIOCGIFDSTADDR)", ARG3, sizeof(struct vki_ifreq));
       break;
    case VKI_SIOCGIFBRDADDR:      /* get broadcast PA address     */
       PRE_MEM_RASCIIZ( "ioctl(SIOCGIFBRDADDR)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_WRITE( "ioctl(SIOCGIFBRDADDR)", ARG3, sizeof(struct vki_ifreq));
       break;
    case VKI_SIOCGIFNAME:         /* get iface name               */
       PRE_MEM_READ( "ioctl(SIOCGIFNAME)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_ifindex,
-                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_ifindex) );
+                     (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_ifindex,
+                     sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_ifindex));
       PRE_MEM_WRITE( "ioctl(SIOCGIFNAME)", ARG3, sizeof(struct vki_ifreq));
       break;
    case VKI_SIOCETHTOOL: {       /* ethtool(8) interface         */
-      struct vki_ifreq *ir = (struct vki_ifreq *)ARG3;
+      struct vki_ifreq *ir = (struct vki_ifreq *)(Addr)ARG3;
       PRE_MEM_READ( "ioctl(SIOCETHTOOL)", (Addr)ir, sizeof(struct vki_ifreq) );
       PRE_MEM_RASCIIZ( "ioctl(SIOCETHTOOL)", (Addr)ir->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCETHTOOL)", (Addr)ir->vki_ifr_data, sizeof(vki_u32) );
@@ -6555,18 +6713,18 @@ PRE(sys_ioctl)
    }
    case VKI_SIOCGMIIPHY:         /* get hardware entry           */
       PRE_MEM_RASCIIZ( "ioctl(SIOCGIFMIIPHY)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_WRITE( "ioctl(SIOCGIFMIIPHY)", ARG3, sizeof(struct vki_ifreq));
       break;
    case VKI_SIOCGMIIREG:         /* get hardware entry registers */
       PRE_MEM_RASCIIZ( "ioctl(SIOCGIFMIIREG)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCGIFMIIREG)",
-                     (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->phy_id,
-                     sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->phy_id) );
+                     (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->phy_id,
+                     sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->phy_id));
       PRE_MEM_READ( "ioctl(SIOCGIFMIIREG)",
-                     (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->reg_num,
-                     sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->reg_num) );
+                     (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->reg_num,
+                     sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->reg_num));
       PRE_MEM_WRITE( "ioctl(SIOCGIFMIIREG)", ARG3, 
                     sizeof(struct vki_ifreq));
       break;
@@ -6578,15 +6736,15 @@ PRE(sys_ioctl)
         POST_MEM_WRITE(ARG3, sizeof(struct ifconf));
       */
       PRE_MEM_READ( "ioctl(SIOCGIFCONF)",
-                    (Addr)&((struct vki_ifconf *)ARG3)->ifc_len,
-                    sizeof(((struct vki_ifconf *)ARG3)->ifc_len));
+                    (Addr)&((struct vki_ifconf *)(Addr)ARG3)->ifc_len,
+                    sizeof(((struct vki_ifconf *)(Addr)ARG3)->ifc_len));
       PRE_MEM_READ( "ioctl(SIOCGIFCONF)",
-                    (Addr)&((struct vki_ifconf *)ARG3)->vki_ifc_buf,
-                    sizeof(((struct vki_ifconf *)ARG3)->vki_ifc_buf));
+                    (Addr)&((struct vki_ifconf *)(Addr)ARG3)->vki_ifc_buf,
+                    sizeof(((struct vki_ifconf *)(Addr)ARG3)->vki_ifc_buf));
       if ( ARG3 ) {
         // TODO len must be readable and writable
         // buf pointer only needs to be readable
-        struct vki_ifconf *ifc = (struct vki_ifconf *) ARG3;
+        struct vki_ifconf *ifc = (struct vki_ifconf *) (Addr)ARG3;
         PRE_MEM_WRITE( "ioctl(SIOCGIFCONF).ifc_buf",
                        (Addr)(ifc->vki_ifc_buf), ifc->ifc_len );
       }
@@ -6611,75 +6769,75 @@ PRE(sys_ioctl)
                     
    case VKI_SIOCSIFFLAGS:        /* set flags                    */
       PRE_MEM_RASCIIZ( "ioctl(SIOCSIFFLAGS)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCSIFFLAGS)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_flags,
-                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_flags) );
+                     (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_flags,
+                     sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_flags) );
       break;
    case VKI_SIOCSIFMAP:          /* Set device parameters        */
       PRE_MEM_RASCIIZ( "ioctl(SIOCSIFMAP)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCSIFMAP)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_map,
-                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_map) );
+                     (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_map,
+                     sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_map) );
       break;
    case VKI_SIOCSHWTSTAMP:       /* Set hardware time stamping   */
       PRE_MEM_RASCIIZ( "ioctl(SIOCSHWTSTAMP)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCSHWTSTAMP)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_data,
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data,
                      sizeof(struct vki_hwtstamp_config) );
       break;
    case VKI_SIOCSIFTXQLEN:       /* Set the tx queue length      */
       PRE_MEM_RASCIIZ( "ioctl(SIOCSIFTXQLEN)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCSIFTXQLEN)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_qlen,
-                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_qlen) );
+                     (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_qlen,
+                     sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_qlen) );
       break;
    case VKI_SIOCSIFADDR:         /* set PA address               */
    case VKI_SIOCSIFDSTADDR:      /* set remote PA address        */
    case VKI_SIOCSIFBRDADDR:      /* set broadcast PA address     */
    case VKI_SIOCSIFNETMASK:      /* set network PA mask          */
       PRE_MEM_RASCIIZ( "ioctl(SIOCSIF*ADDR)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCSIF*ADDR)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_addr,
-                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_addr) );
+                     (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_addr,
+                     sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_addr) );
       break;
    case VKI_SIOCSIFMETRIC:       /* set metric                   */
       PRE_MEM_RASCIIZ( "ioctl(SIOCSIFMETRIC)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCSIFMETRIC)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_metric,
-                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_metric) );
+                     (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_metric,
+                     sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_metric) );
       break;
    case VKI_SIOCSIFMTU:          /* set MTU size                 */
       PRE_MEM_RASCIIZ( "ioctl(SIOCSIFMTU)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCSIFMTU)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_mtu,
-                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_mtu) );
+                     (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_mtu,
+                     sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_mtu) );
       break;
    case VKI_SIOCSIFHWADDR:       /* set hardware address         */
       PRE_MEM_RASCIIZ( "ioctl(SIOCSIFHWADDR)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCSIFHWADDR)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_hwaddr,
-                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_hwaddr) );
+                     (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_hwaddr,
+                     sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_hwaddr) );
       break;
    case VKI_SIOCSMIIREG:         /* set hardware entry registers */
       PRE_MEM_RASCIIZ( "ioctl(SIOCSMIIREG)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(SIOCSMIIREG)",
-                     (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->phy_id,
-                     sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->phy_id) );
+                     (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->phy_id,
+                     sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->phy_id));
       PRE_MEM_READ( "ioctl(SIOCSMIIREG)",
-                     (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->reg_num,
-                     sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->reg_num) );
+                     (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->reg_num,
+                     sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->reg_num));
       PRE_MEM_READ( "ioctl(SIOCSMIIREG)",
-                     (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->val_in,
-                     sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->val_in) );
+                     (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->val_in,
+                     sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->val_in));
       break;
       /* Routing table calls.  */
    case VKI_SIOCADDRT:           /* add routing table entry      */
@@ -6694,10 +6852,10 @@ PRE(sys_ioctl)
       break;
    case VKI_TUNSETIFF:
       PRE_MEM_RASCIIZ( "ioctl(TUNSETIFF)",
-                     (Addr)((struct vki_ifreq *)ARG3)->vki_ifr_name );
+                     (Addr)((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name );
       PRE_MEM_READ( "ioctl(TUNSETIFF)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_flags,
-                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_flags) );
+                     (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_flags,
+                     sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_flags) );
       PRE_MEM_WRITE( "ioctl(TUNSETIFF)", ARG3, sizeof(struct vki_ifreq) );
       break;
    case VKI_TUNSETPERSIST:
@@ -6727,8 +6885,8 @@ PRE(sys_ioctl)
       break;
    case VKI_TUNSETQUEUE:
       PRE_MEM_READ( "ioctl(TUNSETQUEUE)",
-                     (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_flags,
-                     sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_flags) );
+                     (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_flags,
+                     sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_flags) );
       break;
    case VKI_TUNSETIFINDEX:
       PRE_MEM_READ( "ioctl(TUNSETIFINDEX)", ARG3, sizeof(unsigned int));
@@ -6828,7 +6986,8 @@ PRE(sys_ioctl)
       PRE_MEM_WRITE( "ioctl(SNDRV_CTL_IOCTL_CARD_INFO)", (Addr)ARG3, sizeof(struct vki_snd_ctl_card_info) );
       break;
    case VKI_SNDRV_CTL_IOCTL_ELEM_LIST: {
-      struct vki_snd_ctl_elem_list *data = (struct vki_snd_ctl_elem_list *)ARG3;
+      struct vki_snd_ctl_elem_list *data =
+         (struct vki_snd_ctl_elem_list *)(Addr)ARG3;
       PRE_MEM_READ( "ioctl(SNDRV_CTL_IOCTL_ELEM_LIST)", (Addr)&data->offset, sizeof(data->offset) );
       PRE_MEM_READ( "ioctl(SNDRV_CTL_IOCTL_ELEM_LIST)", (Addr)&data->space, sizeof(data->space) );
       PRE_MEM_WRITE( "ioctl(SNDRV_CTL_IOCTL_ELEM_LIST)", (Addr)&data->used, sizeof(data->used) );
@@ -6840,7 +6999,7 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_SNDRV_CTL_IOCTL_TLV_READ: {
-      struct vki_snd_ctl_tlv *data = (struct vki_snd_ctl_tlv *)ARG3;
+      struct vki_snd_ctl_tlv *data = (struct vki_snd_ctl_tlv *)(Addr)ARG3;
       PRE_MEM_READ( "ioctl(SNDRV_CTL_IOCTL_TLV_READ)", (Addr)&data->numid, sizeof(data->numid) );
       PRE_MEM_READ( "ioctl(SNDRV_CTL_IOCTL_TLV_READ)", (Addr)&data->length, sizeof(data->length) );
       PRE_MEM_WRITE( "ioctl(SNDRV_CTL_IOCTL_TLV_READ)", (Addr)data->tlv, data->length );
@@ -6848,7 +7007,7 @@ PRE(sys_ioctl)
    }
    case VKI_SNDRV_CTL_IOCTL_TLV_WRITE:
    case VKI_SNDRV_CTL_IOCTL_TLV_COMMAND: {
-      struct vki_snd_ctl_tlv *data = (struct vki_snd_ctl_tlv *)ARG3;
+      struct vki_snd_ctl_tlv *data = (struct vki_snd_ctl_tlv *)(Addr)ARG3;
       PRE_MEM_READ( "ioctl(SNDRV_CTL_IOCTL_TLV_WRITE)", (Addr)&data->numid, sizeof(data->numid) );
       PRE_MEM_READ( "ioctl(SNDRV_CTL_IOCTL_TLV_WRITE)", (Addr)&data->length, sizeof(data->length) );
       PRE_MEM_READ( "ioctl(SNDRV_CTL_IOCTL_TLV_WRITE)", (Addr)data->tlv, data->length );
@@ -6959,8 +7118,8 @@ PRE(sys_ioctl)
       break;
    case VKI_CDROMSUBCHNL:
       PRE_MEM_READ( "ioctl(CDROMSUBCHNL (cdsc_format, char))",
-                   (Addr) &(((struct vki_cdrom_subchnl*) ARG3)->cdsc_format),
-                   sizeof(((struct vki_cdrom_subchnl*) ARG3)->cdsc_format));
+                   (Addr) &(((struct vki_cdrom_subchnl*) (Addr)ARG3)->cdsc_format),
+                   sizeof(((struct vki_cdrom_subchnl*) (Addr)ARG3)->cdsc_format));
       PRE_MEM_WRITE( "ioctl(CDROMSUBCHNL)", ARG3, 
                     sizeof(struct vki_cdrom_subchnl));
       break;
@@ -6978,11 +7137,11 @@ PRE(sys_ioctl)
       break;
    case VKI_CDROMREADTOCENTRY:
       PRE_MEM_READ( "ioctl(CDROMREADTOCENTRY (cdte_format, char))",
-                   (Addr) &(((struct vki_cdrom_tocentry*) ARG3)->cdte_format),
-                   sizeof(((struct vki_cdrom_tocentry*) ARG3)->cdte_format));
+                   (Addr) &(((struct vki_cdrom_tocentry*) (Addr)ARG3)->cdte_format),
+                   sizeof(((struct vki_cdrom_tocentry*) (Addr)ARG3)->cdte_format));
       PRE_MEM_READ( "ioctl(CDROMREADTOCENTRY (cdte_track, char))",
-                   (Addr) &(((struct vki_cdrom_tocentry*) ARG3)->cdte_track), 
-                   sizeof(((struct vki_cdrom_tocentry*) ARG3)->cdte_track));
+                   (Addr) &(((struct vki_cdrom_tocentry*) (Addr)ARG3)->cdte_track),
+                   sizeof(((struct vki_cdrom_tocentry*) (Addr)ARG3)->cdte_track));
       PRE_MEM_WRITE( "ioctl(CDROMREADTOCENTRY)", ARG3, 
                     sizeof(struct vki_cdrom_tocentry));
       break;
@@ -7003,7 +7162,8 @@ PRE(sys_ioctl)
                     sizeof (struct vki_cdrom_read_audio));
       if ( ARG3 ) {
          /* ToDo: don't do any of the following if the structure is invalid */
-         struct vki_cdrom_read_audio *cra = (struct vki_cdrom_read_audio *) ARG3;
+         struct vki_cdrom_read_audio *cra =
+            (struct vki_cdrom_read_audio *) (Addr)ARG3;
         PRE_MEM_WRITE( "ioctl(CDROMREADAUDIO).buf",
                        (Addr)(cra->buf), cra->nframes * VKI_CD_FRAMESIZE_RAW);
       }
@@ -7117,7 +7277,8 @@ PRE(sys_ioctl)
       PRE_MEM_READ( "ioctl(GIO_FONTX)", ARG3, sizeof(struct vki_consolefontdesc) );
       if ( ARG3 ) {
          /* ToDo: don't do any of the following if the structure is invalid */
-         struct vki_consolefontdesc *cfd = (struct vki_consolefontdesc *)ARG3;
+         struct vki_consolefontdesc *cfd =
+            (struct vki_consolefontdesc *)(Addr)ARG3;
          PRE_MEM_WRITE( "ioctl(GIO_FONTX).chardata", (Addr)cfd->chardata,
                         32 * cfd->charcount );
       }
@@ -7126,7 +7287,8 @@ PRE(sys_ioctl)
       PRE_MEM_READ( "ioctl(PIO_FONTX)", ARG3, sizeof(struct vki_consolefontdesc) );
       if ( ARG3 ) {
          /* ToDo: don't do any of the following if the structure is invalid */
-         struct vki_consolefontdesc *cfd = (struct vki_consolefontdesc *)ARG3;
+         struct vki_consolefontdesc *cfd =
+            (struct vki_consolefontdesc *)(Addr)ARG3;
          PRE_MEM_READ( "ioctl(PIO_FONTX).chardata", (Addr)cfd->chardata,
                        32 * cfd->charcount );
       }
@@ -7189,7 +7351,7 @@ PRE(sys_ioctl)
 
    case VKI_GIO_UNIMAP:
       if ( ARG3 ) {
-         struct vki_unimapdesc *desc = (struct vki_unimapdesc *) ARG3;
+         struct vki_unimapdesc *desc = (struct vki_unimapdesc *) (Addr)ARG3;
          PRE_MEM_READ( "ioctl(GIO_UNIMAP)", (Addr)&desc->entry_ct,
                        sizeof(unsigned short));
          PRE_MEM_READ( "ioctl(GIO_UNIMAP)", (Addr)&desc->entries,
@@ -7200,7 +7362,7 @@ PRE(sys_ioctl)
       break;
    case VKI_PIO_UNIMAP:
       if ( ARG3 ) {
-         struct vki_unimapdesc *desc = (struct vki_unimapdesc *) ARG3;
+         struct vki_unimapdesc *desc = (struct vki_unimapdesc *) (Addr)ARG3;
          PRE_MEM_READ( "ioctl(GIO_UNIMAP)", (Addr)&desc->entry_ct,
                        sizeof(unsigned short) );
          PRE_MEM_READ( "ioctl(GIO_UNIMAP)", (Addr)&desc->entries,
@@ -7233,41 +7395,41 @@ PRE(sys_ioctl)
       
    case VKI_KDGKBENT:
       PRE_MEM_READ( "ioctl(KDGKBENT).kb_table",
-                    (Addr)&((struct vki_kbentry *)ARG3)->kb_table,
-                    sizeof(((struct vki_kbentry *)ARG3)->kb_table) );
+                    (Addr)&((struct vki_kbentry *)(Addr)ARG3)->kb_table,
+                    sizeof(((struct vki_kbentry *)(Addr)ARG3)->kb_table) );
       PRE_MEM_READ( "ioctl(KDGKBENT).kb_index",
-                    (Addr)&((struct vki_kbentry *)ARG3)->kb_index,
-                    sizeof(((struct vki_kbentry *)ARG3)->kb_index) );
+                    (Addr)&((struct vki_kbentry *)(Addr)ARG3)->kb_index,
+                    sizeof(((struct vki_kbentry *)(Addr)ARG3)->kb_index) );
       PRE_MEM_WRITE( "ioctl(KDGKBENT).kb_value",
-                    (Addr)&((struct vki_kbentry *)ARG3)->kb_value,
-                    sizeof(((struct vki_kbentry *)ARG3)->kb_value) );
+                    (Addr)&((struct vki_kbentry *)(Addr)ARG3)->kb_value,
+                    sizeof(((struct vki_kbentry *)(Addr)ARG3)->kb_value) );
       break;
    case VKI_KDSKBENT:
       PRE_MEM_READ( "ioctl(KDSKBENT).kb_table",
-                    (Addr)&((struct vki_kbentry *)ARG3)->kb_table,
-                    sizeof(((struct vki_kbentry *)ARG3)->kb_table) );
+                    (Addr)&((struct vki_kbentry *)(Addr)ARG3)->kb_table,
+                    sizeof(((struct vki_kbentry *)(Addr)ARG3)->kb_table) );
       PRE_MEM_READ( "ioctl(KDSKBENT).kb_index",
-                    (Addr)&((struct vki_kbentry *)ARG3)->kb_index,
-                    sizeof(((struct vki_kbentry *)ARG3)->kb_index) );
+                    (Addr)&((struct vki_kbentry *)(Addr)ARG3)->kb_index,
+                    sizeof(((struct vki_kbentry *)(Addr)ARG3)->kb_index) );
       PRE_MEM_READ( "ioctl(KDSKBENT).kb_value",
-                    (Addr)&((struct vki_kbentry *)ARG3)->kb_value,
-                    sizeof(((struct vki_kbentry *)ARG3)->kb_value) );
+                    (Addr)&((struct vki_kbentry *)(Addr)ARG3)->kb_value,
+                    sizeof(((struct vki_kbentry *)(Addr)ARG3)->kb_value) );
       break;
       
    case VKI_KDGKBSENT:
       PRE_MEM_READ( "ioctl(KDGKBSENT).kb_func",
-                    (Addr)&((struct vki_kbsentry *)ARG3)->kb_func,
-                    sizeof(((struct vki_kbsentry *)ARG3)->kb_func) );
+                    (Addr)&((struct vki_kbsentry *)(Addr)ARG3)->kb_func,
+                    sizeof(((struct vki_kbsentry *)(Addr)ARG3)->kb_func) );
       PRE_MEM_WRITE( "ioctl(KDGKSENT).kb_string",
-                    (Addr)((struct vki_kbsentry *)ARG3)->kb_string,
-                    sizeof(((struct vki_kbsentry *)ARG3)->kb_string) );
+                    (Addr)((struct vki_kbsentry *)(Addr)ARG3)->kb_string,
+                    sizeof(((struct vki_kbsentry *)(Addr)ARG3)->kb_string) );
       break;
    case VKI_KDSKBSENT:
       PRE_MEM_READ( "ioctl(KDSKBSENT).kb_func",
-                    (Addr)&((struct vki_kbsentry *)ARG3)->kb_func,
-                    sizeof(((struct vki_kbsentry *)ARG3)->kb_func) );
+                    (Addr)&((struct vki_kbsentry *)(Addr)ARG3)->kb_func,
+                    sizeof(((struct vki_kbsentry *)(Addr)ARG3)->kb_func) );
       PRE_MEM_RASCIIZ( "ioctl(KDSKBSENT).kb_string",
-                       (Addr)((struct vki_kbsentry *)ARG3)->kb_string );
+                       (Addr)((struct vki_kbsentry *)(Addr)ARG3)->kb_string );
       break;
       
    case VKI_KDGKBDIACR:
@@ -7279,19 +7441,19 @@ PRE(sys_ioctl)
       
    case VKI_KDGETKEYCODE:
       PRE_MEM_READ( "ioctl(KDGETKEYCODE).scancode",
-                    (Addr)&((struct vki_kbkeycode *)ARG3)->scancode,
-                    sizeof(((struct vki_kbkeycode *)ARG3)->scancode) );
+                    (Addr)&((struct vki_kbkeycode *)(Addr)ARG3)->scancode,
+                    sizeof(((struct vki_kbkeycode *)(Addr)ARG3)->scancode) );
       PRE_MEM_WRITE( "ioctl(KDGETKEYCODE).keycode",
-                    (Addr)((struct vki_kbkeycode *)ARG3)->keycode,
-                    sizeof(((struct vki_kbkeycode *)ARG3)->keycode) );
+                    (Addr)((struct vki_kbkeycode *)(Addr)ARG3)->keycode,
+                    sizeof(((struct vki_kbkeycode *)(Addr)ARG3)->keycode) );
       break;
    case VKI_KDSETKEYCODE:
       PRE_MEM_READ( "ioctl(KDSETKEYCODE).scancode",
-                    (Addr)&((struct vki_kbkeycode *)ARG3)->scancode,
-                    sizeof(((struct vki_kbkeycode *)ARG3)->scancode) );
+                    (Addr)&((struct vki_kbkeycode *)(Addr)ARG3)->scancode,
+                    sizeof(((struct vki_kbkeycode *)(Addr)ARG3)->scancode) );
       PRE_MEM_READ( "ioctl(KDSETKEYCODE).keycode",
-                    (Addr)((struct vki_kbkeycode *)ARG3)->keycode,
-                    sizeof(((struct vki_kbkeycode *)ARG3)->keycode) );
+                    (Addr)((struct vki_kbkeycode *)(Addr)ARG3)->keycode,
+                    sizeof(((struct vki_kbkeycode *)(Addr)ARG3)->keycode) );
       break;
       
    case VKI_KDSIGACCEPT:
@@ -7303,7 +7465,8 @@ PRE(sys_ioctl)
 
    case VKI_KDFONTOP:
       if ( ARG3 ) {
-         struct vki_console_font_op *op = (struct vki_console_font_op *) ARG3;
+         struct vki_console_font_op *op =
+            (struct vki_console_font_op *) (Addr)ARG3;
          PRE_MEM_READ( "ioctl(KDFONTOP)", (Addr)op,
                        sizeof(struct vki_console_font_op) );
          switch ( op->op ) {
@@ -7340,11 +7503,11 @@ PRE(sys_ioctl)
       break;
    case VKI_VT_GETSTATE:
       PRE_MEM_WRITE( "ioctl(VT_GETSTATE).v_active",
-                     (Addr) &(((struct vki_vt_stat*) ARG3)->v_active),
-                     sizeof(((struct vki_vt_stat*) ARG3)->v_active));
+                     (Addr) &(((struct vki_vt_stat*) (Addr)ARG3)->v_active),
+                     sizeof(((struct vki_vt_stat*) (Addr)ARG3)->v_active));
       PRE_MEM_WRITE( "ioctl(VT_GETSTATE).v_state",
-                     (Addr) &(((struct vki_vt_stat*) ARG3)->v_state),
-                     sizeof(((struct vki_vt_stat*) ARG3)->v_state));
+                     (Addr) &(((struct vki_vt_stat*) (Addr)ARG3)->v_state),
+                     sizeof(((struct vki_vt_stat*) (Addr)ARG3)->v_state));
       break;
    case VKI_VT_RELDISP:
    case VKI_VT_ACTIVATE:
@@ -7363,7 +7526,8 @@ PRE(sys_ioctl)
 
    case VKI_USBDEVFS_CONTROL:
       if ( ARG3 ) {
-         struct vki_usbdevfs_ctrltransfer *vkuc = (struct vki_usbdevfs_ctrltransfer *)ARG3;
+         struct vki_usbdevfs_ctrltransfer *vkuc =
+            (struct vki_usbdevfs_ctrltransfer *)(Addr)ARG3;
          PRE_MEM_READ( "ioctl(USBDEVFS_CONTROL).bRequestType", (Addr)&vkuc->bRequestType, sizeof(vkuc->bRequestType));
          PRE_MEM_READ( "ioctl(USBDEVFS_CONTROL).bRequest", (Addr)&vkuc->bRequest, sizeof(vkuc->bRequest));
          PRE_MEM_READ( "ioctl(USBDEVFS_CONTROL).wValue", (Addr)&vkuc->wValue, sizeof(vkuc->wValue));
@@ -7378,7 +7542,8 @@ PRE(sys_ioctl)
       break;
    case VKI_USBDEVFS_BULK:
       if ( ARG3 ) {
-         struct vki_usbdevfs_bulktransfer *vkub = (struct vki_usbdevfs_bulktransfer *)ARG3;
+         struct vki_usbdevfs_bulktransfer *vkub =
+            (struct vki_usbdevfs_bulktransfer *)(Addr)ARG3;
          PRE_MEM_READ( "ioctl(USBDEVFS_BULK)", ARG3, sizeof(struct vki_usbdevfs_bulktransfer));
          if (vkub->ep & 0x80)
             PRE_MEM_WRITE( "ioctl(USBDEVFS_BULK).data", (Addr)vkub->data, vkub->len);
@@ -7388,13 +7553,14 @@ PRE(sys_ioctl)
       break;
    case VKI_USBDEVFS_GETDRIVER:
       if ( ARG3 ) {
-         struct vki_usbdevfs_getdriver *vkugd = (struct vki_usbdevfs_getdriver *) ARG3;
+         struct vki_usbdevfs_getdriver *vkugd =
+            (struct vki_usbdevfs_getdriver *) (Addr)ARG3;
          PRE_MEM_WRITE( "ioctl(USBDEVFS_GETDRIVER)", (Addr)&vkugd->driver, sizeof(vkugd->driver));
       }
       break;
    case VKI_USBDEVFS_SUBMITURB:
       if ( ARG3 ) {
-         struct vki_usbdevfs_urb *vkuu = (struct vki_usbdevfs_urb *)ARG3;
+         struct vki_usbdevfs_urb *vkuu = (struct vki_usbdevfs_urb *)(Addr)ARG3;
 
          /* Not the whole struct needs to be initialized */
          PRE_MEM_READ( "ioctl(USBDEVFS_SUBMITURB).endpoint", (Addr)&vkuu->endpoint, sizeof(vkuu->endpoint));
@@ -7454,7 +7620,8 @@ PRE(sys_ioctl)
       break;
    case VKI_USBDEVFS_IOCTL:
       if ( ARG3 ) {
-         struct vki_usbdevfs_ioctl *vkui = (struct vki_usbdevfs_ioctl *)ARG3;
+         struct vki_usbdevfs_ioctl *vkui =
+            (struct vki_usbdevfs_ioctl *)(Addr)ARG3;
          UInt dir2, size2;
          PRE_MEM_READ("ioctl(USBDEVFS_IOCTL)", (Addr)vkui, sizeof(struct vki_usbdevfs_ioctl));
          dir2  = _VKI_IOC_DIR(vkui->ioctl_code);
@@ -7481,7 +7648,8 @@ PRE(sys_ioctl)
       break;
    case VKI_I2C_RDWR:
       if ( ARG3 ) {
-          struct vki_i2c_rdwr_ioctl_data *vkui = (struct vki_i2c_rdwr_ioctl_data *)ARG3;
+          struct vki_i2c_rdwr_ioctl_data *vkui =
+             (struct vki_i2c_rdwr_ioctl_data *)(Addr)ARG3;
           UInt i;
           PRE_MEM_READ("ioctl(I2C_RDWR)", (Addr)vkui, sizeof(struct vki_i2c_rdwr_ioctl_data));
           for (i=0; i < vkui->nmsgs; i++) {
@@ -7497,7 +7665,7 @@ PRE(sys_ioctl)
    case VKI_I2C_SMBUS:
        if ( ARG3 ) {
             struct vki_i2c_smbus_ioctl_data *vkis
-               = (struct vki_i2c_smbus_ioctl_data *) ARG3;
+               = (struct vki_i2c_smbus_ioctl_data *) (Addr)ARG3;
             PRE_MEM_READ("ioctl(VKI_I2C_SMBUS).i2c_smbus_ioctl_data.read_write",
                          (Addr)&vkis->read_write, sizeof(vkis->read_write));
             PRE_MEM_READ("ioctl(VKI_I2C_SMBUS).i2c_smbus_ioctl_data.size",
@@ -7577,8 +7745,8 @@ PRE(sys_ioctl)
    case VKI_SIOCGIWNAME:
       if (ARG3) {
          PRE_MEM_WRITE("ioctl(SIOCGIWNAME)",
-                       (Addr)((struct vki_iwreq *)ARG3)->u.name,
-                       sizeof(((struct vki_iwreq *)ARG3)->u.name));
+                       (Addr)((struct vki_iwreq *)(Addr)ARG3)->u.name,
+                       sizeof(((struct vki_iwreq *)(Addr)ARG3)->u.name));
       }
       break;
    case VKI_SIOCGIWNWID:
@@ -7593,21 +7761,21 @@ PRE(sys_ioctl)
       if (ARG3) {
          PRE_MEM_WRITE("ioctl(SIOCGIW[NWID|SENS|RATE|RTS|FRAG|TXPOW|"
                        "RETRY|PARAM|AUTH])",
-                       (Addr)&((struct vki_iwreq *)ARG3)->u.nwid,
+                       (Addr)&((struct vki_iwreq *)(Addr)ARG3)->u.nwid,
                        sizeof(struct vki_iw_param));
       }
       break;
    case VKI_SIOCGIWFREQ:
       if (ARG3) {
          PRE_MEM_WRITE("ioctl(SIOCGIWFREQ",
-                       (Addr)&((struct vki_iwreq *)ARG3)->u.freq,
+                       (Addr)&((struct vki_iwreq *)(Addr)ARG3)->u.freq,
                        sizeof(struct vki_iw_freq));
       }
       break;
    case VKI_SIOCGIWMODE:
       if (ARG3) {
          PRE_MEM_WRITE("ioctl(SIOCGIWMODE",
-                       (Addr)&((struct vki_iwreq *)ARG3)->u.mode,
+                       (Addr)&((struct vki_iwreq *)(Addr)ARG3)->u.mode,
                        sizeof(__vki_u32));
       }
       break;
@@ -7625,7 +7793,7 @@ PRE(sys_ioctl)
    case VKI_SIOCGIWENCODEEXT:
       if (ARG3) {
          struct vki_iw_point* point;
-         point = &((struct vki_iwreq *)ARG3)->u.data;
+         point = &((struct vki_iwreq *)(Addr)ARG3)->u.data;
          PRE_MEM_WRITE("ioctl(SIOCGIW[RANGE|PRIV|STATS|SPY|THRSPY|"
                        "APLIST|SCAN|ESSID|NICKN|ENCODE|GENIE|ENCODEEXT])",
                        (Addr)point->pointer, point->length);
@@ -7634,7 +7802,7 @@ PRE(sys_ioctl)
    case VKI_SIOCGIWAP:
       if (ARG3) {
          PRE_MEM_WRITE("ioctl(SIOCGIWAP)",
-                       (Addr)&((struct vki_iwreq *)ARG3)->u.ap_addr,
+                       (Addr)&((struct vki_iwreq *)(Addr)ARG3)->u.ap_addr,
                        sizeof(struct vki_sockaddr));
       }
       break;
@@ -7680,7 +7848,7 @@ PRE(sys_ioctl)
    case VKI_BINDER_WRITE_READ:
        if (ARG3) {
            struct vki_binder_write_read* bwr
-              = (struct vki_binder_write_read*)ARG3;
+              = (struct vki_binder_write_read*)(Addr)ARG3;
 
            PRE_FIELD_READ("ioctl(BINDER_WRITE_READ).write_buffer",
                           bwr->write_buffer);
@@ -7717,7 +7885,8 @@ PRE(sys_ioctl)
        break;
    case VKI_BINDER_VERSION:
        if (ARG3) {
-           struct vki_binder_version* bv = (struct vki_binder_version*)ARG3;
+           struct vki_binder_version* bv =
+              (struct vki_binder_version*)(Addr)ARG3;
            PRE_FIELD_WRITE("ioctl(BINDER_VERSION)", bv->protocol_version);
        }
        break;
@@ -7725,7 +7894,8 @@ PRE(sys_ioctl)
 
    case VKI_HCIGETDEVLIST:
       if (ARG3) {
-         struct vki_hci_dev_list_req* dlr = (struct vki_hci_dev_list_req*)ARG3;
+         struct vki_hci_dev_list_req* dlr =
+            (struct vki_hci_dev_list_req*)(Addr)ARG3;
          PRE_MEM_READ("ioctl(HCIGETDEVLIST)",
                       (Addr)ARG3, sizeof(struct vki_hci_dev_list_req));
          PRE_MEM_WRITE("ioctl(HCIGETDEVLIST)",
@@ -7736,7 +7906,8 @@ PRE(sys_ioctl)
       
    case VKI_HCIINQUIRY:
       if (ARG3) {
-         struct vki_hci_inquiry_req* ir = (struct vki_hci_inquiry_req*)ARG3;
+         struct vki_hci_inquiry_req* ir =
+            (struct vki_hci_inquiry_req*)(Addr)ARG3;
          PRE_MEM_READ("ioctl(HCIINQUIRY)",
                       (Addr)ARG3, sizeof(struct vki_hci_inquiry_req));
          PRE_MEM_WRITE("ioctl(HCIINQUIRY)",
@@ -7747,7 +7918,7 @@ PRE(sys_ioctl)
 
    case VKI_DRM_IOCTL_VERSION:
       if (ARG3) {
-         struct vki_drm_version* data = (struct vki_drm_version *)ARG3;
+         struct vki_drm_version* data = (struct vki_drm_version *)(Addr)ARG3;
          struct vg_drm_version_info* info;
         PRE_MEM_WRITE("ioctl(DRM_VERSION).version_major", (Addr)&data->version_major, sizeof(data->version_major));
          PRE_MEM_WRITE("ioctl(DRM_VERSION).version_minor", (Addr)&data->version_minor, sizeof(data->version_minor));
@@ -7771,7 +7942,7 @@ PRE(sys_ioctl)
       break;
    case VKI_DRM_IOCTL_GET_UNIQUE:
       if (ARG3) {
-         struct vki_drm_unique *data = (struct vki_drm_unique *)ARG3;
+         struct vki_drm_unique *data = (struct vki_drm_unique *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_GET_UNIQUE).unique_len", (Addr)&data->unique_len, sizeof(data->unique_len));
         PRE_MEM_READ("ioctl(DRM_GET_UNIQUE).unique", (Addr)&data->unique, sizeof(data->unique));
         PRE_MEM_WRITE("ioctl(DRM_GET_UNIQUE).unique", (Addr)data->unique, data->unique_len);
@@ -7779,13 +7950,14 @@ PRE(sys_ioctl)
       break;
    case VKI_DRM_IOCTL_GET_MAGIC:
       if (ARG3) {
-         struct vki_drm_auth *data = (struct vki_drm_auth *)ARG3;
+         struct vki_drm_auth *data = (struct vki_drm_auth *)(Addr)ARG3;
          PRE_MEM_WRITE("ioctl(DRM_GET_MAGIC).magic", (Addr)&data->magic, sizeof(data->magic));
       }
       break;
    case VKI_DRM_IOCTL_WAIT_VBLANK:
       if (ARG3) {
-         union vki_drm_wait_vblank *data = (union vki_drm_wait_vblank *)ARG3;
+         union vki_drm_wait_vblank *data =
+            (union vki_drm_wait_vblank *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_WAIT_VBLANK).request.type", (Addr)&data->request.type, sizeof(data->request.type));
         PRE_MEM_READ("ioctl(DRM_WAIT_VBLANK).request.sequence", (Addr)&data->request.sequence, sizeof(data->request.sequence));
         /* XXX: It seems request.signal isn't used */
@@ -7794,20 +7966,22 @@ PRE(sys_ioctl)
       break;
    case VKI_DRM_IOCTL_GEM_CLOSE:
       if (ARG3) {
-         struct vki_drm_gem_close *data = (struct vki_drm_gem_close *)ARG3;
+         struct vki_drm_gem_close *data =
+            (struct vki_drm_gem_close *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_GEM_CLOSE).handle", (Addr)&data->handle, sizeof(data->handle));
       }
       break;
    case VKI_DRM_IOCTL_GEM_FLINK:
       if (ARG3) {
-         struct vki_drm_gem_flink *data = (struct vki_drm_gem_flink *)ARG3;
+         struct vki_drm_gem_flink *data =
+            (struct vki_drm_gem_flink *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_GEM_FLINK).handle", (Addr)&data->handle, sizeof(data->handle));
          PRE_MEM_WRITE("ioctl(DRM_GEM_FLINK).name", (Addr)&data->name, sizeof(data->name));
       }
       break;
    case VKI_DRM_IOCTL_GEM_OPEN:
       if (ARG3) {
-         struct vki_drm_gem_open *data = (struct vki_drm_gem_open *)ARG3;
+         struct vki_drm_gem_open *data = (struct vki_drm_gem_open *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_GEM_OPEN).name", (Addr)&data->name, sizeof(data->name));
         PRE_MEM_WRITE("ioctl(DRM_GEM_OPEN).handle", (Addr)&data->handle, sizeof(data->handle));
         PRE_MEM_WRITE("ioctl(DRM_GEM_OPEN).size", (Addr)&data->size, sizeof(data->size));
@@ -7815,28 +7989,31 @@ PRE(sys_ioctl)
       break;
    case VKI_DRM_IOCTL_I915_GETPARAM:
       if (ARG3) {
-         vki_drm_i915_getparam_t *data = (vki_drm_i915_getparam_t *)ARG3;
+         vki_drm_i915_getparam_t *data = (vki_drm_i915_getparam_t *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_I915_GETPARAM).param", (Addr)&data->param, sizeof(data->param));
         PRE_MEM_WRITE("ioctl(DRM_I915_GETPARAM).value", (Addr)data->value, sizeof(int));
       }
       break;
    case VKI_DRM_IOCTL_I915_GEM_BUSY:
       if (ARG3) {
-         struct vki_drm_i915_gem_busy *data = (struct vki_drm_i915_gem_busy *)ARG3;
+         struct vki_drm_i915_gem_busy *data =
+            (struct vki_drm_i915_gem_busy *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_I915_GEM_BUSY).handle", (Addr)&data->handle, sizeof(data->handle));
          PRE_MEM_WRITE("ioctl(DRM_I915_GEM_BUSY).busy", (Addr)&data->busy, sizeof(data->busy));
       }
       break;
    case VKI_DRM_IOCTL_I915_GEM_CREATE:
       if (ARG3) {
-         struct vki_drm_i915_gem_create *data = (struct vki_drm_i915_gem_create *)ARG3;
+         struct vki_drm_i915_gem_create *data =
+            (struct vki_drm_i915_gem_create *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_I915_GEM_CREATE).size", (Addr)&data->size, sizeof(data->size));
         PRE_MEM_WRITE("ioctl(DRM_I915_GEM_CREATE).handle", (Addr)&data->handle, sizeof(data->handle));
       }
       break;
    case VKI_DRM_IOCTL_I915_GEM_PREAD:
       if (ARG3) {
-         struct vki_drm_i915_gem_pread *data = (struct vki_drm_i915_gem_pread *)ARG3;
+         struct vki_drm_i915_gem_pread *data =
+            (struct vki_drm_i915_gem_pread *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_I915_GEM_PREAD).handle", (Addr)&data->handle, sizeof(data->handle));
         PRE_MEM_READ("ioctl(DRM_I915_GEM_PREAD).offset", (Addr)&data->offset, sizeof(data->offset));
         PRE_MEM_READ("ioctl(DRM_I915_GEM_PREAD).size", (Addr)&data->size, sizeof(data->size));
@@ -7846,7 +8023,8 @@ PRE(sys_ioctl)
       break;
    case VKI_DRM_IOCTL_I915_GEM_PWRITE:
       if (ARG3) {
-         struct vki_drm_i915_gem_pwrite *data = (struct vki_drm_i915_gem_pwrite *)ARG3;
+         struct vki_drm_i915_gem_pwrite *data =
+            (struct vki_drm_i915_gem_pwrite *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_I915_GEM_PWRITE).handle", (Addr)&data->handle, sizeof(data->handle));
         PRE_MEM_READ("ioctl(DRM_I915_GEM_PWRITE).offset", (Addr)&data->offset, sizeof(data->offset));
         PRE_MEM_READ("ioctl(DRM_I915_GEM_PWRITE).size", (Addr)&data->size, sizeof(data->size));
@@ -7859,14 +8037,16 @@ PRE(sys_ioctl)
       break;
    case VKI_DRM_IOCTL_I915_GEM_MMAP_GTT:
       if (ARG3) {
-         struct vki_drm_i915_gem_mmap_gtt *data = (struct vki_drm_i915_gem_mmap_gtt *)ARG3;
+         struct vki_drm_i915_gem_mmap_gtt *data =
+            (struct vki_drm_i915_gem_mmap_gtt *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAP_GTT).handle", (Addr)&data->handle, sizeof(data->handle));
          PRE_MEM_WRITE("ioctl(DRM_I915_GEM_MMAP_GTT).offset", (Addr)&data->offset, sizeof(data->offset));
       }
       break;
    case VKI_DRM_IOCTL_I915_GEM_SET_DOMAIN:
       if (ARG3) {
-         struct vki_drm_i915_gem_set_domain *data = (struct vki_drm_i915_gem_set_domain *)ARG3;
+         struct vki_drm_i915_gem_set_domain *data =
+            (struct vki_drm_i915_gem_set_domain *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_I915_GEM_SET_DOMAIN).handle", (Addr)&data->handle, sizeof(data->handle));
         PRE_MEM_READ("ioctl(DRM_I915_GEM_SET_DOMAIN).read_domains", (Addr)&data->read_domains, sizeof(data->read_domains));
         PRE_MEM_READ("ioctl(DRM_I915_GEM_SET_DOMAIN).write_domain", (Addr)&data->write_domain, sizeof(data->write_domain));
@@ -7874,7 +8054,8 @@ PRE(sys_ioctl)
       break;
    case VKI_DRM_IOCTL_I915_GEM_SET_TILING:
       if (ARG3) {
-         struct vki_drm_i915_gem_set_tiling *data = (struct vki_drm_i915_gem_set_tiling *)ARG3;
+         struct vki_drm_i915_gem_set_tiling *data =
+            (struct vki_drm_i915_gem_set_tiling *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_I915_GEM_SET_TILING).handle", (Addr)&data->handle, sizeof(data->handle));
          PRE_MEM_READ("ioctl(DRM_I915_GEM_SET_TILING).tiling_mode", (Addr)&data->tiling_mode, sizeof(data->tiling_mode));
          PRE_MEM_READ("ioctl(DRM_I915_GEM_SET_TILING).stride", (Addr)&data->stride, sizeof(data->stride));
@@ -7883,7 +8064,8 @@ PRE(sys_ioctl)
       break;
    case VKI_DRM_IOCTL_I915_GEM_GET_TILING:
       if (ARG3) {
-         struct vki_drm_i915_gem_get_tiling *data = (struct vki_drm_i915_gem_get_tiling *)ARG3;
+         struct vki_drm_i915_gem_get_tiling *data =
+            (struct vki_drm_i915_gem_get_tiling *)(Addr)ARG3;
         PRE_MEM_READ("ioctl(DRM_I915_GEM_GET_TILING).handle", (Addr)&data->handle, sizeof(data->handle));
         PRE_MEM_WRITE("ioctl(DRM_I915_GEM_GET_TILING).tiling_mode", (Addr)&data->tiling_mode, sizeof(data->tiling_mode));
          PRE_MEM_WRITE("ioctl(DRM_I915_GEM_GET_TILING).swizzle_mode", (Addr)&data->swizzle_mode, sizeof(data->swizzle_mode));
@@ -7891,7 +8073,8 @@ PRE(sys_ioctl)
       break;
    case VKI_DRM_IOCTL_I915_GEM_GET_APERTURE:
       if (ARG3) {
-         struct vki_drm_i915_gem_get_aperture *data = (struct vki_drm_i915_gem_get_aperture *)ARG3;
+         struct vki_drm_i915_gem_get_aperture *data =
+            (struct vki_drm_i915_gem_get_aperture *)(Addr)ARG3;
          PRE_MEM_WRITE("ioctl(DRM_I915_GEM_GET_APERTURE).aper_size", (Addr)&data->aper_size, sizeof(data->aper_size));
          PRE_MEM_WRITE("ioctl(DRM_I915_GEM_GET_APERTURE).aper_available_size", (Addr)&data->aper_available_size, sizeof(data->aper_available_size));
       }
@@ -7909,7 +8092,7 @@ PRE(sys_ioctl)
 
    case VKI_KVM_S390_MEM_OP: {
       struct vki_kvm_s390_mem_op *args =
-         (struct vki_kvm_s390_mem_op *)(ARG3);
+         (struct vki_kvm_s390_mem_op *)(Addr)(ARG3);
       PRE_MEM_READ("ioctl(KVM_S390_MEM_OP)", ARG3,
                    sizeof(struct vki_kvm_s390_mem_op));
       if (args->flags & VKI_KVM_S390_MEMOP_F_CHECK_ONLY)
@@ -7926,7 +8109,7 @@ PRE(sys_ioctl)
    case VKI_XEN_IOCTL_PRIVCMD_HYPERCALL: {
       SyscallArgs harrghs;
       struct vki_xen_privcmd_hypercall *args =
-         (struct vki_xen_privcmd_hypercall *)(ARG3);
+         (struct vki_xen_privcmd_hypercall *)(Addr)(ARG3);
 
       if (!args)
          break;
@@ -7952,7 +8135,7 @@ PRE(sys_ioctl)
 
    case VKI_XEN_IOCTL_PRIVCMD_MMAP: {
        struct vki_xen_privcmd_mmap *args =
-           (struct vki_xen_privcmd_mmap *)(ARG3);
+           (struct vki_xen_privcmd_mmap *)(Addr)(ARG3);
        PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_MMAP(num)",
                     (Addr)&args->num, sizeof(args->num));
        PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_MMAP(dom)",
@@ -7963,7 +8146,7 @@ PRE(sys_ioctl)
    }
    case VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH: {
        struct vki_xen_privcmd_mmapbatch *args =
-           (struct vki_xen_privcmd_mmapbatch *)(ARG3);
+           (struct vki_xen_privcmd_mmapbatch *)(Addr)(ARG3);
        PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH(num)",
                     (Addr)&args->num, sizeof(args->num));
        PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH(dom)",
@@ -7976,7 +8159,7 @@ PRE(sys_ioctl)
    }
    case VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH_V2: {
        struct vki_xen_privcmd_mmapbatch_v2 *args =
-           (struct vki_xen_privcmd_mmapbatch_v2 *)(ARG3);
+           (struct vki_xen_privcmd_mmapbatch_v2 *)(Addr)(ARG3);
        PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH_V2(num)",
                     (Addr)&args->num, sizeof(args->num));
        PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH_V2(dom)",
@@ -7990,14 +8173,14 @@ PRE(sys_ioctl)
 
    case VKI_XEN_IOCTL_EVTCHN_BIND_VIRQ: {
          struct vki_xen_ioctl_evtchn_bind_virq *args =
-            (struct vki_xen_ioctl_evtchn_bind_virq *)(ARG3);
+            (struct vki_xen_ioctl_evtchn_bind_virq *)(Addr)(ARG3);
          PRE_MEM_READ("VKI_XEN_IOCTL_EVTCHN_BIND_VIRQ(virq)",
                  (Addr)&args->virq, sizeof(args->virq));
       }
       break;
    case VKI_XEN_IOCTL_EVTCHN_BIND_INTERDOMAIN: {
          struct vki_xen_ioctl_evtchn_bind_interdomain *args =
-            (struct vki_xen_ioctl_evtchn_bind_interdomain *)(ARG3);
+            (struct vki_xen_ioctl_evtchn_bind_interdomain *)(Addr)(ARG3);
          PRE_MEM_READ("VKI_XEN_IOCTL_EVTCHN_BIND_INTERDOMAIN(remote_domain)",
                  (Addr)&args->remote_domain, sizeof(args->remote_domain));
          PRE_MEM_READ("VKI_XEN_IOCTL_EVTCHN_BIND_INTERDOMAIN(remote_port)",
@@ -8006,21 +8189,21 @@ PRE(sys_ioctl)
       break;
    case VKI_XEN_IOCTL_EVTCHN_BIND_UNBOUND_PORT: {
          struct vki_xen_ioctl_evtchn_bind_unbound_port *args =
-            (struct vki_xen_ioctl_evtchn_bind_unbound_port *)(ARG3);
+            (struct vki_xen_ioctl_evtchn_bind_unbound_port *)(Addr)(ARG3);
          PRE_MEM_READ("VKI_XEN_IOCTL_EVTCHN_BIND_UNBOUND_PORT(remote_domain)",
                  (Addr)&args->remote_domain, sizeof(args->remote_domain));
       }
       break;
    case VKI_XEN_IOCTL_EVTCHN_UNBIND: {
          struct vki_xen_ioctl_evtchn_unbind *args =
-            (struct vki_xen_ioctl_evtchn_unbind *)(ARG3);
+            (struct vki_xen_ioctl_evtchn_unbind *)(Addr)(ARG3);
          PRE_MEM_READ("VKI_XEN_IOCTL_EVTCHN_UNBIND(port)",
                  (Addr)&args->port, sizeof(args->port));
       }
       break;
    case VKI_XEN_IOCTL_EVTCHN_NOTIFY: {
          struct vki_xen_ioctl_evtchn_notify *args =
-            (struct vki_xen_ioctl_evtchn_notify*)(ARG3);
+            (struct vki_xen_ioctl_evtchn_notify*)(Addr)(ARG3);
          PRE_MEM_READ("VKI_XEN_IOCTL_EVTCHN_notify(port)",
                  (Addr)&args->port, sizeof(args->port));
       }
@@ -8032,7 +8215,8 @@ PRE(sys_ioctl)
 
    /* Lustre */
    case VKI_OBD_IOC_FID2PATH: {
-      struct vki_getinfo_fid2path *gf = (struct vki_getinfo_fid2path *)ARG3;
+      struct vki_getinfo_fid2path *gf =
+         (struct vki_getinfo_fid2path *)(Addr)ARG3;
       PRE_MEM_READ("VKI_OBD_IOC_FID2PATH(args)", ARG3, sizeof(struct vki_getinfo_fid2path));
       PRE_FIELD_WRITE("VKI_OBD_IOC_FID2PATH(args).gf_recno", gf->gf_recno);
       PRE_FIELD_WRITE("VKI_OBD_IOC_FID2PATH(args).gf_linkno", gf->gf_linkno);
@@ -8045,7 +8229,7 @@ PRE(sys_ioctl)
       break;
 
    case VKI_LL_IOC_GETPARENT: {
-      struct vki_getparent *gp = (struct vki_getparent *)ARG3;
+      struct vki_getparent *gp = (struct vki_getparent *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_LL_IOC_GETPARENT).gp_linkno", gp->gp_linkno);
       PRE_FIELD_READ("ioctl(VKI_LL_IOC_GETPARENT).gp_name_size", gp->gp_name_size);
       PRE_FIELD_WRITE("ioctl(VKI_LL_IOC_GETPARENT).gp_fid", gp->gp_fid);
@@ -8055,12 +8239,13 @@ PRE(sys_ioctl)
 
    /* V4L2 */
    case VKI_V4L2_QUERYCAP: {
-      struct vki_v4l2_capability *data = (struct vki_v4l2_capability *)ARG3;
+      struct vki_v4l2_capability *data =
+         (struct vki_v4l2_capability *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_QUERYCAP)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENUM_FMT: {
-      struct vki_v4l2_fmtdesc *data = (struct vki_v4l2_fmtdesc *)ARG3;
+      struct vki_v4l2_fmtdesc *data = (struct vki_v4l2_fmtdesc *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_FMT).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_FMT).type", data->type);
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_ENUM_FMT).flags", data->flags);
@@ -8070,7 +8255,7 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_G_FMT: {
-      struct vki_v4l2_format *data = (struct vki_v4l2_format *)ARG3;
+      struct vki_v4l2_format *data = (struct vki_v4l2_format *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_FMT).type", data->type);
       switch (data->type) {
       case VKI_V4L2_BUF_TYPE_VIDEO_CAPTURE:
@@ -8115,7 +8300,7 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_S_FMT: {
-      struct vki_v4l2_format *data = (struct vki_v4l2_format *)ARG3;
+      struct vki_v4l2_format *data = (struct vki_v4l2_format *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_FMT).type", data->type);
       switch (data->type) {
       case VKI_V4L2_BUF_TYPE_VIDEO_CAPTURE:
@@ -8155,7 +8340,7 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_TRY_FMT: {
-      struct vki_v4l2_format *data = (struct vki_v4l2_format *)ARG3;
+      struct vki_v4l2_format *data = (struct vki_v4l2_format *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_TRY_FMT).type", data->type);
       switch (data->type) {
       case VKI_V4L2_BUF_TYPE_VIDEO_CAPTURE:
@@ -8195,12 +8380,13 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_REQBUFS: {
-      struct vki_v4l2_requestbuffers *data = (struct vki_v4l2_requestbuffers *)ARG3;
+      struct vki_v4l2_requestbuffers *data =
+         (struct vki_v4l2_requestbuffers *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_REQBUFS)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_QUERYBUF: {
-      struct vki_v4l2_buffer *data = (struct vki_v4l2_buffer *)ARG3;
+      struct vki_v4l2_buffer *data = (struct vki_v4l2_buffer *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_QUERYBUF).type", data->type);
       PRE_FIELD_READ("ioctl(VKI_V4L2_QUERYBUF).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_QUERYBUF).reserved", data->reserved);
@@ -8233,12 +8419,14 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_G_FBUF: {
-      struct vki_v4l2_framebuffer *data = (struct vki_v4l2_framebuffer *)ARG3;
+      struct vki_v4l2_framebuffer *data =
+         (struct vki_v4l2_framebuffer *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_G_FBUF)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_S_FBUF: {
-      struct vki_v4l2_framebuffer *data = (struct vki_v4l2_framebuffer *)ARG3;
+      struct vki_v4l2_framebuffer *data =
+         (struct vki_v4l2_framebuffer *)(Addr)ARG3;
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_S_FBUF).capability", data->capability);
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_FBUF).flags", data->flags);
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_FBUF).base", data->base);
@@ -8246,12 +8434,12 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_OVERLAY: {
-      int *data = (int *)ARG3;
+      int *data = (int *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_OVERLAY)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_QBUF: {
-      struct vki_v4l2_buffer *data = (struct vki_v4l2_buffer *)ARG3;
+      struct vki_v4l2_buffer *data = (struct vki_v4l2_buffer *)(Addr)ARG3;
       int is_output = data->type == VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT ||
          data->type == VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE ||
          data->type == VKI_V4L2_BUF_TYPE_VBI_OUTPUT ||
@@ -8305,7 +8493,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_EXPBUF: {
-      struct vki_v4l2_exportbuffer *data = (struct vki_v4l2_exportbuffer *)ARG3;
+      struct vki_v4l2_exportbuffer *data =
+         (struct vki_v4l2_exportbuffer *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_EXPBUF).type", data->type);
       PRE_FIELD_READ("ioctl(VKI_V4L2_EXPBUF).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_EXPBUF).plane", data->plane);
@@ -8315,7 +8504,7 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_DQBUF: {
-      struct vki_v4l2_buffer *data = (struct vki_v4l2_buffer *)ARG3;
+      struct vki_v4l2_buffer *data = (struct vki_v4l2_buffer *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_DQBUF).type", data->type);
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_DQBUF).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_DQBUF).memory", data->memory);
@@ -8348,17 +8537,18 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_STREAMON: {
-      int *data = (int *)ARG3;
+      int *data = (int *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_STREAMON)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_STREAMOFF: {
-      int *data = (int *)ARG3;
+      int *data = (int *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_STREAMOFF)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_G_PARM: {
-      struct vki_v4l2_streamparm *data = (struct vki_v4l2_streamparm *)ARG3;
+      struct vki_v4l2_streamparm *data =
+         (struct vki_v4l2_streamparm *)(Addr)ARG3;
       int is_output = data->type == VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT ||
          data->type == VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE ||
          data->type == VKI_V4L2_BUF_TYPE_VBI_OUTPUT ||
@@ -8377,7 +8567,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_S_PARM: {
-      struct vki_v4l2_streamparm *data = (struct vki_v4l2_streamparm *)ARG3;
+      struct vki_v4l2_streamparm *data =
+         (struct vki_v4l2_streamparm *)(Addr)ARG3;
       int is_output = data->type == VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT ||
          data->type == VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE ||
          data->type == VKI_V4L2_BUF_TYPE_VBI_OUTPUT ||
@@ -8391,40 +8582,40 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_G_STD: {
-      vki_v4l2_std_id *data = (vki_v4l2_std_id *)ARG3;
+      vki_v4l2_std_id *data = (vki_v4l2_std_id *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_G_STD)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_S_STD: {
-      vki_v4l2_std_id *data = (vki_v4l2_std_id *)ARG3;
+      vki_v4l2_std_id *data = (vki_v4l2_std_id *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_S_STD)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENUMSTD: {
-      struct vki_v4l2_standard *data = (struct vki_v4l2_standard *)ARG3;
+      struct vki_v4l2_standard *data = (struct vki_v4l2_standard *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUMSTD).index", data->index);
       PRE_MEM_WRITE("ioctl(VKI_V4L2_ENUMSTD)", (Addr)&data->id, sizeof(*data) - sizeof(data->index));
       break;
    }
    case VKI_V4L2_ENUMINPUT: {
-      struct vki_v4l2_input *data = (struct vki_v4l2_input *)ARG3;
+      struct vki_v4l2_input *data = (struct vki_v4l2_input *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUMINPUT).index", data->index);
       PRE_MEM_WRITE("ioctl(VKI_V4L2_ENUMINPUT)", (Addr)data->name, sizeof(*data) - sizeof(data->index));
       break;
    }
    case VKI_V4L2_G_CTRL: {
-      struct vki_v4l2_control *data = (struct vki_v4l2_control *)ARG3;
+      struct vki_v4l2_control *data = (struct vki_v4l2_control *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_CTRL).id", data->id);
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_G_CTRL).value", data->value);
       break;
    }
    case VKI_V4L2_S_CTRL: {
-      struct vki_v4l2_control *data = (struct vki_v4l2_control *)ARG3;
+      struct vki_v4l2_control *data = (struct vki_v4l2_control *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_S_CTRL)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_G_TUNER: {
-      struct vki_v4l2_tuner *data = (struct vki_v4l2_tuner *)ARG3;
+      struct vki_v4l2_tuner *data = (struct vki_v4l2_tuner *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_TUNER).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_TUNER).reserved", data->reserved);
       PRE_MEM_WRITE("ioctl(VKI_V4L2_G_TUNER)", (Addr)data->name,
@@ -8432,35 +8623,35 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_S_TUNER: {
-      struct vki_v4l2_tuner *data = (struct vki_v4l2_tuner *)ARG3;
+      struct vki_v4l2_tuner *data = (struct vki_v4l2_tuner *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_TUNER).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_TUNER).audmode", data->audmode);
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_TUNER).reserved", data->reserved);
       break;
    }
    case VKI_V4L2_G_AUDIO: {
-      struct vki_v4l2_audio *data = (struct vki_v4l2_audio *)ARG3;
+      struct vki_v4l2_audio *data = (struct vki_v4l2_audio *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_G_AUDIO)", (Addr)data,
             sizeof(*data) - sizeof(data->reserved));
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_AUDIO).reserved", data->reserved);
       break;
    }
    case VKI_V4L2_S_AUDIO: {
-      struct vki_v4l2_audio *data = (struct vki_v4l2_audio *)ARG3;
+      struct vki_v4l2_audio *data = (struct vki_v4l2_audio *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_AUDIO).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_AUDIO).mode", data->mode);
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_AUDIO).reserved", data->reserved);
       break;
    }
    case VKI_V4L2_QUERYCTRL: {
-      struct vki_v4l2_queryctrl *data = (struct vki_v4l2_queryctrl *)ARG3;
+      struct vki_v4l2_queryctrl *data = (struct vki_v4l2_queryctrl *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_QUERYCTRL).id", data->id);
       PRE_MEM_WRITE("ioctl(VKI_V4L2_QUERYCTRL)", (Addr)&data->type,
             sizeof(*data) - sizeof(data->id));
       break;
    }
    case VKI_V4L2_QUERYMENU: {
-      struct vki_v4l2_querymenu *data = (struct vki_v4l2_querymenu *)ARG3;
+      struct vki_v4l2_querymenu *data = (struct vki_v4l2_querymenu *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_QUERYMENU).id", data->id);
       PRE_FIELD_READ("ioctl(VKI_V4L2_QUERYMENU).index", data->index);
       PRE_MEM_WRITE("ioctl(VKI_V4L2_QUERYMENU)", (Addr)data->name,
@@ -8468,61 +8659,61 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_G_INPUT: {
-      int *data = (int *)ARG3;
+      int *data = (int *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_G_INPUT)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_S_INPUT: {
-      int *data = (int *)ARG3;
+      int *data = (int *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_S_INPUT)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_G_EDID: {
-      struct vki_v4l2_edid *data = (struct vki_v4l2_edid *)ARG3;
+      struct vki_v4l2_edid *data = (struct vki_v4l2_edid *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_G_EDID)", (Addr)data, sizeof(*data));
       if (data->blocks && data->edid)
          PRE_MEM_WRITE("ioctl(VKI_V4L2_G_EDID)", (Addr)data->edid, data->blocks * 128);
       break;
    }
    case VKI_V4L2_S_EDID: {
-      struct vki_v4l2_edid *data = (struct vki_v4l2_edid *)ARG3;
+      struct vki_v4l2_edid *data = (struct vki_v4l2_edid *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_S_EDID)", (Addr)data, sizeof(*data));
       if (data->blocks && data->edid)
          PRE_MEM_READ("ioctl(VKI_V4L2_S_EDID)", (Addr)data->edid, data->blocks * 128);
       break;
    }
    case VKI_V4L2_G_OUTPUT: {
-      int *data = (int *)ARG3;
+      int *data = (int *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_G_OUTPUT)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_S_OUTPUT: {
-      int *data = (int *)ARG3;
+      int *data = (int *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_S_OUTPUT)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENUMOUTPUT: {
-      struct vki_v4l2_output *data = (struct vki_v4l2_output *)ARG3;
+      struct vki_v4l2_output *data = (struct vki_v4l2_output *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUMOUTPUT).index", data->index);
       PRE_MEM_WRITE("ioctl(VKI_V4L2_ENUMOUTPUT)", (Addr)data->name, sizeof(*data) - sizeof(data->index));
       break;
    }
    case VKI_V4L2_G_AUDOUT: {
-      struct vki_v4l2_audioout *data = (struct vki_v4l2_audioout *)ARG3;
+      struct vki_v4l2_audioout *data = (struct vki_v4l2_audioout *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_G_AUDOUT)", (Addr)data,
             sizeof(*data) - sizeof(data->reserved));
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_AUDOUT).reserved", data->reserved);
       break;
    }
    case VKI_V4L2_S_AUDOUT: {
-      struct vki_v4l2_audioout *data = (struct vki_v4l2_audioout *)ARG3;
+      struct vki_v4l2_audioout *data = (struct vki_v4l2_audioout *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_AUDOUT).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_AUDOUT).reserved", data->reserved);
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_AUDOUT).mode", data->mode);
       break;
    }
    case VKI_V4L2_G_MODULATOR: {
-      struct vki_v4l2_modulator *data = (struct vki_v4l2_modulator *)ARG3;
+      struct vki_v4l2_modulator *data = (struct vki_v4l2_modulator *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_MODULATOR).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_MODULATOR).reserved", data->reserved);
       PRE_MEM_WRITE("ioctl(VKI_V4L2_G_MODULATOR)", (Addr)data->name,
@@ -8530,14 +8721,14 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_S_MODULATOR: {
-      struct vki_v4l2_modulator *data = (struct vki_v4l2_modulator *)ARG3;
+      struct vki_v4l2_modulator *data = (struct vki_v4l2_modulator *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_MODULATOR).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_MODULATOR).txsubchans", data->txsubchans);
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_MODULATOR).reserved", data->reserved);
       break;
    }
    case VKI_V4L2_G_FREQUENCY: {
-      struct vki_v4l2_frequency *data = (struct vki_v4l2_frequency *)ARG3;
+      struct vki_v4l2_frequency *data = (struct vki_v4l2_frequency *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_FREQUENCY).tuner", data->tuner);
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_FREQUENCY).reserved", data->reserved);
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_G_FREQUENCY).type", data->type);
@@ -8545,44 +8736,46 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_S_FREQUENCY: {
-      struct vki_v4l2_frequency *data = (struct vki_v4l2_frequency *)ARG3;
+      struct vki_v4l2_frequency *data = (struct vki_v4l2_frequency *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_S_FREQUENCY)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_CROPCAP: {
-      struct vki_v4l2_cropcap *data = (struct vki_v4l2_cropcap *)ARG3;
+      struct vki_v4l2_cropcap *data = (struct vki_v4l2_cropcap *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_CROPCAP)", data->type);
       PRE_MEM_WRITE("ioctl(VKI_V4L2_CROPCAP)", (Addr)&data->bounds, sizeof(*data) - sizeof(data->type));
       break;
    }
    case VKI_V4L2_G_CROP: {
-      struct vki_v4l2_crop *data = (struct vki_v4l2_crop *)ARG3;
+      struct vki_v4l2_crop *data = (struct vki_v4l2_crop *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_CROP).type", data->type);
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_G_CROP).c", data->c);
       break;
    }
    case VKI_V4L2_S_CROP: {
-      struct vki_v4l2_crop *data = (struct vki_v4l2_crop *)ARG3;
+      struct vki_v4l2_crop *data = (struct vki_v4l2_crop *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_S_CROP)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_G_JPEGCOMP: {
-      struct vki_v4l2_jpegcompression *data = (struct vki_v4l2_jpegcompression *)ARG3;
+      struct vki_v4l2_jpegcompression *data =
+         (struct vki_v4l2_jpegcompression *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_G_JPEGCOMP)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_S_JPEGCOMP: {
-      struct vki_v4l2_jpegcompression *data = (struct vki_v4l2_jpegcompression *)ARG3;
+      struct vki_v4l2_jpegcompression *data =
+         (struct vki_v4l2_jpegcompression *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_S_JPEGCOMP)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_QUERYSTD: {
-      vki_v4l2_std_id *data = (vki_v4l2_std_id *)ARG3;
+      vki_v4l2_std_id *data = (vki_v4l2_std_id *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_QUERYSTD)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENUMAUDIO: {
-      struct vki_v4l2_audio *data = (struct vki_v4l2_audio *)ARG3;
+      struct vki_v4l2_audio *data = (struct vki_v4l2_audio *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUMAUDIO).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUMAUDIO).reserved", data->reserved);
       PRE_MEM_WRITE("ioctl(VKI_V4L2_ENUMAUDIO)", (Addr)data->name,
@@ -8590,7 +8783,7 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_ENUMAUDOUT: {
-      struct vki_v4l2_audioout *data = (struct vki_v4l2_audioout *)ARG3;
+      struct vki_v4l2_audioout *data = (struct vki_v4l2_audioout *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUMAUDOUT).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUMAUDOUT).reserved", data->reserved);
       PRE_MEM_WRITE("ioctl(VKI_V4L2_ENUMAUDOUT)", (Addr)data->name,
@@ -8598,17 +8791,18 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_G_PRIORITY: {
-      __vki_u32 *data = (__vki_u32 *)ARG3;
+      __vki_u32 *data = (__vki_u32 *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_G_PRIORITY)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_S_PRIORITY: {
-      __vki_u32 *data = (__vki_u32 *)ARG3;
+      __vki_u32 *data = (__vki_u32 *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_S_PRIORITY)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_G_SLICED_VBI_CAP: {
-      struct vki_v4l2_sliced_vbi_cap *data = (struct vki_v4l2_sliced_vbi_cap *)ARG3;
+      struct vki_v4l2_sliced_vbi_cap *data =
+         (struct vki_v4l2_sliced_vbi_cap *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_SLICED_VBI_CAP).type", data->type);
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_SLICED_VBI_CAP).reserved", data->reserved);
       PRE_MEM_WRITE("ioctl(VKI_V4L2_G_SLICED_VBI_CAP)", (Addr)data,
@@ -8616,7 +8810,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_G_EXT_CTRLS: {
-      struct vki_v4l2_ext_controls *data = (struct vki_v4l2_ext_controls *)ARG3;
+      struct vki_v4l2_ext_controls *data =
+         (struct vki_v4l2_ext_controls *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_EXT_CTRLS).ctrl_class", data->ctrl_class);
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_EXT_CTRLS).count", data->count);
       if (data->count) {
@@ -8642,7 +8837,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_S_EXT_CTRLS: {
-      struct vki_v4l2_ext_controls *data = (struct vki_v4l2_ext_controls *)ARG3;
+      struct vki_v4l2_ext_controls *data =
+         (struct vki_v4l2_ext_controls *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_EXT_CTRLS).ctrl_class", data->ctrl_class);
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_EXT_CTRLS).count", data->count);
       if (data->count) {
@@ -8663,7 +8859,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_TRY_EXT_CTRLS: {
-      struct vki_v4l2_ext_controls *data = (struct vki_v4l2_ext_controls *)ARG3;
+      struct vki_v4l2_ext_controls *data =
+         (struct vki_v4l2_ext_controls *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_TRY_EXT_CTRLS).ctrl_class", data->ctrl_class);
       PRE_FIELD_READ("ioctl(VKI_V4L2_TRY_EXT_CTRLS).count", data->count);
       if (data->count) {
@@ -8684,7 +8881,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_ENUM_FRAMESIZES: {
-      struct vki_v4l2_frmsizeenum *data = (struct vki_v4l2_frmsizeenum *)ARG3;
+      struct vki_v4l2_frmsizeenum *data =
+         (struct vki_v4l2_frmsizeenum *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_FRAMESIZES).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_FRAMESIZES).pixel_format", data->pixel_format);
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_FRAMESIZES).reserved", data->reserved);
@@ -8693,7 +8891,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_ENUM_FRAMEINTERVALS: {
-      struct vki_v4l2_frmivalenum *data = (struct vki_v4l2_frmivalenum *)ARG3;
+      struct vki_v4l2_frmivalenum *data =
+         (struct vki_v4l2_frmivalenum *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_FRAMEINTERVALS).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_FRAMEINTERVALS).pixel_format", data->pixel_format);
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_FRAMEINTERVALS).width", data->width);
@@ -8704,22 +8903,25 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_G_ENC_INDEX: {
-      struct vki_v4l2_enc_idx *data = (struct vki_v4l2_enc_idx *)ARG3;
+      struct vki_v4l2_enc_idx *data = (struct vki_v4l2_enc_idx *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_G_ENC_INDEX)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENCODER_CMD: {
-      struct vki_v4l2_encoder_cmd *data = (struct vki_v4l2_encoder_cmd *)ARG3;
+      struct vki_v4l2_encoder_cmd *data =
+         (struct vki_v4l2_encoder_cmd *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_ENCODER_CMD)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_TRY_ENCODER_CMD: {
-      struct vki_v4l2_encoder_cmd *data = (struct vki_v4l2_encoder_cmd *)ARG3;
+      struct vki_v4l2_encoder_cmd *data =
+         (struct vki_v4l2_encoder_cmd *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_TRY_ENCODER_CMD)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_DBG_S_REGISTER: {
-      struct vki_v4l2_dbg_register *data = (struct vki_v4l2_dbg_register *)ARG3;
+      struct vki_v4l2_dbg_register *data =
+         (struct vki_v4l2_dbg_register *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_DBG_S_REGISTER).match.type", data->match.type);
       PRE_FIELD_READ("ioctl(VKI_V4L2_DBG_S_REGISTER).match.addr", data->match.addr);
       PRE_FIELD_READ("ioctl(VKI_V4L2_DBG_S_REGISTER).reg", data->reg);
@@ -8728,7 +8930,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_DBG_G_REGISTER: {
-      struct vki_v4l2_dbg_register *data = (struct vki_v4l2_dbg_register *)ARG3;
+      struct vki_v4l2_dbg_register *data =
+         (struct vki_v4l2_dbg_register *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_DBG_G_REGISTER).match.type", data->match.type);
       PRE_FIELD_READ("ioctl(VKI_V4L2_DBG_G_REGISTER).match.addr", data->match.addr);
       PRE_FIELD_READ("ioctl(VKI_V4L2_DBG_G_REGISTER).reg", data->reg);
@@ -8737,38 +8940,44 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_S_HW_FREQ_SEEK: {
-      struct vki_v4l2_hw_freq_seek *data = (struct vki_v4l2_hw_freq_seek *)ARG3;
+      struct vki_v4l2_hw_freq_seek *data =
+         (struct vki_v4l2_hw_freq_seek *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_S_HW_FREQ_SEEK)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_S_DV_TIMINGS: {
-      struct vki_v4l2_dv_timings *data = (struct vki_v4l2_dv_timings *)ARG3;
+      struct vki_v4l2_dv_timings *data =
+         (struct vki_v4l2_dv_timings *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_DV_TIMINGS).type", data->type);
       PRE_FIELD_READ("ioctl(VKI_V4L2_S_DV_TIMINGS).bt", data->bt);
       break;
    }
    case VKI_V4L2_G_DV_TIMINGS: {
-      struct vki_v4l2_dv_timings *data = (struct vki_v4l2_dv_timings *)ARG3;
+      struct vki_v4l2_dv_timings *data =
+         (struct vki_v4l2_dv_timings *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_G_DV_TIMINGS)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_DQEVENT: {
-      struct vki_v4l2_event *data = (struct vki_v4l2_event *)ARG3;
+      struct vki_v4l2_event *data = (struct vki_v4l2_event *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_DQEVENT)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_SUBSCRIBE_EVENT: {
-      struct vki_v4l2_event_subscription *data = (struct vki_v4l2_event_subscription *)ARG3;
+      struct vki_v4l2_event_subscription *data =
+         (struct vki_v4l2_event_subscription *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_SUBSCRIBE_EVENT)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_UNSUBSCRIBE_EVENT: {
-      struct vki_v4l2_event_subscription *data = (struct vki_v4l2_event_subscription *)ARG3;
+      struct vki_v4l2_event_subscription *data =
+         (struct vki_v4l2_event_subscription *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_UNSUBSCRIBE_EVENT)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_CREATE_BUFS: {
-      struct vki_v4l2_create_buffers *data = (struct vki_v4l2_create_buffers *)ARG3;
+      struct vki_v4l2_create_buffers *data =
+         (struct vki_v4l2_create_buffers *)(Addr)ARG3;
       struct vki_v4l2_format *fmt = &data->format;
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_CREATE_BUFS).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_CREATE_BUFS).count", data->count);
@@ -8803,7 +9012,7 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_PREPARE_BUF: {
-      struct vki_v4l2_buffer *data = (struct vki_v4l2_buffer *)ARG3;
+      struct vki_v4l2_buffer *data = (struct vki_v4l2_buffer *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_PREPARE_BUF).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_PREPARE_BUF).type", data->type);
       PRE_FIELD_READ("ioctl(VKI_V4L2_PREPARE_BUF).memory", data->memory);
@@ -8822,7 +9031,7 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_G_SELECTION: {
-      struct vki_v4l2_selection *data = (struct vki_v4l2_selection *)ARG3;
+      struct vki_v4l2_selection *data = (struct vki_v4l2_selection *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_SELECTION).type", data->type);
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_SELECTION).target", data->target);
       PRE_FIELD_READ("ioctl(VKI_V4L2_G_SELECTION).flags", data->flags);
@@ -8831,22 +9040,25 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_S_SELECTION: {
-      struct vki_v4l2_selection *data = (struct vki_v4l2_selection *)ARG3;
+      struct vki_v4l2_selection *data = (struct vki_v4l2_selection *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_S_SELECTION)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_DECODER_CMD: {
-      struct vki_v4l2_decoder_cmd *data = (struct vki_v4l2_decoder_cmd *)ARG3;
+      struct vki_v4l2_decoder_cmd *data =
+         (struct vki_v4l2_decoder_cmd *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_DECODER_CMD)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_TRY_DECODER_CMD: {
-      struct vki_v4l2_decoder_cmd *data = (struct vki_v4l2_decoder_cmd *)ARG3;
+      struct vki_v4l2_decoder_cmd *data =
+         (struct vki_v4l2_decoder_cmd *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_TRY_DECODER_CMD)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENUM_DV_TIMINGS: {
-      struct vki_v4l2_enum_dv_timings *data = (struct vki_v4l2_enum_dv_timings *)ARG3;
+      struct vki_v4l2_enum_dv_timings *data =
+         (struct vki_v4l2_enum_dv_timings *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_DV_TIMINGS).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_DV_TIMINGS).pad", data->pad);
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_DV_TIMINGS).reserved", data->reserved);
@@ -8854,17 +9066,20 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_QUERY_DV_TIMINGS: {
-      struct vki_v4l2_dv_timings *data = (struct vki_v4l2_dv_timings *)ARG3;
+      struct vki_v4l2_dv_timings *data =
+         (struct vki_v4l2_dv_timings *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_QUERY_DV_TIMINGS)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_DV_TIMINGS_CAP: {
-      struct vki_v4l2_dv_timings_cap *data = (struct vki_v4l2_dv_timings_cap *)ARG3;
+      struct vki_v4l2_dv_timings_cap *data =
+         (struct vki_v4l2_dv_timings_cap *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_V4L2_DV_TIMINGS_CAP)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENUM_FREQ_BANDS: {
-      struct vki_v4l2_frequency_band *data = (struct vki_v4l2_frequency_band *)ARG3;
+      struct vki_v4l2_frequency_band *data =
+         (struct vki_v4l2_frequency_band *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_FREQ_BANDS).tuner", data->tuner);
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_FREQ_BANDS).type", data->type);
       PRE_FIELD_READ("ioctl(VKI_V4L2_ENUM_FREQ_BANDS).index", data->index);
@@ -8876,7 +9091,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_DBG_G_CHIP_INFO: {
-      struct vki_v4l2_dbg_chip_info *data = (struct vki_v4l2_dbg_chip_info *)ARG3;
+      struct vki_v4l2_dbg_chip_info *data =
+         (struct vki_v4l2_dbg_chip_info *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_DBG_G_CHIP_INFO).match.type", data->match.type);
       PRE_FIELD_READ("ioctl(VKI_V4L2_DBG_G_CHIP_INFO).match.addr", data->match.addr);
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_DBG_G_CHIP_INFO).name", data->name);
@@ -8885,7 +9101,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_QUERY_EXT_CTRL: {
-      struct vki_v4l2_query_ext_ctrl *data = (struct vki_v4l2_query_ext_ctrl *)ARG3;
+      struct vki_v4l2_query_ext_ctrl *data =
+         (struct vki_v4l2_query_ext_ctrl *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_QUERY_EXT_CTRL).id", data->id);
       PRE_FIELD_READ("ioctl(VKI_V4L2_QUERY_EXT_CTRL).reserved", data->reserved);
       PRE_MEM_WRITE("ioctl(VKI_V4L2_QUERY_EXT_CTRL)", (Addr)&data->type,
@@ -8893,7 +9110,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_SUBDEV_G_FMT: {
-      struct vki_v4l2_subdev_format *data = (struct vki_v4l2_subdev_format *)ARG3;
+      struct vki_v4l2_subdev_format *data =
+         (struct vki_v4l2_subdev_format *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_G_FMT).pad", data->pad);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_G_FMT).which", data->which);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_G_FMT).reserved", data->reserved);
@@ -8901,24 +9119,28 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_SUBDEV_S_FMT: {
-      struct vki_v4l2_subdev_format *data = (struct vki_v4l2_subdev_format *)ARG3;
+      struct vki_v4l2_subdev_format *data =
+         (struct vki_v4l2_subdev_format *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_SUBDEV_S_FMT)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_SUBDEV_G_FRAME_INTERVAL: {
-      struct vki_v4l2_subdev_frame_interval *data = (struct vki_v4l2_subdev_frame_interval *)ARG3;
+      struct vki_v4l2_subdev_frame_interval *data =
+         (struct vki_v4l2_subdev_frame_interval *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_G_FRAME_SIZE).pad", data->pad);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_G_FRAME_SIZE).reserved", data->reserved);
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_SUBDEV_G_FRAME_SIZE).interval", data->interval);
       break;
    }
    case VKI_V4L2_SUBDEV_S_FRAME_INTERVAL: {
-      struct vki_v4l2_subdev_frame_interval *data = (struct vki_v4l2_subdev_frame_interval *)ARG3;
+      struct vki_v4l2_subdev_frame_interval *data =
+         (struct vki_v4l2_subdev_frame_interval *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_SUBDEV_S_FRAME_INTERVAL)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_SUBDEV_ENUM_MBUS_CODE: {
-      struct vki_v4l2_subdev_mbus_code_enum *data = (struct vki_v4l2_subdev_mbus_code_enum *)ARG3;
+      struct vki_v4l2_subdev_mbus_code_enum *data =
+         (struct vki_v4l2_subdev_mbus_code_enum *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_MBUS_CODE).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_MBUS_CODE).pad", data->pad);
       PRE_FIELD_WRITE("ioctl(VKI_V4L2_SUBDEV_ENUM_MBUS_CODE).code", data->code);
@@ -8927,7 +9149,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE: {
-      struct vki_v4l2_subdev_frame_size_enum *data = (struct vki_v4l2_subdev_frame_size_enum *)ARG3;
+      struct vki_v4l2_subdev_frame_size_enum *data =
+         (struct vki_v4l2_subdev_frame_size_enum *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE).pad", data->pad);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE).code", data->code);
@@ -8940,7 +9163,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_SUBDEV_ENUM_FRAME_INTERVAL: {
-      struct vki_v4l2_subdev_frame_interval_enum *data = (struct vki_v4l2_subdev_frame_interval_enum *)ARG3;
+      struct vki_v4l2_subdev_frame_interval_enum *data =
+         (struct vki_v4l2_subdev_frame_interval_enum *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_INTERVAL).index", data->index);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_INTERVAL).pad", data->pad);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_ENUM_FRAME_INTERVAL).code", data->code);
@@ -8952,7 +9176,8 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_SUBDEV_G_CROP: {
-      struct vki_v4l2_subdev_crop *data = (struct vki_v4l2_subdev_crop *)ARG3;
+      struct vki_v4l2_subdev_crop *data =
+         (struct vki_v4l2_subdev_crop *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_G_CROP).pad", data->pad);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_G_CROP).which", data->which);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_G_CROP).reserved", data->reserved);
@@ -8960,12 +9185,14 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_SUBDEV_S_CROP: {
-      struct vki_v4l2_subdev_crop *data = (struct vki_v4l2_subdev_crop *)ARG3;
+      struct vki_v4l2_subdev_crop *data =
+         (struct vki_v4l2_subdev_crop *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_SUBDEV_S_CROP)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_SUBDEV_G_SELECTION: {
-      struct vki_v4l2_subdev_selection *data = (struct vki_v4l2_subdev_selection *)ARG3;
+      struct vki_v4l2_subdev_selection *data =
+         (struct vki_v4l2_subdev_selection *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_G_SELECTION).pad", data->pad);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_G_SELECTION).which", data->which);
       PRE_FIELD_READ("ioctl(VKI_V4L2_SUBDEV_G_SELECTION).target", data->target);
@@ -8975,43 +9202,48 @@ PRE(sys_ioctl)
       break;
    }
    case VKI_V4L2_SUBDEV_S_SELECTION: {
-      struct vki_v4l2_subdev_selection *data = (struct vki_v4l2_subdev_selection *)ARG3;
+      struct vki_v4l2_subdev_selection *data =
+         (struct vki_v4l2_subdev_selection *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_V4L2_SUBDEV_S_SELECTION)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_MEDIA_IOC_DEVICE_INFO: {
-      struct vki_media_device_info *data = (struct vki_media_device_info *)ARG3;
+      struct vki_media_device_info *data =
+         (struct vki_media_device_info *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_MEDIA_IOC_DEVICE_INFO).reserved", data->reserved);
       PRE_MEM_WRITE("ioctl(VKI_MEDIA_IOC_DEVICE_INFO)",
             (Addr)data, sizeof(*data) - sizeof(data->reserved));
       break;
    }
    case VKI_MEDIA_IOC_ENUM_ENTITIES: {
-      struct vki_media_entity_desc *data = (struct vki_media_entity_desc *)ARG3;
+      struct vki_media_entity_desc *data =
+         (struct vki_media_entity_desc *)(Addr)ARG3;
       PRE_FIELD_READ("ioctl(VKI_MEDIA_IOC_ENUM_ENTITIES).id", data->id);
       PRE_MEM_WRITE("ioctl(VKI_MEDIA_IOC_ENUM_ENTITIES)",
             (Addr)data->name, sizeof(*data) - sizeof(data->id));
       break;
    }
    case VKI_MEDIA_IOC_ENUM_LINKS: {
-      struct vki_media_links_enum *data = (struct vki_media_links_enum *)ARG3;
+      struct vki_media_links_enum *data =
+         (struct vki_media_links_enum *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_MEDIA_IOC_ENUM_LINKS)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_MEDIA_IOC_SETUP_LINK: {
-      struct vki_media_link_desc *data = (struct vki_media_link_desc *)ARG3;
+      struct vki_media_link_desc *data =
+         (struct vki_media_link_desc *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_MEDIA_IOC_SETUP_LINK)", (Addr)data, sizeof(*data));
       break;
    }
 
    /* Serial */
    case VKI_TIOCGSERIAL: {
-      struct vki_serial_struct *data = (struct vki_serial_struct *)ARG3;
+      struct vki_serial_struct *data = (struct vki_serial_struct *)(Addr)ARG3;
       PRE_MEM_WRITE("ioctl(VKI_TIOCGSERIAL)", (Addr)data, sizeof(*data));
       break;
    }
    case VKI_TIOCSSERIAL: {
-      struct vki_serial_struct *data = (struct vki_serial_struct *)ARG3;
+      struct vki_serial_struct *data = (struct vki_serial_struct *)(Addr)ARG3;
       PRE_MEM_READ("ioctl(VKI_TIOCSSERIAL)", (Addr)data, sizeof(*data));
       break;
    }
@@ -9115,7 +9347,7 @@ POST(sys_ioctl)
          } else {
             /* be a bit more sophisticated */
             POST_MEM_WRITE(ARG3, 28);
-            UInt* word = (UInt*)ARG3;
+            UInt* word = (UInt*)(Addr)ARG3;
             if (word && word[2] && word[3] < 0x200/*stay sane*/)
                POST_MEM_WRITE(word[2], word[3]); // "ptr1"
             if (word && word[4] && word[5] < 0x200/*stay sane*/)
@@ -9146,12 +9378,12 @@ POST(sys_ioctl)
       that writable areas are addressable. */
    case VKI_ION_IOC_ALLOC: {
       struct vki_ion_allocation_data* data
-         = (struct vki_ion_allocation_data*)ARG3;
+         = (struct vki_ion_allocation_data*)(Addr)ARG3;
       POST_FIELD_WRITE(data->handle);
       break;
    }
    case VKI_ION_IOC_MAP: {
-      struct vki_ion_fd_data* data = (struct vki_ion_fd_data*)ARG3;
+      struct vki_ion_fd_data* data = (struct vki_ion_fd_data*)(Addr)ARG3;
       POST_FIELD_WRITE(data->fd);
       break;
    }
@@ -9161,7 +9393,7 @@ POST(sys_ioctl)
    case VKI_ION_IOC_SHARE:
       break;
    case VKI_ION_IOC_IMPORT: {
-      struct vki_ion_fd_data* data = (struct vki_ion_fd_data*)ARG3;
+      struct vki_ion_fd_data* data = (struct vki_ion_fd_data*)(Addr)ARG3;
       POST_FIELD_WRITE(data->handle);
       break;
    }
@@ -9172,7 +9404,8 @@ POST(sys_ioctl)
       break;
 
    case VKI_SYNC_IOC_MERGE: {
-      struct vki_sync_merge_data* data = (struct vki_sync_merge_data*)ARG3;
+      struct vki_sync_merge_data* data =
+         (struct vki_sync_merge_data*)(Addr)ARG3;
       POST_FIELD_WRITE(data->fence);
       break;
    }
@@ -9255,7 +9488,7 @@ POST(sys_ioctl)
       break;
    case VKI_SG_IO:
       {
-         vki_sg_io_hdr_t *sgio = (vki_sg_io_hdr_t*)ARG3;
+         vki_sg_io_hdr_t *sgio = (vki_sg_io_hdr_t*)(Addr)ARG3;
          if ( sgio->sbp ) {
             POST_MEM_WRITE( (Addr)sgio->sbp, sgio->sb_len_wr );
          }
@@ -9297,52 +9530,52 @@ POST(sys_ioctl)
 
       /* These all use struct ifreq AFAIK */
    case VKI_SIOCGIFINDEX:        /* get iface index              */
-      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_ifindex,
-                      sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_ifindex) );
+      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_ifindex,
+                      sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_ifindex));
       break;
    case VKI_SIOCGIFFLAGS:        /* get flags                    */
-      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_flags,
-                      sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_flags) );
+      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_flags,
+                      sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_flags));
       break;
    case VKI_SIOCGIFHWADDR:       /* Get hardware address         */
-      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_hwaddr,
-                      sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_hwaddr) );
+      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_hwaddr,
+                      sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_hwaddr));
       break;
    case VKI_SIOCGIFMTU:          /* get MTU size                 */
-      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_mtu,
-                      sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_mtu) );
+      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_mtu,
+                      sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_mtu) );
       break;
    case VKI_SIOCGIFADDR:         /* get PA address               */
    case VKI_SIOCGIFDSTADDR:      /* get remote PA address        */
    case VKI_SIOCGIFBRDADDR:      /* get broadcast PA address     */
    case VKI_SIOCGIFNETMASK:      /* get network PA mask          */
       POST_MEM_WRITE(
-                (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_addr,
-                sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_addr) );
+                (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_addr,
+                sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_addr) );
       break;
    case VKI_SIOCGIFMETRIC:       /* get metric                   */
       POST_MEM_WRITE(
-                (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_metric,
-                sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_metric) );
+                (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_metric,
+                sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_metric) );
       break;
    case VKI_SIOCGIFMAP:          /* Get device parameters        */
       POST_MEM_WRITE(
-                (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_map,
-                sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_map) );
+                (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_map,
+                sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_map) );
       break;
      break;
    case VKI_SIOCGIFTXQLEN:       /* Get the tx queue length      */
       POST_MEM_WRITE(
-                (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_qlen,
-                sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_qlen) );
+                (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_qlen,
+                sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_qlen) );
       break;
    case VKI_SIOCGIFNAME:         /* get iface name               */
       POST_MEM_WRITE(
-                (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_name,
-                sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_name) );
+                (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name,
+                sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name) );
       break;
    case VKI_SIOCETHTOOL: {       /* ethtool(8) interface         */
-      struct vki_ifreq *ir = (struct vki_ifreq *)ARG3;
+      struct vki_ifreq *ir = (struct vki_ifreq *)(Addr)ARG3;
       switch ( *(vki_u32 *)ir->vki_ifr_data ) {
       case VKI_ETHTOOL_GSET:
          POST_MEM_WRITE( (Addr)ir->vki_ifr_data, sizeof(struct vki_ethtool_cmd));
@@ -9423,28 +9656,28 @@ POST(sys_ioctl)
    }
    case VKI_SIOCGMIIPHY:         /* get hardware entry           */
       POST_MEM_WRITE(
-                (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->phy_id,
-                sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->phy_id) );
+                (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->phy_id,
+                sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->phy_id));
       break;
    case VKI_SIOCGMIIREG:         /* get hardware entry registers */
       POST_MEM_WRITE(
-                (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->val_out,
-                sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)ARG3)->vki_ifr_data)->val_out) );
+                (Addr)&((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->val_out,
+                sizeof(((struct vki_mii_ioctl_data *)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_data)->val_out));
       break;
 
       /* tun/tap related ioctls */
    case VKI_TUNSETIFF:
-      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_name,
-                      sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_name) );
+      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name,
+                      sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name) );
       break;
    case VKI_TUNGETFEATURES:
       POST_MEM_WRITE( ARG3, sizeof(unsigned int) );
       break;
    case VKI_TUNGETIFF:
-      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_name,
-                      sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_name) );
-      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)ARG3)->vki_ifr_flags,
-                      sizeof(((struct vki_ifreq *)ARG3)->vki_ifr_flags) );
+      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name,
+                      sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_name) );
+      POST_MEM_WRITE( (Addr)&((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_flags,
+                      sizeof(((struct vki_ifreq *)(Addr)ARG3)->vki_ifr_flags) );
       break;
    case VKI_TUNGETSNDBUF:
       POST_MEM_WRITE( ARG3, sizeof(int) );
@@ -9461,7 +9694,7 @@ POST(sys_ioctl)
         POST_MEM_WRITE(ARG3, sizeof(struct ifconf));
       */
       if (RES == 0 && ARG3 ) {
-        struct vki_ifconf *ifc = (struct vki_ifconf *) ARG3;
+        struct vki_ifconf *ifc = (struct vki_ifconf *) (Addr)ARG3;
         if (ifc->vki_ifc_buf != NULL)
            POST_MEM_WRITE( (Addr)(ifc->vki_ifc_buf), ifc->ifc_len );
       }
@@ -9598,7 +9831,8 @@ POST(sys_ioctl)
       POST_MEM_WRITE( (Addr)ARG3, sizeof(struct vki_snd_ctl_card_info) );
       break;
    case VKI_SNDRV_CTL_IOCTL_ELEM_LIST: {
-      struct vki_snd_ctl_elem_list *data = (struct vki_snd_ctl_elem_list *)ARG3;
+      struct vki_snd_ctl_elem_list *data =
+         (struct vki_snd_ctl_elem_list *)(Addr)ARG3;
       POST_MEM_WRITE( (Addr)&data->used, sizeof(data->used) );
       POST_MEM_WRITE( (Addr)&data->count, sizeof(data->count) );
       if (data->pids) {
@@ -9607,7 +9841,7 @@ POST(sys_ioctl)
       break;
    }
    case VKI_SNDRV_CTL_IOCTL_TLV_READ: {
-      struct vki_snd_ctl_tlv *data = (struct vki_snd_ctl_tlv *)ARG3;
+      struct vki_snd_ctl_tlv *data = (struct vki_snd_ctl_tlv *)(Addr)ARG3;
       POST_MEM_WRITE( (Addr)data->tlv, data->length );
       break;
    }
@@ -9681,7 +9915,7 @@ POST(sys_ioctl)
       POST_MEM_WRITE(ARG3, sizeof(vki_uint));
       break;
    case VKI_BLKREPORTZONE: {
-      const struct vki_blk_zone_report *zr = (void *)ARG3;
+      const struct vki_blk_zone_report *zr = (void *)(Addr)ARG3;
 
       POST_MEM_WRITE(ARG3, sizeof(*zr) + zr->nr_zones * sizeof(zr->zones[0]));
       break;
@@ -9738,7 +9972,8 @@ POST(sys_ioctl)
       break;
    case VKI_CDROMREADAUDIO:
    {
-      struct vki_cdrom_read_audio *cra = (struct vki_cdrom_read_audio *) ARG3;
+      struct vki_cdrom_read_audio *cra =
+         (struct vki_cdrom_read_audio *) (Addr)ARG3;
       POST_MEM_WRITE( (Addr)(cra->buf), cra->nframes * VKI_CD_FRAMESIZE_RAW);
       break;
    }
@@ -9821,8 +10056,8 @@ POST(sys_ioctl)
       break;
 
    case VKI_GIO_FONTX:
-      POST_MEM_WRITE( (Addr)((struct vki_consolefontdesc *)ARG3)->chardata,
-                      32 * ((struct vki_consolefontdesc *)ARG3)->charcount );
+      POST_MEM_WRITE((Addr)((struct vki_consolefontdesc *)(Addr)ARG3)->chardata,
+                     32 * ((struct vki_consolefontdesc *)(Addr)ARG3)->charcount);
       break;
    case VKI_PIO_FONTX:
       break;
@@ -9879,7 +10114,7 @@ POST(sys_ioctl)
 
    case VKI_GIO_UNIMAP:
       if ( ARG3 ) {
-         struct vki_unimapdesc *desc = (struct vki_unimapdesc *) ARG3;
+         struct vki_unimapdesc *desc = (struct vki_unimapdesc *) (Addr)ARG3;
          POST_MEM_WRITE( (Addr)&desc->entry_ct, sizeof(desc->entry_ct));
          POST_MEM_WRITE( (Addr)desc->entries,
                         desc->entry_ct * sizeof(struct vki_unipair) );
@@ -9909,15 +10144,15 @@ POST(sys_ioctl)
       break;
       
    case VKI_KDGKBENT:
-      POST_MEM_WRITE( (Addr)&((struct vki_kbentry *)ARG3)->kb_value,
-                      sizeof(((struct vki_kbentry *)ARG3)->kb_value) );
+      POST_MEM_WRITE( (Addr)&((struct vki_kbentry *)(Addr)ARG3)->kb_value,
+                      sizeof(((struct vki_kbentry *)(Addr)ARG3)->kb_value) );
       break;
    case VKI_KDSKBENT:
       break;
       
    case VKI_KDGKBSENT:
-      POST_MEM_WRITE( (Addr)((struct vki_kbsentry *)ARG3)->kb_string,
-                      sizeof(((struct vki_kbsentry *)ARG3)->kb_string) );
+      POST_MEM_WRITE( (Addr)((struct vki_kbsentry *)(Addr)ARG3)->kb_string,
+                      sizeof(((struct vki_kbsentry *)(Addr)ARG3)->kb_string) );
       break;
    case VKI_KDSKBSENT:
       break;
@@ -9929,8 +10164,8 @@ POST(sys_ioctl)
       break;
       
    case VKI_KDGETKEYCODE:
-      POST_MEM_WRITE( (Addr)((struct vki_kbkeycode *)ARG3)->keycode,
-                      sizeof(((struct vki_kbkeycode *)ARG3)->keycode) );
+      POST_MEM_WRITE( (Addr)((struct vki_kbkeycode *)(Addr)ARG3)->keycode,
+                      sizeof(((struct vki_kbkeycode *)(Addr)ARG3)->keycode) );
       break;
    case VKI_KDSETKEYCODE:
       break;
@@ -9943,7 +10178,8 @@ POST(sys_ioctl)
 
    case VKI_KDFONTOP:
       if ( ARG3 ) {
-         struct vki_console_font_op *op = (struct vki_console_font_op *) ARG3;
+         struct vki_console_font_op *op =
+            (struct vki_console_font_op *) (Addr)ARG3;
          switch ( op->op ) {
             case VKI_KD_FONT_OP_SET:
                break;
@@ -9970,10 +10206,10 @@ POST(sys_ioctl)
    case VKI_VT_SETMODE:
       break;
    case VKI_VT_GETSTATE:
-      POST_MEM_WRITE( (Addr) &(((struct vki_vt_stat*) ARG3)->v_active),
-                      sizeof(((struct vki_vt_stat*) ARG3)->v_active) );
-      POST_MEM_WRITE( (Addr) &(((struct vki_vt_stat*) ARG3)->v_state),
-                      sizeof(((struct vki_vt_stat*) ARG3)->v_state) );
+      POST_MEM_WRITE( (Addr) &(((struct vki_vt_stat*) (Addr)ARG3)->v_active),
+                      sizeof(((struct vki_vt_stat*) (Addr)ARG3)->v_active) );
+      POST_MEM_WRITE( (Addr) &(((struct vki_vt_stat*) (Addr)ARG3)->v_state),
+                      sizeof(((struct vki_vt_stat*) (Addr)ARG3)->v_state) );
       break;
    case VKI_VT_RELDISP:
    case VKI_VT_ACTIVATE:
@@ -9990,28 +10226,31 @@ POST(sys_ioctl)
 
    case VKI_USBDEVFS_CONTROL:
       if ( ARG3 ) {
-         struct vki_usbdevfs_ctrltransfer *vkuc = (struct vki_usbdevfs_ctrltransfer *)ARG3;
+         struct vki_usbdevfs_ctrltransfer *vkuc =
+            (struct vki_usbdevfs_ctrltransfer *)(Addr)ARG3;
          if (vkuc->bRequestType & 0x80)
             POST_MEM_WRITE((Addr)vkuc->data, RES);
       }
       break;
    case VKI_USBDEVFS_BULK:
       if ( ARG3 ) {
-         struct vki_usbdevfs_bulktransfer *vkub = (struct vki_usbdevfs_bulktransfer *)ARG3;
+         struct vki_usbdevfs_bulktransfer *vkub =
+            (struct vki_usbdevfs_bulktransfer *)(Addr)ARG3;
          if (vkub->ep & 0x80)
             POST_MEM_WRITE((Addr)vkub->data, RES);
       }
       break;
    case VKI_USBDEVFS_GETDRIVER:
       if ( ARG3 ) {
-         struct vki_usbdevfs_getdriver *vkugd = (struct vki_usbdevfs_getdriver *)ARG3;
+         struct vki_usbdevfs_getdriver *vkugd =
+            (struct vki_usbdevfs_getdriver *)(Addr)ARG3;
          POST_MEM_WRITE((Addr)&vkugd->driver, sizeof(vkugd->driver));
       }
       break;
    case VKI_USBDEVFS_REAPURB:
    case VKI_USBDEVFS_REAPURBNDELAY:
       if ( ARG3 ) {
-         struct vki_usbdevfs_urb **vkuu = (struct vki_usbdevfs_urb**)ARG3;
+         struct vki_usbdevfs_urb **vkuu = (struct vki_usbdevfs_urb**)(Addr)ARG3;
          POST_MEM_WRITE((Addr)vkuu, sizeof(*vkuu));
          if (!*vkuu)
             break;
@@ -10044,7 +10283,8 @@ POST(sys_ioctl)
       break;
    case VKI_USBDEVFS_IOCTL:
       if ( ARG3 ) {
-         struct vki_usbdevfs_ioctl *vkui = (struct vki_usbdevfs_ioctl *)ARG3;
+         struct vki_usbdevfs_ioctl *vkui =
+            (struct vki_usbdevfs_ioctl *)(Addr)ARG3;
          UInt dir2, size2;
          dir2  = _VKI_IOC_DIR(vkui->ioctl_code);
          size2 = _VKI_IOC_SIZE(vkui->ioctl_code);
@@ -10066,7 +10306,8 @@ POST(sys_ioctl)
       break;
    case VKI_I2C_RDWR:
       if ( ARG3 ) {
-          struct vki_i2c_rdwr_ioctl_data *vkui = (struct vki_i2c_rdwr_ioctl_data *)ARG3;
+          struct vki_i2c_rdwr_ioctl_data *vkui =
+             (struct vki_i2c_rdwr_ioctl_data *)(Addr)ARG3;
           UInt i;
           for (i=0; i < vkui->nmsgs; i++) {
               struct vki_i2c_msg *msg = vkui->msgs + i;
@@ -10078,7 +10319,7 @@ POST(sys_ioctl)
    case VKI_I2C_SMBUS:
        if ( ARG3 ) {
             struct vki_i2c_smbus_ioctl_data *vkis
-               = (struct vki_i2c_smbus_ioctl_data *) ARG3;
+               = (struct vki_i2c_smbus_ioctl_data *) (Addr)ARG3;
             /* i2c_smbus_write_quick hides its value in read_write, so
                this variable can have a different meaning */
             if ((vkis->read_write == VKI_I2C_SMBUS_READ)
@@ -10140,8 +10381,8 @@ POST(sys_ioctl)
       break;
    case VKI_SIOCGIWNAME:
       if (ARG3) {
-         POST_MEM_WRITE((Addr)((struct vki_iwreq *)ARG3)->u.name,
-                        sizeof(((struct vki_iwreq *)ARG3)->u.name));
+         POST_MEM_WRITE((Addr)((struct vki_iwreq *)(Addr)ARG3)->u.name,
+                        sizeof(((struct vki_iwreq *)(Addr)ARG3)->u.name));
       }
       break;
    case VKI_SIOCGIWNWID:
@@ -10154,19 +10395,19 @@ POST(sys_ioctl)
    case VKI_SIOCGIWPOWER:
    case VKI_SIOCGIWAUTH:
       if (ARG3) {
-         POST_MEM_WRITE((Addr)&((struct vki_iwreq *)ARG3)->u.param,
+         POST_MEM_WRITE((Addr)&((struct vki_iwreq *)(Addr)ARG3)->u.param,
                         sizeof(struct vki_iw_param));
       }
       break;
    case VKI_SIOCGIWFREQ:
       if (ARG3) {
-         POST_MEM_WRITE((Addr)&((struct vki_iwreq *)ARG3)->u.freq,
+         POST_MEM_WRITE((Addr)&((struct vki_iwreq *)(Addr)ARG3)->u.freq,
                         sizeof(struct vki_iw_freq));
       }
       break;
    case VKI_SIOCGIWMODE:
       if (ARG3) {
-         POST_MEM_WRITE((Addr)&((struct vki_iwreq *)ARG3)->u.mode,
+         POST_MEM_WRITE((Addr)&((struct vki_iwreq *)(Addr)ARG3)->u.mode,
                        sizeof(__vki_u32));
       }
       break;
@@ -10184,13 +10425,13 @@ POST(sys_ioctl)
    case VKI_SIOCGIWENCODEEXT:
       if (ARG3) {
          struct vki_iw_point* point;
-         point = &((struct vki_iwreq *)ARG3)->u.data;
+         point = &((struct vki_iwreq *)(Addr)ARG3)->u.data;
          POST_MEM_WRITE((Addr)point->pointer, point->length);
       }
       break;
    case VKI_SIOCGIWAP:
       if (ARG3) {
-         POST_MEM_WRITE((Addr)&((struct vki_iwreq *)ARG3)->u.ap_addr,
+         POST_MEM_WRITE((Addr)&((struct vki_iwreq *)(Addr)ARG3)->u.ap_addr,
                         sizeof(struct vki_sockaddr));
       }
       break;
@@ -10217,7 +10458,7 @@ POST(sys_ioctl)
    case VKI_BINDER_WRITE_READ:
        if (ARG3) {
            struct vki_binder_write_read* bwr
-              = (struct vki_binder_write_read*)ARG3;
+              = (struct vki_binder_write_read*)(Addr)ARG3;
            POST_FIELD_WRITE(bwr->write_consumed);
            POST_FIELD_WRITE(bwr->read_consumed);
 
@@ -10234,7 +10475,8 @@ POST(sys_ioctl)
        break;
    case VKI_BINDER_VERSION:
        if (ARG3) {
-           struct vki_binder_version* bv = (struct vki_binder_version*)ARG3;
+           struct vki_binder_version* bv =
+              (struct vki_binder_version*)(Addr)ARG3;
            POST_FIELD_WRITE(bv->protocol_version);
        }
        break;
@@ -10242,7 +10484,8 @@ POST(sys_ioctl)
 
    case VKI_HCIGETDEVLIST:
       if (ARG3) {
-        struct vki_hci_dev_list_req* dlr = (struct vki_hci_dev_list_req*)ARG3;
+        struct vki_hci_dev_list_req* dlr =
+           (struct vki_hci_dev_list_req*)(Addr)ARG3;
         POST_MEM_WRITE((Addr)ARG3 + sizeof(struct vki_hci_dev_list_req),
                        dlr->dev_num * sizeof(struct vki_hci_dev_req));
       }
@@ -10250,7 +10493,8 @@ POST(sys_ioctl)
 
    case VKI_HCIINQUIRY:
       if (ARG3) {
-        struct vki_hci_inquiry_req* ir = (struct vki_hci_inquiry_req*)ARG3;
+        struct vki_hci_inquiry_req* ir =
+           (struct vki_hci_inquiry_req*)(Addr)ARG3;
         POST_MEM_WRITE((Addr)ARG3 + sizeof(struct vki_hci_inquiry_req),
                        ir->num_rsp * sizeof(struct vki_inquiry_info));
       }
@@ -10258,7 +10502,7 @@ POST(sys_ioctl)
 
    case VKI_DRM_IOCTL_VERSION:
       if (ARG3) {
-         struct vki_drm_version* data = (struct vki_drm_version *)ARG3;
+         struct vki_drm_version* data = (struct vki_drm_version *)(Addr)ARG3;
          struct vg_drm_version_info* info = container_of(data, struct vg_drm_version_info, data);
          const vki_size_t orig_name_len = info->orig->name_len;
          const vki_size_t orig_date_len = info->orig->date_len;
@@ -10282,68 +10526,75 @@ POST(sys_ioctl)
       break;
    case VKI_DRM_IOCTL_GET_UNIQUE:
       if (ARG3) {
-         struct vki_drm_unique *data = (struct vki_drm_unique *)ARG3;
+         struct vki_drm_unique *data = (struct vki_drm_unique *)(Addr)ARG3;
         POST_MEM_WRITE((Addr)data->unique, sizeof(data->unique_len));
       }
       break;
    case VKI_DRM_IOCTL_GET_MAGIC:
       if (ARG3) {
-         struct vki_drm_auth *data = (struct vki_drm_auth *)ARG3;
+         struct vki_drm_auth *data = (struct vki_drm_auth *)(Addr)ARG3;
          POST_MEM_WRITE((Addr)&data->magic, sizeof(data->magic));
       }
       break;
    case VKI_DRM_IOCTL_WAIT_VBLANK:
       if (ARG3) {
-         union vki_drm_wait_vblank *data = (union vki_drm_wait_vblank *)ARG3;
+         union vki_drm_wait_vblank *data =
+            (union vki_drm_wait_vblank *)(Addr)ARG3;
          POST_MEM_WRITE((Addr)&data->reply, sizeof(data->reply));
       }
       break;
    case VKI_DRM_IOCTL_GEM_FLINK:
       if (ARG3) {
-         struct vki_drm_gem_flink *data = (struct vki_drm_gem_flink *)ARG3;
+         struct vki_drm_gem_flink *data =
+            (struct vki_drm_gem_flink *)(Addr)ARG3;
          POST_MEM_WRITE((Addr)&data->name, sizeof(data->name));
       }
       break;
    case VKI_DRM_IOCTL_GEM_OPEN:
       if (ARG3) {
-         struct vki_drm_gem_open *data = (struct vki_drm_gem_open *)ARG3;
+         struct vki_drm_gem_open *data = (struct vki_drm_gem_open *)(Addr)ARG3;
         POST_MEM_WRITE((Addr)&data->handle, sizeof(data->handle));
         POST_MEM_WRITE((Addr)&data->size, sizeof(data->size));
       }
       break;
    case VKI_DRM_IOCTL_I915_GETPARAM:
       if (ARG3) {
-         vki_drm_i915_getparam_t *data = (vki_drm_i915_getparam_t *)ARG3;
+         vki_drm_i915_getparam_t *data = (vki_drm_i915_getparam_t *)(Addr)ARG3;
         POST_MEM_WRITE((Addr)data->value, sizeof(int));
       }
       break;
    case VKI_DRM_IOCTL_I915_GEM_BUSY:
       if (ARG3) {
-         struct vki_drm_i915_gem_busy *data = (struct vki_drm_i915_gem_busy *)ARG3;
+         struct vki_drm_i915_gem_busy *data =
+            (struct vki_drm_i915_gem_busy *)(Addr)ARG3;
          POST_MEM_WRITE((Addr)&data->busy, sizeof(data->busy));
       }
       break;
    case VKI_DRM_IOCTL_I915_GEM_CREATE:
       if (ARG3) {
-         struct vki_drm_i915_gem_create *data = (struct vki_drm_i915_gem_create *)ARG3;
+         struct vki_drm_i915_gem_create *data =
+            (struct vki_drm_i915_gem_create *)(Addr)ARG3;
         POST_MEM_WRITE((Addr)&data->handle, sizeof(data->handle));
       }
       break;
    case VKI_DRM_IOCTL_I915_GEM_PREAD:
       if (ARG3) {
-         struct vki_drm_i915_gem_pread *data = (struct vki_drm_i915_gem_pread *)ARG3;
+         struct vki_drm_i915_gem_pread *data =
+            (struct vki_drm_i915_gem_pread *)(Addr)ARG3;
         POST_MEM_WRITE((Addr)data->data_ptr, data->size);
       }
       break;
    case VKI_DRM_IOCTL_I915_GEM_MMAP_GTT:
       if (ARG3) {
-         struct vki_drm_i915_gem_mmap_gtt *data = (struct vki_drm_i915_gem_mmap_gtt *)ARG3;
+         struct vki_drm_i915_gem_mmap_gtt *data =
+            (struct vki_drm_i915_gem_mmap_gtt *)(Addr)ARG3;
          POST_MEM_WRITE((Addr)&data->offset, sizeof(data->offset));
       }
       break;
    case VKI_DRM_IOCTL_I915_GEM_SET_TILING:
       if (ARG3) {
-         struct vki_drm_i915_gem_set_tiling *data = (struct vki_drm_i915_gem_set_tiling *)ARG3;
+         struct vki_drm_i915_gem_set_tiling *data =
+            (struct vki_drm_i915_gem_set_tiling *)(Addr)ARG3;
          POST_MEM_WRITE((Addr)&data->tiling_mode, sizeof(data->tiling_mode));
          POST_MEM_WRITE((Addr)&data->stride, sizeof(data->stride));
          POST_MEM_WRITE((Addr)&data->swizzle_mode, sizeof(data->swizzle_mode));
@@ -10351,14 +10602,16 @@ POST(sys_ioctl)
       break;
    case VKI_DRM_IOCTL_I915_GEM_GET_TILING:
       if (ARG3) {
-         struct vki_drm_i915_gem_get_tiling *data = (struct vki_drm_i915_gem_get_tiling *)ARG3;
+         struct vki_drm_i915_gem_get_tiling *data =
+            (struct vki_drm_i915_gem_get_tiling *)(Addr)ARG3;
         POST_MEM_WRITE((Addr)&data->tiling_mode, sizeof(data->tiling_mode));
          POST_MEM_WRITE((Addr)&data->swizzle_mode, sizeof(data->swizzle_mode));
       }
       break;
    case VKI_DRM_IOCTL_I915_GEM_GET_APERTURE:
       if (ARG3) {
-         struct vki_drm_i915_gem_get_aperture *data = (struct vki_drm_i915_gem_get_aperture *)ARG3;
+         struct vki_drm_i915_gem_get_aperture *data =
+            (struct vki_drm_i915_gem_get_aperture *)(Addr)ARG3;
          POST_MEM_WRITE((Addr)&data->aper_size, sizeof(data->aper_size));
          POST_MEM_WRITE((Addr)&data->aper_available_size, sizeof(data->aper_available_size));
       }
@@ -10380,7 +10633,7 @@ POST(sys_ioctl)
 
    case VKI_KVM_S390_MEM_OP: {
       struct vki_kvm_s390_mem_op *args =
-         (struct vki_kvm_s390_mem_op *)(ARG3);
+         (struct vki_kvm_s390_mem_op *)(Addr)(ARG3);
       if (args->flags & VKI_KVM_S390_MEMOP_F_CHECK_ONLY)
          break;
       if (args->op == VKI_KVM_S390_MEMOP_LOGICAL_READ)
@@ -10392,7 +10645,7 @@ POST(sys_ioctl)
    case VKI_XEN_IOCTL_PRIVCMD_HYPERCALL: {
        SyscallArgs harrghs;
        struct vki_xen_privcmd_hypercall *args =
-          (struct vki_xen_privcmd_hypercall *)(ARG3);
+          (struct vki_xen_privcmd_hypercall *)(Addr)(ARG3);
 
        if (!args)
           break;
@@ -10414,13 +10667,13 @@ POST(sys_ioctl)
       break;
    case VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH: {
        struct vki_xen_privcmd_mmapbatch *args =
-           (struct vki_xen_privcmd_mmapbatch *)(ARG3);
+           (struct vki_xen_privcmd_mmapbatch *)(Addr)(ARG3);
        POST_MEM_WRITE((Addr)args->arr, sizeof(*(args->arr)) * args->num);
       }
       break;
    case VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH_V2: {
        struct vki_xen_privcmd_mmapbatch_v2 *args =
-           (struct vki_xen_privcmd_mmapbatch_v2 *)(ARG3);
+           (struct vki_xen_privcmd_mmapbatch_v2 *)(Addr)(ARG3);
        POST_MEM_WRITE((Addr)args->err, sizeof(*(args->err)) * args->num);
       }
       break;
@@ -10437,7 +10690,7 @@ POST(sys_ioctl)
 
    /* Lustre */
    case VKI_OBD_IOC_FID2PATH: {
-       struct vki_getinfo_fid2path *args = (void *)(ARG3);
+       struct vki_getinfo_fid2path *args = (void *)(Addr)(ARG3);
        POST_FIELD_WRITE(args->gf_recno);
        POST_FIELD_WRITE(args->gf_linkno);
        POST_MEM_WRITE((Addr)args->gf_path, VG_(strlen)(args->gf_path)+1);
@@ -10449,7 +10702,7 @@ POST(sys_ioctl)
       break;
 
    case VKI_LL_IOC_GETPARENT: {
-       struct vki_getparent *gp = (struct vki_getparent *)ARG3;
+       struct vki_getparent *gp = (struct vki_getparent *)(Addr)ARG3;
        POST_FIELD_WRITE(gp->gp_fid);
        POST_MEM_WRITE((Addr)gp->gp_name, VG_(strlen)(gp->gp_name)+1);
        break;
@@ -10483,12 +10736,13 @@ POST(sys_ioctl)
    case VKI_V4L2_PREPARE_BUF:
       break;
    case VKI_V4L2_QUERYCAP: {
-      struct vki_v4l2_capability *data = (struct vki_v4l2_capability *)ARG3;
+      struct vki_v4l2_capability *data =
+         (struct vki_v4l2_capability *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENUM_FMT: {
-      struct vki_v4l2_fmtdesc *data = (struct vki_v4l2_fmtdesc *)ARG3;
+      struct vki_v4l2_fmtdesc *data = (struct vki_v4l2_fmtdesc *)(Addr)ARG3;
       POST_FIELD_WRITE(data->flags);
       POST_FIELD_WRITE(data->description);
       POST_FIELD_WRITE(data->pixelformat);
@@ -10496,7 +10750,7 @@ POST(sys_ioctl)
       break;
    }
    case VKI_V4L2_G_FMT: {
-      struct vki_v4l2_format *data = (struct vki_v4l2_format *)ARG3;
+      struct vki_v4l2_format *data = (struct vki_v4l2_format *)(Addr)ARG3;
       switch (data->type) {
       case VKI_V4L2_BUF_TYPE_VIDEO_CAPTURE:
       case VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT:
@@ -10525,7 +10779,7 @@ POST(sys_ioctl)
       break;
    }
    case VKI_V4L2_QUERYBUF: {
-      struct vki_v4l2_buffer *data = (struct vki_v4l2_buffer *)ARG3;
+      struct vki_v4l2_buffer *data = (struct vki_v4l2_buffer *)(Addr)ARG3;
       if (data->type == VKI_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE ||
             data->type == VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) {
          unsigned i;
@@ -10552,19 +10806,21 @@ POST(sys_ioctl)
       break;
    }
    case VKI_V4L2_G_FBUF: {
-      struct vki_v4l2_framebuffer *data = (struct vki_v4l2_framebuffer *)ARG3;
+      struct vki_v4l2_framebuffer *data =
+         (struct vki_v4l2_framebuffer *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_S_FBUF: {
-      struct vki_v4l2_framebuffer *data = (struct vki_v4l2_framebuffer *)ARG3;
+      struct vki_v4l2_framebuffer *data =
+         (struct vki_v4l2_framebuffer *)(Addr)ARG3;
       POST_FIELD_WRITE(data->capability);
       POST_FIELD_WRITE(data->flags);
       POST_FIELD_WRITE(data->fmt);
       break;
    }
    case VKI_V4L2_QBUF: {
-      struct vki_v4l2_buffer *data = (struct vki_v4l2_buffer *)ARG3;
+      struct vki_v4l2_buffer *data = (struct vki_v4l2_buffer *)(Addr)ARG3;
 
       if (data->type == VKI_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE ||
             data->type == VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) {
@@ -10583,12 +10839,14 @@ POST(sys_ioctl)
       break;
    }
    case VKI_V4L2_EXPBUF: {
-      struct vki_v4l2_exportbuffer *data = (struct vki_v4l2_exportbuffer *)ARG3;
+      struct vki_v4l2_exportbuffer *data =
+         (struct vki_v4l2_exportbuffer *)(Addr)ARG3;
       POST_FIELD_WRITE(data->fd);
       break;
    }
    case VKI_V4L2_DQBUF: {
-      struct vki_v4l2_buffer *data = (struct vki_v4l2_buffer *)ARG3;
+      struct vki_v4l2_buffer *data =
+         (struct vki_v4l2_buffer *)(Addr)ARG3;
       POST_FIELD_WRITE(data->index);
       POST_FIELD_WRITE(data->bytesused);
       POST_FIELD_WRITE(data->field);
@@ -10614,7 +10872,8 @@ POST(sys_ioctl)
       break;
    }
    case VKI_V4L2_G_PARM: {
-      struct vki_v4l2_streamparm *data = (struct vki_v4l2_streamparm *)ARG3;
+      struct vki_v4l2_streamparm *data =
+         (struct vki_v4l2_streamparm *)(Addr)ARG3;
       int is_output = data->type == VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT ||
          data->type == VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE ||
          data->type == VKI_V4L2_BUF_TYPE_VBI_OUTPUT ||
@@ -10629,133 +10888,136 @@ POST(sys_ioctl)
       break;
    }
    case VKI_V4L2_G_STD: {
-      vki_v4l2_std_id *data = (vki_v4l2_std_id *)ARG3;
+      vki_v4l2_std_id *data = (vki_v4l2_std_id *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENUMSTD: {
-      struct vki_v4l2_standard *data = (struct vki_v4l2_standard *)ARG3;
+      struct vki_v4l2_standard *data = (struct vki_v4l2_standard *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)&data->id, sizeof(*data) - sizeof(data->index));
       break;
    }
    case VKI_V4L2_ENUMINPUT: {
-      struct vki_v4l2_input *data = (struct vki_v4l2_input *)ARG3;
+      struct vki_v4l2_input *data = (struct vki_v4l2_input *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data->name, sizeof(*data) - sizeof(data->index));
       break;
    }
    case VKI_V4L2_G_CTRL: {
-      struct vki_v4l2_control *data = (struct vki_v4l2_control *)ARG3;
+      struct vki_v4l2_control *data = (struct vki_v4l2_control *)(Addr)ARG3;
       POST_FIELD_WRITE(data->value);
       break;
    }
    case VKI_V4L2_G_TUNER: {
-      struct vki_v4l2_tuner *data = (struct vki_v4l2_tuner *)ARG3;
+      struct vki_v4l2_tuner *data = (struct vki_v4l2_tuner *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data->name,
             sizeof(*data) - sizeof(data->index) - sizeof(data->reserved));
       break;
    }
    case VKI_V4L2_G_AUDIO: {
-      struct vki_v4l2_audio *data = (struct vki_v4l2_audio *)ARG3;
+      struct vki_v4l2_audio *data = (struct vki_v4l2_audio *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data,
             sizeof(*data) - sizeof(data->reserved));
       break;
    }
    case VKI_V4L2_QUERYCTRL: {
-      struct vki_v4l2_queryctrl *data = (struct vki_v4l2_queryctrl *)ARG3;
+      struct vki_v4l2_queryctrl *data = (struct vki_v4l2_queryctrl *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)&data->type,
             sizeof(*data) - sizeof(data->id));
       break;
    }
    case VKI_V4L2_QUERYMENU: {
-      struct vki_v4l2_querymenu *data = (struct vki_v4l2_querymenu *)ARG3;
+      struct vki_v4l2_querymenu *data = (struct vki_v4l2_querymenu *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data->name,
             sizeof(*data) - sizeof(data->id) - sizeof(data->index));
       break;
    }
    case VKI_V4L2_G_INPUT: {
-      int *data = (int *)ARG3;
+      int *data = (int *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_G_EDID: {
-      struct vki_v4l2_edid *data = (struct vki_v4l2_edid *)ARG3;
+      struct vki_v4l2_edid *data = (struct vki_v4l2_edid *)(Addr)ARG3;
       if (data->blocks && data->edid)
          POST_MEM_WRITE((Addr)data->edid, data->blocks * 128);
       break;
    }
    case VKI_V4L2_G_OUTPUT: {
-      int *data = (int *)ARG3;
+      int *data = (int *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENUMOUTPUT: {
-      struct vki_v4l2_output *data = (struct vki_v4l2_output *)ARG3;
+      struct vki_v4l2_output *data = (struct vki_v4l2_output *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data->name, sizeof(*data) - sizeof(data->index));
       break;
    }
    case VKI_V4L2_G_AUDOUT: {
-      struct vki_v4l2_audioout *data = (struct vki_v4l2_audioout *)ARG3;
+      struct vki_v4l2_audioout *data = (struct vki_v4l2_audioout *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data,
             sizeof(*data) - sizeof(data->reserved));
       break;
    }
    case VKI_V4L2_G_MODULATOR: {
-      struct vki_v4l2_modulator *data = (struct vki_v4l2_modulator *)ARG3;
+      struct vki_v4l2_modulator *data = (struct vki_v4l2_modulator *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data->name,
             sizeof(*data) - sizeof(data->index) - sizeof(data->reserved));
       break;
    }
    case VKI_V4L2_G_FREQUENCY: {
-      struct vki_v4l2_frequency *data = (struct vki_v4l2_frequency *)ARG3;
+      struct vki_v4l2_frequency *data = (struct vki_v4l2_frequency *)(Addr)ARG3;
       POST_FIELD_WRITE(data->type);
       POST_FIELD_WRITE(data->frequency);
       break;
    }
    case VKI_V4L2_CROPCAP: {
-      struct vki_v4l2_cropcap *data = (struct vki_v4l2_cropcap *)ARG3;
+      struct vki_v4l2_cropcap *data = (struct vki_v4l2_cropcap *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)&data->bounds, sizeof(*data) - sizeof(data->type));
       break;
    }
    case VKI_V4L2_G_CROP: {
-      struct vki_v4l2_crop *data = (struct vki_v4l2_crop *)ARG3;
+      struct vki_v4l2_crop *data = (struct vki_v4l2_crop *)(Addr)ARG3;
       POST_FIELD_WRITE(data->c);
       break;
    }
    case VKI_V4L2_G_JPEGCOMP: {
-      struct vki_v4l2_jpegcompression *data = (struct vki_v4l2_jpegcompression *)ARG3;
+      struct vki_v4l2_jpegcompression *data =
+         (struct vki_v4l2_jpegcompression *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_QUERYSTD: {
-      vki_v4l2_std_id *data = (vki_v4l2_std_id *)ARG3;
+      vki_v4l2_std_id *data = (vki_v4l2_std_id *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENUMAUDIO: {
-      struct vki_v4l2_audio *data = (struct vki_v4l2_audio *)ARG3;
+      struct vki_v4l2_audio *data = (struct vki_v4l2_audio *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data->name,
             sizeof(*data) - sizeof(data->index) - sizeof(data->reserved));
       break;
    }
    case VKI_V4L2_ENUMAUDOUT: {
-      struct vki_v4l2_audioout *data = (struct vki_v4l2_audioout *)ARG3;
+      struct vki_v4l2_audioout *data = (struct vki_v4l2_audioout *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data->name,
             sizeof(*data) - sizeof(data->index) - sizeof(data->reserved));
       break;
    }
    case VKI_V4L2_G_PRIORITY: {
-      __vki_u32 *data = (__vki_u32 *)ARG3;
+      __vki_u32 *data = (__vki_u32 *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_G_SLICED_VBI_CAP: {
-      struct vki_v4l2_sliced_vbi_cap *data = (struct vki_v4l2_sliced_vbi_cap *)ARG3;
+      struct vki_v4l2_sliced_vbi_cap *data =
+         (struct vki_v4l2_sliced_vbi_cap *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data,
             sizeof(*data) - sizeof(data->type) - sizeof(data->reserved));
       break;
    }
    case VKI_V4L2_G_EXT_CTRLS: {
-      struct vki_v4l2_ext_controls *data = (struct vki_v4l2_ext_controls *)ARG3;
+      struct vki_v4l2_ext_controls *data =
+         (struct vki_v4l2_ext_controls *)(Addr)ARG3;
       if (data->count) {
          unsigned i;
 
@@ -10770,105 +11032,122 @@ POST(sys_ioctl)
       break;
    }
    case VKI_V4L2_S_EXT_CTRLS: {
-      struct vki_v4l2_ext_controls *data = (struct vki_v4l2_ext_controls *)ARG3;
+      struct vki_v4l2_ext_controls *data =
+         (struct vki_v4l2_ext_controls *)(Addr)ARG3;
       POST_FIELD_WRITE(data->error_idx);
       break;
    }
    case VKI_V4L2_TRY_EXT_CTRLS: {
-      struct vki_v4l2_ext_controls *data = (struct vki_v4l2_ext_controls *)ARG3;
+      struct vki_v4l2_ext_controls *data =
+         (struct vki_v4l2_ext_controls *)(Addr)ARG3;
       POST_FIELD_WRITE(data->error_idx);
       break;
    }
    case VKI_V4L2_ENUM_FRAMESIZES: {
-      struct vki_v4l2_frmsizeenum *data = (struct vki_v4l2_frmsizeenum *)ARG3;
+      struct vki_v4l2_frmsizeenum *data =
+         (struct vki_v4l2_frmsizeenum *)(Addr)ARG3;
       POST_FIELD_WRITE(data->type);
       POST_FIELD_WRITE(data->stepwise);
       break;
    }
    case VKI_V4L2_ENUM_FRAMEINTERVALS: {
-      struct vki_v4l2_frmivalenum *data = (struct vki_v4l2_frmivalenum *)ARG3;
+      struct vki_v4l2_frmivalenum *data =
+         (struct vki_v4l2_frmivalenum *)(Addr)ARG3;
       POST_FIELD_WRITE(data->type);
       POST_FIELD_WRITE(data->stepwise);
       break;
    }
    case VKI_V4L2_G_ENC_INDEX: {
-      struct vki_v4l2_enc_idx *data = (struct vki_v4l2_enc_idx *)ARG3;
+      struct vki_v4l2_enc_idx *data = (struct vki_v4l2_enc_idx *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENCODER_CMD: {
-      struct vki_v4l2_encoder_cmd *data = (struct vki_v4l2_encoder_cmd *)ARG3;
+      struct vki_v4l2_encoder_cmd *data =
+         (struct vki_v4l2_encoder_cmd *)(Addr)ARG3;
       POST_FIELD_WRITE(data->flags);
       break;
    }
    case VKI_V4L2_TRY_ENCODER_CMD: {
-      struct vki_v4l2_encoder_cmd *data = (struct vki_v4l2_encoder_cmd *)ARG3;
+      struct vki_v4l2_encoder_cmd *data =
+         (struct vki_v4l2_encoder_cmd *)(Addr)ARG3;
       POST_FIELD_WRITE(data->flags);
       break;
    }
    case VKI_V4L2_DBG_S_REGISTER: {
-      struct vki_v4l2_dbg_register *data = (struct vki_v4l2_dbg_register *)ARG3;
+      struct vki_v4l2_dbg_register *data =
+         (struct vki_v4l2_dbg_register *)(Addr)ARG3;
       POST_FIELD_WRITE(data->size);
       break;
    }
    case VKI_V4L2_DBG_G_REGISTER: {
-      struct vki_v4l2_dbg_register *data = (struct vki_v4l2_dbg_register *)ARG3;
+      struct vki_v4l2_dbg_register *data =
+         (struct vki_v4l2_dbg_register *)(Addr)ARG3;
       POST_FIELD_WRITE(data->val);
       POST_FIELD_WRITE(data->size);
       break;
    }
    case VKI_V4L2_G_DV_TIMINGS: {
-      struct vki_v4l2_dv_timings *data = (struct vki_v4l2_dv_timings *)ARG3;
+      struct vki_v4l2_dv_timings *data =
+         (struct vki_v4l2_dv_timings *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_DQEVENT: {
-      struct vki_v4l2_event *data = (struct vki_v4l2_event *)ARG3;
+      struct vki_v4l2_event *data = (struct vki_v4l2_event *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_CREATE_BUFS: {
-      struct vki_v4l2_create_buffers *data = (struct vki_v4l2_create_buffers *)ARG3;
+      struct vki_v4l2_create_buffers *data =
+         (struct vki_v4l2_create_buffers *)(Addr)ARG3;
       POST_FIELD_WRITE(data->index);
       break;
    }
    case VKI_V4L2_G_SELECTION: {
-      struct vki_v4l2_selection *data = (struct vki_v4l2_selection *)ARG3;
+      struct vki_v4l2_selection *data =
+         (struct vki_v4l2_selection *)(Addr)ARG3;
       POST_FIELD_WRITE(data->r);
       break;
    }
    case VKI_V4L2_S_SELECTION: {
-      struct vki_v4l2_selection *data = (struct vki_v4l2_selection *)ARG3;
+      struct vki_v4l2_selection *data = (struct vki_v4l2_selection *)(Addr)ARG3;
       POST_FIELD_WRITE(data->r);
       break;
    }
    case VKI_V4L2_DECODER_CMD: {
-      struct vki_v4l2_decoder_cmd *data = (struct vki_v4l2_decoder_cmd *)ARG3;
+      struct vki_v4l2_decoder_cmd *data =
+         (struct vki_v4l2_decoder_cmd *)(Addr)ARG3;
       POST_FIELD_WRITE(data->flags);
       break;
    }
    case VKI_V4L2_TRY_DECODER_CMD: {
-      struct vki_v4l2_decoder_cmd *data = (struct vki_v4l2_decoder_cmd *)ARG3;
+      struct vki_v4l2_decoder_cmd *data =
+         (struct vki_v4l2_decoder_cmd *)(Addr)ARG3;
       POST_FIELD_WRITE(data->flags);
       break;
    }
    case VKI_V4L2_ENUM_DV_TIMINGS: {
-      struct vki_v4l2_enum_dv_timings *data = (struct vki_v4l2_enum_dv_timings *)ARG3;
+      struct vki_v4l2_enum_dv_timings *data =
+         (struct vki_v4l2_enum_dv_timings *)(Addr)ARG3;
       POST_FIELD_WRITE(data->timings);
       break;
    }
    case VKI_V4L2_QUERY_DV_TIMINGS: {
-      struct vki_v4l2_dv_timings *data = (struct vki_v4l2_dv_timings *)ARG3;
+      struct vki_v4l2_dv_timings *data =
+         (struct vki_v4l2_dv_timings *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_DV_TIMINGS_CAP: {
-      struct vki_v4l2_dv_timings_cap *data = (struct vki_v4l2_dv_timings_cap *)ARG3;
+      struct vki_v4l2_dv_timings_cap *data =
+         (struct vki_v4l2_dv_timings_cap *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
    case VKI_V4L2_ENUM_FREQ_BANDS: {
-      struct vki_v4l2_frequency_band *data = (struct vki_v4l2_frequency_band *)ARG3;
+      struct vki_v4l2_frequency_band *data =
+         (struct vki_v4l2_frequency_band *)(Addr)ARG3;
       POST_FIELD_WRITE(data->capability);
       POST_FIELD_WRITE(data->rangelow);
       POST_FIELD_WRITE(data->rangehigh);
@@ -10876,13 +11155,15 @@ POST(sys_ioctl)
       break;
    }
    case VKI_V4L2_DBG_G_CHIP_INFO: {
-      struct vki_v4l2_dbg_chip_info *data = (struct vki_v4l2_dbg_chip_info *)ARG3;
+      struct vki_v4l2_dbg_chip_info *data =
+         (struct vki_v4l2_dbg_chip_info *)(Addr)ARG3;
       POST_FIELD_WRITE(data->name);
       POST_FIELD_WRITE(data->flags);
       break;
    }
    case VKI_V4L2_QUERY_EXT_CTRL: {
-      struct vki_v4l2_query_ext_ctrl *data = (struct vki_v4l2_query_ext_ctrl *)ARG3;
+      struct vki_v4l2_query_ext_ctrl *data =
+         (struct vki_v4l2_query_ext_ctrl *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)&data->type,
             sizeof(*data) - sizeof(data->id) - sizeof(data->reserved));
       break;
@@ -10895,22 +11176,26 @@ POST(sys_ioctl)
       break;
 
    case VKI_V4L2_SUBDEV_G_FMT: {
-      struct vki_v4l2_subdev_format *data = (struct vki_v4l2_subdev_format *)ARG3;
+      struct vki_v4l2_subdev_format *data =
+         (struct vki_v4l2_subdev_format *)(Addr)ARG3;
       POST_FIELD_WRITE(data->format);
       break;
    }
    case VKI_V4L2_SUBDEV_G_FRAME_INTERVAL: {
-      struct vki_v4l2_subdev_frame_interval *data = (struct vki_v4l2_subdev_frame_interval *)ARG3;
+      struct vki_v4l2_subdev_frame_interval *data =
+         (struct vki_v4l2_subdev_frame_interval *)(Addr)ARG3;
       POST_FIELD_WRITE(data->interval);
       break;
    }
    case VKI_V4L2_SUBDEV_ENUM_MBUS_CODE: {
-      struct vki_v4l2_subdev_mbus_code_enum *data = (struct vki_v4l2_subdev_mbus_code_enum *)ARG3;
+      struct vki_v4l2_subdev_mbus_code_enum *data =
+         (struct vki_v4l2_subdev_mbus_code_enum *)(Addr)ARG3;
       POST_FIELD_WRITE(data->code);
       break;
    }
    case VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE: {
-      struct vki_v4l2_subdev_frame_size_enum *data = (struct vki_v4l2_subdev_frame_size_enum *)ARG3;
+      struct vki_v4l2_subdev_frame_size_enum *data =
+         (struct vki_v4l2_subdev_frame_size_enum *)(Addr)ARG3;
       POST_FIELD_WRITE(data->min_width);
       POST_FIELD_WRITE(data->min_height);
       POST_FIELD_WRITE(data->max_width);
@@ -10918,27 +11203,32 @@ POST(sys_ioctl)
       break;
    }
    case VKI_V4L2_SUBDEV_ENUM_FRAME_INTERVAL: {
-      struct vki_v4l2_subdev_frame_interval_enum *data = (struct vki_v4l2_subdev_frame_interval_enum *)ARG3;
+      struct vki_v4l2_subdev_frame_interval_enum *data =
+         (struct vki_v4l2_subdev_frame_interval_enum *)(Addr)ARG3;
       POST_FIELD_WRITE(data->interval);
       break;
    }
    case VKI_V4L2_SUBDEV_G_CROP: {
-      struct vki_v4l2_subdev_crop *data = (struct vki_v4l2_subdev_crop *)ARG3;
+      struct vki_v4l2_subdev_crop *data =
+         (struct vki_v4l2_subdev_crop *)(Addr)ARG3;
       POST_FIELD_WRITE(data->rect);
       break;
    }
    case VKI_V4L2_SUBDEV_G_SELECTION: {
-      struct vki_v4l2_subdev_selection *data = (struct vki_v4l2_subdev_selection *)ARG3;
+      struct vki_v4l2_subdev_selection *data =
+         (struct vki_v4l2_subdev_selection *)(Addr)ARG3;
       POST_FIELD_WRITE(data->r);
       break;
    }
    case VKI_MEDIA_IOC_DEVICE_INFO: {
-      struct vki_media_device_info *data = (struct vki_media_device_info *)ARG3;
+      struct vki_media_device_info *data =
+         (struct vki_media_device_info *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data) - sizeof(data->reserved));
       break;
    }
    case VKI_MEDIA_IOC_ENUM_ENTITIES: {
-      struct vki_media_entity_desc *data = (struct vki_media_entity_desc *)ARG3;
+      struct vki_media_entity_desc *data =
+         (struct vki_media_entity_desc *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data->name, sizeof(*data) - sizeof(data->id));
       break;
    }
@@ -10953,7 +11243,7 @@ POST(sys_ioctl)
 
    /* Serial */
    case VKI_TIOCGSERIAL: {
-      struct vki_serial_struct *data = (struct vki_serial_struct *)ARG3;
+      struct vki_serial_struct *data = (struct vki_serial_struct *)(Addr)ARG3;
       POST_MEM_WRITE((Addr)data, sizeof(*data));
       break;
    }
@@ -11239,7 +11529,8 @@ ML_(linux_POST_getregset) ( ThreadId tid, long arg3, long arg4 )
 
 PRE(sys_kcmp)
 {
-   PRINT("kcmp ( %ld, %ld, %ld, %lu, %lu )", SARG1, SARG2, SARG3, ARG4, ARG5);
+   PRINT("kcmp ( %ld, %ld, %ld, %" FMT_REGWORD "u, %" FMT_REGWORD "u )",
+         SARG1, SARG2, SARG3, ARG4, ARG5);
    switch (ARG3) {
       case VKI_KCMP_VM: case VKI_KCMP_FILES: case VKI_KCMP_FS:
       case VKI_KCMP_SIGHAND: case VKI_KCMP_IO: case VKI_KCMP_SYSVSEM:
index ad560dfdeeefa79961aac293c564ebad5b30bb03..250ea272ac6357f242f2b20d5ca82426d2681599 100644 (file)
@@ -2430,7 +2430,7 @@ void ML_(fixup_guest_state_to_restart_syscall) ( ThreadArchState* arch )
       syscall == 0C 00 00 00
    */
    {
-      UChar *p = (UChar *)(arch->vex.guest_PC);
+      UChar *p = (UChar *)(Addr)(arch->vex.guest_PC);
 #     if defined (VG_LITTLEENDIAN)
       if (p[0] != 0x0c || p[1] != 0x00 || p[2] != 0x00 || p[3] != 0x00)
          VG_(message)(Vg_DebugMsg,
index 4cdad7598469a37ec174b835a11740bef6f96b92..c644ecd711a000cf9f2e066280feeaa20e915584 100644 (file)
@@ -240,14 +240,16 @@ DECL_TEMPLATE (mips_linux, sys_fadvise64);
 
 PRE(sys_tee)
 {
-   PRINT("sys_tee ( %ld, %ld, %lu, %#lx )", SARG1, SARG2, ARG3, ARG4);
+   PRINT("sys_tee ( %ld, %ld, %" FMT_REGWORD "u, %#" FMT_REGWORD "x )",
+         SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(long, "sys_tee", int, fdin, int, fdout, vki_size_t, len,
                  int, flags);
 }
 
 PRE(sys_splice)
 {
-   PRINT("sys_splice ( %ld, %#lx, %ld, %#lx, %lu, %#lx )",
+   PRINT("sys_splice ( %ld, %#" FMT_REGWORD "x, %ld, %#" FMT_REGWORD
+         "x, %" FMT_REGWORD "u, %#" FMT_REGWORD "x )",
          SARG1, ARG2, SARG3, ARG4, ARG5, ARG6);
 
    PRE_REG_READ6(long, "sys_splice", int, fdin, vki_loff_t, sizein, int,
@@ -256,20 +258,21 @@ PRE(sys_splice)
 
 PRE(sys_vmsplice)
 {
-   PRINT("sys_vmsplice ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
+   PRINT("sys_vmsplice ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %ld )",
+         SARG1, ARG2, ARG3, SARG4);
    PRE_REG_READ4(long, "sys_vmsplice", int, fdin, struct vki_iovec *, v,
                  vki_size_t, len, int, flags);
 }
 
 PRE(sys_unshare)
 {
-   PRINT("sys_unshare ( %lu )", ARG1);
+   PRINT("sys_unshare ( %" FMT_REGWORD "u )", ARG1);
    PRE_REG_READ1(long, "sys_unshare", unsigned long, flags);
 }
 
 PRE(sys_sched_rr_get_interval)
 {
-   PRINT("sys_sched_rr_get_interval ( %ld, %#lx)", SARG1, ARG2);
+   PRINT("sys_sched_rr_get_interval ( %ld, %#" FMT_REGWORD "x)", SARG1, ARG2);
    PRE_REG_READ2(long, "sched_rr_get_interval", vki_pid_t, pid,
                  struct timespec *, timer);
    *flags |= SfMayBlock;
@@ -277,32 +280,34 @@ PRE(sys_sched_rr_get_interval)
 
 PRE(sys_ustat)
 {
-   PRINT("sys_ustat ( %#lx, %#lx)", ARG1, ARG2);
+   PRINT("sys_ustat ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x)", ARG1, ARG2);
    PRE_REG_READ2(long, "ustat", int, flags, const void *, path);
 }
 
 PRE(sys_swapon)
 {
-   PRINT("sys_swapon ( %#lx, %#lx )", ARG1, ARG2);
+   PRINT("sys_swapon ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", ARG1, ARG2);
    PRE_REG_READ2(long, "swapon", const void *, path, int, flags);
 }
 
 PRE(sys_swapoff)
 {
-   PRINT("sys_swapoff ( %#lx )", ARG1);
+   PRINT("sys_swapoff ( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(long, "swapoff", const void *, path);
 }
 
 PRE(sys_sysfs)
 {
-   PRINT("sys_sysfs ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+   PRINT("sys_sysfs ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+         SARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "sysfs", int, flags, int, desc, const void *, path);
 }
 
 /* Very much MIPS specific */
 PRE(sys_cacheflush)
 {
-   PRINT("cacheflush (%lx, %lx, %lx)", ARG1, ARG2, ARG3);
+   PRINT("cacheflush (%" FMT_REGWORD "x, %" FMT_REGWORD "x, %" FMT_REGWORD
+         "x)", ARG1, ARG2, ARG3);
    PRE_REG_READ3(long, "cacheflush", unsigned long, addr,
                  unsigned long, nbytes, unsigned int, cache);
    VG_ (discard_translations) ((Addr)ARG1, (ULong) ARG2,
@@ -312,7 +317,8 @@ PRE(sys_cacheflush)
 
 PRE(sys_reboot)
 {
-   PRINT("sys_reboot ( %ld, %ld, %lu, %#lx )", SARG1, ARG2, ARG3, ARG4);
+   PRINT("sys_reboot ( %ld, %" FMT_REGWORD "d, %" FMT_REGWORD "u, %#"
+         FMT_REGWORD "x )", SARG1, ARG2, ARG3, ARG4);
    // An approximation. ARG4 is only read conditionally by the kernel
    PRE_REG_READ4(int, "reboot",
                  int, magic1, int, magic2, unsigned int, cmd,
@@ -323,19 +329,20 @@ PRE(sys_reboot)
 
 PRE(sys_setdomainname)
 {
-   PRINT ("sys_setdomainname ( %#lx, %ld )", ARG1, SARG2);
+   PRINT ("sys_setdomainname ( %#" FMT_REGWORD "x, %ld )", ARG1, SARG2);
    PRE_REG_READ2 (long, "setdomainname", const void *, name, int, len);
 }
 
 PRE(sys_sethostname)
 {
-   PRINT ("sys_sethostname ( %#lx, %ld )", ARG1, SARG2);
+   PRINT ("sys_sethostname ( %#" FMT_REGWORD "x, %ld )", ARG1, SARG2);
    PRE_REG_READ2 (long, "sethostname", const void *, name, int, len);
 }
 
 PRE(sys_ptrace)
 {
-   PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", SARG1, SARG2, ARG3, ARG4);
+   PRINT("sys_ptrace ( %ld, %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
+         SARG1, SARG2, ARG3, ARG4);
    PRE_REG_READ4(int, "ptrace",
                  long, request, long, pid, unsigned long, addr,
                  unsigned long, data);
@@ -390,7 +397,8 @@ POST(sys_ptrace)
 PRE(sys_mmap)
 {
    SysRes r;
-   PRINT("sys_mmap ( %#lx, %lu, %ld, %ld, %ld, %lu )",
+   PRINT("sys_mmap ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %ld, %ld, %ld, %"
+         FMT_REGWORD "u )",
          ARG1, ARG2, SARG3, SARG4, SARG5, ARG6);
    PRE_REG_READ6(long, "mmap", unsigned long, start, vki_size_t, length,
                  int, prot, int, flags, int, fd, unsigned long, offset);
@@ -429,14 +437,14 @@ PRE(sys_rt_sigreturn)
 
 PRE(sys_set_thread_area)
 {
-   PRINT("set_thread_area (%lx)", ARG1);
+   PRINT("set_thread_area (%" FMT_REGWORD "x)", ARG1);
    PRE_REG_READ1(long, "set_thread_area", unsigned long, addr);
    SET_STATUS_from_SysRes(sys_set_tls(tid, ARG1));
 }
 
 PRE(sys_pipe)
 {
-   PRINT("sys_pipe ( %#lx )", ARG1);
+   PRINT("sys_pipe ( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(int, "pipe", int *, filedes);
    PRE_MEM_WRITE( "pipe(filedes)", ARG1, 2*sizeof(int) );
 }
@@ -514,7 +522,8 @@ POST(sys_prctl)
 
 PRE(sys_fadvise64)
 {
-   PRINT("sys_fadvise64 ( %ld, %ld, %lu, %ld )", SARG1, SARG2, ARG3, SARG4);
+   PRINT("sys_fadvise64 ( %ld, %ld, %" FMT_REGWORD "u, %ld )", SARG1, SARG2,
+         ARG3, SARG4);
    PRE_REG_READ4(long, "fadvise64",
                  int, fd, vki_loff_t, offset, vki_loff_t, len, int, advice);
 }
index cfa279d34a28beb34632031107db828f61f99999..3602a4663936073e3683a8f1db45a15e91f6d574 100644 (file)
@@ -1335,7 +1335,7 @@ Bool mk_preamble__set_NRADDR_to_zero ( void* closureV, IRSB* bb )
    Int nraddr_szB
       = sizeof(((VexGuestArchState*)0)->guest_NRADDR);
    vg_assert(nraddr_szB == 4 || nraddr_szB == 8);
-   vg_assert(nraddr_szB == VG_WORDSIZE);
+   vg_assert(nraddr_szB == sizeof(RegWord));
    addStmtToIRSB( 
       bb,
       IRStmt_Put( 
@@ -1394,7 +1394,7 @@ Bool mk_preamble__set_NRADDR_to_nraddr ( void* closureV, IRSB* bb )
    Int nraddr_szB
       = sizeof(((VexGuestArchState*)0)->guest_NRADDR);
    vg_assert(nraddr_szB == 4 || nraddr_szB == 8);
-   vg_assert(nraddr_szB == VG_WORDSIZE);
+   vg_assert(nraddr_szB == sizeof(RegWord));
    addStmtToIRSB( 
       bb,
       IRStmt_Put( 
index b62d8617bbad64bfed915e5b66084f79a4313933..b6238b6e6231ea64f81844e6385067e85ff6478a 100644 (file)
@@ -47,9 +47,9 @@
 // happen with the 6th arg on AMD64 which is passed on the stack.
 
 extern SysRes VG_(do_syscall) ( UWord sysno, 
-                                UWord, UWord, UWord, 
-                                UWord, UWord, UWord, 
-                                UWord, UWord );
+                                RegWord, RegWord, RegWord,
+                                RegWord, RegWord, RegWord,
+                                RegWord, RegWord );
 
 /* Macros make life easier. */