[Precord RFA/RFC] Add process record Linux system call 64 bits support

Hui Zhu teawater@gmail.com
Sat Jun 20 08:04:00 GMT 2009


Hi everyone,

The linux-record has a lot of 32 bits special code (uint32_t and so
on). Then it can't support other bits.
I make a patch to remove all of them (Change them to ULONGEST and
extract_unsigned_integer) and make it support other bits better.

2009-06-19  Hui Zhu  <teawater@gmail.com>

	Add process record Linux system call 64 bits support.

        * linux-record.h (linux_record_tdep): Add size_pointer,
        size_size_t, size_iovec.
	* i386-linux-tdep.c (i386_linux_init_abi): Ditto.
        * linux-record.c (record_linux_system_call): Make this
        function support 64 bits.

Please help me review it.

And I had post amd64 insn prec support in
http://sourceware.org/ml/gdb-patches/2009-06/msg00293.html
Please help me review it too.

Thanks,
Hui
-------------- next part --------------
---
 i386-linux-tdep.c |    3 
 linux-record.c    | 1387 +++++++++++++++++++++++++++++-------------------------
 linux-record.h    |    4 
 3 files changed, 774 insertions(+), 620 deletions(-)

--- a/i386-linux-tdep.c
+++ b/i386-linux-tdep.c
@@ -479,6 +479,7 @@ i386_linux_init_abi (struct gdbarch_info
   /* Initialize the i386_linux_record_tdep.  */
   /* These values are the size of the type that will be used in a system
      call.  They are obtained from Linux Kernel source.  */
+  i386_linux_record_tdep.size_pointer = 4;
   i386_linux_record_tdep.size__old_kernel_stat = 32;
   i386_linux_record_tdep.size_tms = 16;
   i386_linux_record_tdep.size_loff_t = 8;
@@ -544,6 +545,8 @@ i386_linux_init_abi (struct gdbarch_info
   i386_linux_record_tdep.size_serial_struct = 60;
   i386_linux_record_tdep.size_serial_icounter_struct = 80;
   i386_linux_record_tdep.size_hayes_esp_config = 12;
+  i386_linux_record_tdep.size_size_t = 4;
+  i386_linux_record_tdep.size_iovec = 8;
 
   /* These values are the second argument of system call "sys_ioctl".
      They are obtained from Linux Kernel source.  */
--- a/linux-record.c
+++ b/linux-record.c
@@ -19,6 +19,7 @@
 
 #include "defs.h"
 #include "target.h"
+#include "gdbtypes.h"
 #include "regcache.h"
 #include "record.h"
 #include "linux-record.h"
@@ -92,11 +93,14 @@
 
    Return -1 if something wrong.  */
 
+#define OUTPUT_REG(val, num)      phex_nz ((val), \
+    TYPE_LENGTH (gdbarch_register_type (get_regcache_arch (regcache), (num))))
+
 int
 record_linux_system_call (int num, struct regcache *regcache,
 			  struct linux_record_tdep *tdep)
 {
-  uint32_t tmpu32;
+  ULONGEST tmpulongest;
 
   switch (num)
     {
@@ -126,10 +130,10 @@ record_linux_system_call (int num, struc
       /* sys_read */
     case 3:
       {
-	uint32_t addr, count;
-	regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr);
-	regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
-	if (record_arch_list_add_mem (addr, count))
+	ULONGEST addr, count;
+	regcache_raw_read_unsigned (regcache, tdep->arg2, &addr);
+	regcache_raw_read_unsigned (regcache, tdep->arg3, &count);
+	if (record_arch_list_add_mem ((CORE_ADDR)addr, (int)count))
 	  return -1;
       }
       break;
@@ -170,8 +174,9 @@ record_linux_system_call (int num, struc
     case 28:
       /* sys_lstat */
     case 84:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size__old_kernel_stat))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size__old_kernel_stat))
 	return -1;
       break;
 
@@ -193,14 +198,14 @@ record_linux_system_call (int num, struc
 
       /* sys_ptrace */
     case 26:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (tmpu32 == RECORD_PTRACE_PEEKTEXT
-	  || tmpu32 == RECORD_PTRACE_PEEKDATA
-	  || tmpu32 == RECORD_PTRACE_PEEKUSR)
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (tmpulongest == RECORD_PTRACE_PEEKTEXT
+	  || tmpulongest == RECORD_PTRACE_PEEKDATA
+	  || tmpulongest == RECORD_PTRACE_PEEKUSR)
 	{
-	  regcache_raw_read (regcache, tdep->arg4,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, 4))
+	  regcache_raw_read_unsigned (regcache, tdep->arg4,
+			              &tmpulongest);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 4))
 	    return -1;
 	}
       break;
@@ -239,8 +244,8 @@ record_linux_system_call (int num, struc
 
       /* sys_times */
     case 43:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_tms))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_tms))
 	return -1;
       break;
 
@@ -269,123 +274,145 @@ record_linux_system_call (int num, struc
       /* sys_ioctl */
     case 54:
       /* XXX Need to add a lot of support of other ioctl requests.  */
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (tmpu32 == tdep->ioctl_FIOCLEX || tmpu32 == tdep->ioctl_FIONCLEX
-	  || tmpu32 == tdep->ioctl_FIONBIO || tmpu32 == tdep->ioctl_FIOASYNC
-	  || tmpu32 == tdep->ioctl_TCSETS || tmpu32 == tdep->ioctl_TCSETSW
-	  || tmpu32 == tdep->ioctl_TCSETSF || tmpu32 == tdep->ioctl_TCSETA
-	  || tmpu32 == tdep->ioctl_TCSETAW || tmpu32 == tdep->ioctl_TCSETAF
-	  || tmpu32 == tdep->ioctl_TCSBRK || tmpu32 == tdep->ioctl_TCXONC
-	  || tmpu32 == tdep->ioctl_TCFLSH || tmpu32 == tdep->ioctl_TIOCEXCL
-	  || tmpu32 == tdep->ioctl_TIOCNXCL
-	  || tmpu32 == tdep->ioctl_TIOCSCTTY
-	  || tmpu32 == tdep->ioctl_TIOCSPGRP || tmpu32 == tdep->ioctl_TIOCSTI
-	  || tmpu32 == tdep->ioctl_TIOCSWINSZ
-	  || tmpu32 == tdep->ioctl_TIOCMBIS || tmpu32 == tdep->ioctl_TIOCMBIC
-	  || tmpu32 == tdep->ioctl_TIOCMSET
-	  || tmpu32 == tdep->ioctl_TIOCSSOFTCAR
-	  || tmpu32 == tdep->ioctl_TIOCCONS
-	  || tmpu32 == tdep->ioctl_TIOCSSERIAL
-	  || tmpu32 == tdep->ioctl_TIOCPKT || tmpu32 == tdep->ioctl_TIOCNOTTY
-	  || tmpu32 == tdep->ioctl_TIOCSETD || tmpu32 == tdep->ioctl_TCSBRKP
-	  || tmpu32 == tdep->ioctl_TIOCTTYGSTRUCT
-	  || tmpu32 == tdep->ioctl_TIOCSBRK || tmpu32 == tdep->ioctl_TIOCCBRK
-	  || tmpu32 == tdep->ioctl_TCSETS2 || tmpu32 == tdep->ioctl_TCSETSW2
-	  || tmpu32 == tdep->ioctl_TCSETSF2
-	  || tmpu32 == tdep->ioctl_TIOCSPTLCK
-	  || tmpu32 == tdep->ioctl_TIOCSERCONFIG
-	  || tmpu32 == tdep->ioctl_TIOCSERGWILD
-	  || tmpu32 == tdep->ioctl_TIOCSERSWILD
-	  || tmpu32 == tdep->ioctl_TIOCSLCKTRMIOS
-	  || tmpu32 == tdep->ioctl_TIOCSERGETMULTI
-	  || tmpu32 == tdep->ioctl_TIOCSERSETMULTI
-	  || tmpu32 == tdep->ioctl_TIOCMIWAIT
-	  || tmpu32 == tdep->ioctl_TIOCSHAYESESP)
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (tmpulongest == tdep->ioctl_FIOCLEX
+          || tmpulongest == tdep->ioctl_FIONCLEX
+	  || tmpulongest == tdep->ioctl_FIONBIO
+          || tmpulongest == tdep->ioctl_FIOASYNC
+	  || tmpulongest == tdep->ioctl_TCSETS
+          || tmpulongest == tdep->ioctl_TCSETSW
+	  || tmpulongest == tdep->ioctl_TCSETSF
+          || tmpulongest == tdep->ioctl_TCSETA
+	  || tmpulongest == tdep->ioctl_TCSETAW
+          || tmpulongest == tdep->ioctl_TCSETAF
+	  || tmpulongest == tdep->ioctl_TCSBRK
+          || tmpulongest == tdep->ioctl_TCXONC
+	  || tmpulongest == tdep->ioctl_TCFLSH
+          || tmpulongest == tdep->ioctl_TIOCEXCL
+	  || tmpulongest == tdep->ioctl_TIOCNXCL
+	  || tmpulongest == tdep->ioctl_TIOCSCTTY
+	  || tmpulongest == tdep->ioctl_TIOCSPGRP
+          || tmpulongest == tdep->ioctl_TIOCSTI
+	  || tmpulongest == tdep->ioctl_TIOCSWINSZ
+	  || tmpulongest == tdep->ioctl_TIOCMBIS
+          || tmpulongest == tdep->ioctl_TIOCMBIC
+	  || tmpulongest == tdep->ioctl_TIOCMSET
+	  || tmpulongest == tdep->ioctl_TIOCSSOFTCAR
+	  || tmpulongest == tdep->ioctl_TIOCCONS
+	  || tmpulongest == tdep->ioctl_TIOCSSERIAL
+	  || tmpulongest == tdep->ioctl_TIOCPKT
+          || tmpulongest == tdep->ioctl_TIOCNOTTY
+	  || tmpulongest == tdep->ioctl_TIOCSETD
+          || tmpulongest == tdep->ioctl_TCSBRKP
+	  || tmpulongest == tdep->ioctl_TIOCTTYGSTRUCT
+	  || tmpulongest == tdep->ioctl_TIOCSBRK
+          || tmpulongest == tdep->ioctl_TIOCCBRK
+	  || tmpulongest == tdep->ioctl_TCSETS2
+          || tmpulongest == tdep->ioctl_TCSETSW2
+	  || tmpulongest == tdep->ioctl_TCSETSF2
+	  || tmpulongest == tdep->ioctl_TIOCSPTLCK
+	  || tmpulongest == tdep->ioctl_TIOCSERCONFIG
+	  || tmpulongest == tdep->ioctl_TIOCSERGWILD
+	  || tmpulongest == tdep->ioctl_TIOCSERSWILD
+	  || tmpulongest == tdep->ioctl_TIOCSLCKTRMIOS
+	  || tmpulongest == tdep->ioctl_TIOCSERGETMULTI
+	  || tmpulongest == tdep->ioctl_TIOCSERSETMULTI
+	  || tmpulongest == tdep->ioctl_TIOCMIWAIT
+	  || tmpulongest == tdep->ioctl_TIOCSHAYESESP)
 	{
 	  /* Nothing to do.  */
 	}
-      else if (tmpu32 == tdep->ioctl_TCGETS || tmpu32 == tdep->ioctl_TCGETA
-	       || tmpu32 == tdep->ioctl_TIOCGLCKTRMIOS)
+      else if (tmpulongest == tdep->ioctl_TCGETS
+               || tmpulongest == tdep->ioctl_TCGETA
+	       || tmpulongest == tdep->ioctl_TIOCGLCKTRMIOS)
 	{
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_termios))
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_termios))
 	    return -1;
 	}
-      else if (tmpu32 == tdep->ioctl_TIOCGPGRP
-	       || tmpu32 == tdep->ioctl_TIOCGSID)
+      else if (tmpulongest == tdep->ioctl_TIOCGPGRP
+	       || tmpulongest == tdep->ioctl_TIOCGSID)
 	{
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t))
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_pid_t))
 	    return -1;
 	}
-      else if (tmpu32 == tdep->ioctl_TIOCOUTQ
-	       || tmpu32 == tdep->ioctl_TIOCMGET
-	       || tmpu32 == tdep->ioctl_TIOCGSOFTCAR
-	       || tmpu32 == tdep->ioctl_FIONREAD
-	       || tmpu32 == tdep->ioctl_TIOCINQ
-	       || tmpu32 == tdep->ioctl_TIOCGETD
-	       || tmpu32 == tdep->ioctl_TIOCGPTN
-	       || tmpu32 == tdep->ioctl_TIOCSERGETLSR)
+      else if (tmpulongest == tdep->ioctl_TIOCOUTQ
+	       || tmpulongest == tdep->ioctl_TIOCMGET
+	       || tmpulongest == tdep->ioctl_TIOCGSOFTCAR
+	       || tmpulongest == tdep->ioctl_FIONREAD
+	       || tmpulongest == tdep->ioctl_TIOCINQ
+	       || tmpulongest == tdep->ioctl_TIOCGETD
+	       || tmpulongest == tdep->ioctl_TIOCGPTN
+	       || tmpulongest == tdep->ioctl_TIOCSERGETLSR)
 	{
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_int))
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_int))
 	    return -1;
 	}
-      else if (tmpu32 == tdep->ioctl_TIOCGWINSZ)
+      else if (tmpulongest == tdep->ioctl_TIOCGWINSZ)
 	{
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_winsize))
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_winsize))
 	    return -1;
 	}
-      else if (tmpu32 == tdep->ioctl_TIOCLINUX)
+      else if (tmpulongest == tdep->ioctl_TIOCLINUX)
 	{
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
           /* This syscall affect a char size memory.  */
-	  if (record_arch_list_add_mem (tmpu32, 1))
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 1))
 	    return -1;
 	}
-      else if (tmpu32 == tdep->ioctl_TIOCGSERIAL)
+      else if (tmpulongest == tdep->ioctl_TIOCGSERIAL)
 	{
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct))
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_serial_struct))
 	    return -1;
 	}
-      else if (tmpu32 == tdep->ioctl_TCGETS2)
+      else if (tmpulongest == tdep->ioctl_TCGETS2)
 	{
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_termios2))
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_termios2))
 	    return -1;
 	}
-      else if (tmpu32 == tdep->ioctl_FIOQSIZE)
+      else if (tmpulongest == tdep->ioctl_FIOQSIZE)
 	{
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t))
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_loff_t))
 	    return -1;
 	}
-      else if (tmpu32 == tdep->ioctl_TIOCGICOUNT)
+      else if (tmpulongest == tdep->ioctl_TIOCGICOUNT)
 	{
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem
-	      (tmpu32, tdep->size_serial_icounter_struct))
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_serial_icounter_struct))
 	    return -1;
 	}
-      else if (tmpu32 == tdep->ioctl_TIOCGHAYESESP)
+      else if (tmpulongest == tdep->ioctl_TIOCGHAYESESP)
 	{
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config))
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
+          if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_hayes_esp_config))
 	    return -1;
 	}
-      else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT)
+      else if (tmpulongest == tdep->ioctl_TIOCSERGSTRUCT)
 	{
 	  printf_unfiltered (_("Process record and replay target doesn't "
 			       "support ioctl request TIOCSERGSTRUCT\n"));
@@ -393,9 +420,9 @@ record_linux_system_call (int num, struc
 	}
       else
 	{
-	  printf_unfiltered (_("Process record and replay target doesn't "
-			       "support ioctl request 0x%s.\n"),
-			     phex_nz (tmpu32, 4));
+          printf_unfiltered (_("Process record and replay target doesn't "
+                               "support ioctl request 0x%s.\n"),
+                             OUTPUT_REG (tmpulongest, tdep->arg2));
 	  return 1;
 	}
       break;
@@ -403,13 +430,14 @@ record_linux_system_call (int num, struc
       /* sys_fcntl */
     case 55:
       /* XXX */
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
     sys_fcntl:
-      if (tmpu32 == tdep->fcntl_F_GETLK)
+      if (tmpulongest == tdep->fcntl_F_GETLK)
 	{
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_flock))
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
+          if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_flock))
 	    return -1;
 	}
       break;
@@ -424,8 +452,9 @@ record_linux_system_call (int num, struc
 
       /* sys_olduname */
     case 59:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_oldold_utsname))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_oldold_utsname))
 	return -1;
       break;
 
@@ -437,8 +466,9 @@ record_linux_system_call (int num, struc
 
       /* sys_ustat */
     case 62:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_ustat))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_ustat))
 	return -1;
       break;
 
@@ -454,8 +484,9 @@ record_linux_system_call (int num, struc
 
       /* sys_sigaction */
     case 67:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigaction))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_old_sigaction))
 	return -1;
       break;
 
@@ -473,8 +504,9 @@ record_linux_system_call (int num, struc
 
       /* sys_sigpending */
     case 73:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_old_sigset_t))
 	return -1;
       break;
 
@@ -486,25 +518,29 @@ record_linux_system_call (int num, struc
 
       /* sys_old_getrlimit */
     case 76:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_rlimit))
 	return -1;
       break;
 
       /* sys_getrusage */
     case 77:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_rusage))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_rusage))
 	return -1;
       break;
 
       /* sys_gettimeofday */
     case 78:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_timeval))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_timeval))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_timezone))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_timezone))
 	return -1;
       break;
 
@@ -514,15 +550,17 @@ record_linux_system_call (int num, struc
 
       /* sys_getgroups16 */
     case 80:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_old_gid_t))
 	return -1;
       break;
 
       /* sys_setgroups16 */
     case 81:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_old_gid_t))
 	return -1;
       break;
 
@@ -538,17 +576,18 @@ record_linux_system_call (int num, struc
 	  CORE_ADDR tvp;
 	} sel;
 
-	regcache_raw_read (regcache, tdep->arg1,
-			   (gdb_byte *) & tmpu32);
-	if (tmpu32)
+	regcache_raw_read_unsigned (regcache, tdep->arg1,
+			            &tmpulongest);
+	if (tmpulongest)
 	  {
-	    if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel)))
+	    if (target_read_memory (tmpulongest, (gdb_byte *)&sel,
+                                    sizeof(sel)))
 	      {
 		if (record_debug)
 		  fprintf_unfiltered (gdb_stdlog,
 				      "Process record: error reading memory "
 				      "at addr = 0x%s len = %lu.\n",
-				      paddr_nz (tmpu32),
+				      OUTPUT_REG (tmpulongest, tdep->arg1),
 				      (unsigned long)sizeof (sel));
 		return -1;
 	      }
@@ -571,11 +610,11 @@ record_linux_system_call (int num, struc
       /* sys_readlink */
     case 85:
       {
-	uint32_t len;
-	regcache_raw_read (regcache, tdep->arg2,
-			   (gdb_byte *) & tmpu32);
-	regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len);
-	if (record_arch_list_add_mem (tmpu32, len))
+	ULONGEST len;
+	regcache_raw_read_unsigned (regcache, tdep->arg2,
+			            &tmpulongest);
+	regcache_raw_read_unsigned (regcache, tdep->arg3, &len);
+        if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)len))
 	  return -1;
       }
       break;
@@ -603,8 +642,9 @@ record_linux_system_call (int num, struc
 
       /* old_readdir */
     case 89:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_dirent))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_dirent))
 	return -1;
       break;
 
@@ -616,18 +656,18 @@ record_linux_system_call (int num, struc
     case 91:
       {
 	int q;
-	uint32_t len;
+	ULONGEST len;
 
-	regcache_raw_read (regcache, tdep->arg1,
-			   (gdb_byte *) & tmpu32);
-	regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len);
+	regcache_raw_read_unsigned (regcache, tdep->arg1,
+			            &tmpulongest);
+	regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
 	target_terminal_ours ();
 	q =
 	  yquery (_("The next instruction is syscall munmap.  "
 		    "It will free the memory addr = 0x%s len = %u.  "
 		    "It will make record target get error.  "
 		    "Do you want to stop the program?"),
-		  paddr_nz (tmpu32), (int)len);
+		  OUTPUT_REG (tmpulongest, tdep->arg1), (int)len);
 	target_terminal_inferior ();
 	if (q)
 	  return 1;
@@ -654,8 +694,9 @@ record_linux_system_call (int num, struc
     case 99:
       /* sys_fstatfs */
     case 100:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_statfs))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_statfs))
 	return -1;
       break;
 
@@ -665,8 +706,8 @@ record_linux_system_call (int num, struc
 
       /* sys_socketcall */
     case 102:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      switch (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      switch (tmpulongest)
 	{
 	case RECORD_SYS_SOCKET:
 	case RECORD_SYS_BIND:
@@ -677,24 +718,31 @@ record_linux_system_call (int num, struc
 	case RECORD_SYS_GETSOCKNAME:
 	case RECORD_SYS_GETPEERNAME:
 	  {
-	    uint32_t a[3];
-	    regcache_raw_read (regcache, tdep->arg2,
-			       (gdb_byte *) & tmpu32);
-	    if (tmpu32)
+	    gdb_byte *a = alloca (tdep->size_ulong * 2);
+	    regcache_raw_read_unsigned (regcache, tdep->arg2,
+			                &tmpulongest);
+	    if (tmpulongest)
 	      {
-		if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
+                tmpulongest += tdep->size_ulong;
+		if (target_read_memory ((CORE_ADDR)tmpulongest, a,
+                                        tdep->size_ulong * 2))
 		  {
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %lu.\n",
-					  paddr_nz (tmpu32),
-					  (unsigned long)sizeof (a));
+					  "memory at addr = 0x%s len = %d.\n",
+					  OUTPUT_REG (tmpulongest, tdep->arg2),
+					  tdep->size_ulong * 2);
 		    return -1;
 		  }
-		if (record_arch_list_add_mem (a[1], tdep->size_sockaddr))
+		if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+                                                           (a, tdep->size_ulong),
+                                              tdep->size_sockaddr))
 		  return -1;
-		if (record_arch_list_add_mem (a[2], tdep->size_int))
+                a += tdep->size_ulong;
+		if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+                                                           (a, tdep->size_ulong),
+                                              tdep->size_int))
 		  return -1;
 	      }
 	  }
@@ -702,22 +750,26 @@ record_linux_system_call (int num, struc
 
 	case RECORD_SYS_SOCKETPAIR:
 	  {
-	    uint32_t a[4];
-	    regcache_raw_read (regcache, tdep->arg2,
-			       (gdb_byte *) & tmpu32);
-	    if (tmpu32)
+	    gdb_byte *a = alloca (tdep->size_ulong);
+	    regcache_raw_read_unsigned (regcache, tdep->arg2,
+			                &tmpulongest);
+	    if (tmpulongest)
 	      {
-		if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
+                tmpulongest += tdep->size_ulong * 3;
+		if (target_read_memory ((CORE_ADDR)tmpulongest, a,
+                                        tdep->size_ulong))
 		  {
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %lu.\n",
-					  paddr_nz (tmpu32),
-				          (unsigned long)sizeof (a));
+					  "memory at addr = 0x%s len = %d.\n",
+					  OUTPUT_REG (tmpulongest, tdep->arg2),
+				          tdep->size_ulong);
 		    return -1;
 		  }
-		if (record_arch_list_add_mem (a[3], tdep->size_int))
+		if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+                                                           (a, tdep->size_ulong),
+                                              tdep->size_int))
 		  return -1;
 	      }
 	  }
@@ -727,36 +779,44 @@ record_linux_system_call (int num, struc
 	  break;
 	case RECORD_SYS_RECV:
 	  {
-	    uint32_t a[3];
-	    regcache_raw_read (regcache, tdep->arg2,
-			       (gdb_byte *) & tmpu32);
-	    if (tmpu32)
+	    gdb_byte *a = alloca (tdep->size_ulong * 2);
+	    regcache_raw_read_unsigned (regcache, tdep->arg2,
+			                &tmpulongest);
+	    if (tmpulongest)
 	      {
-		if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
+                tmpulongest += tdep->size_ulong * 2;
+		if (target_read_memory ((CORE_ADDR)tmpulongest, a,
+                                        tdep->size_ulong))
 		  {
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %lu.\n",
-					  paddr_nz (tmpu32),
-					  (unsigned long)sizeof (a));
+					  "memory at addr = 0x%s len = %d.\n",
+					  OUTPUT_REG (tmpulongest, tdep->arg2),
+					  tdep->size_ulong);
 		    return -1;
 		  }
-		if (a[2])
+                tmpulongest = extract_unsigned_integer (a, tdep->size_ulong);
+		if (tmpulongest)
 		  {
-		    if (target_read_memory
-			(a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
+		    if (target_read_memory ((CORE_ADDR)tmpulongest,
+                                            a, tdep->size_ulong * 2))
 		      {
 			if (record_debug)
 			  fprintf_unfiltered (gdb_stdlog,
 					      "Process record: error reading "
 					      "memory at addr = 0x%s "
-					      "len = %lu.\n",
-					      paddr_nz (a[2]),
-					      (unsigned long)sizeof (a[2]));
+					      "len = %d.\n",
+					      phex_nz (tmpulongest,
+                                                       tdep->size_ulong),
+					      tdep->size_ulong * 2);
 			return -1;
 		      }
-		    if (record_arch_list_add_mem (a[1], a[2]))
+		    if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+                                                               (a, tdep->size_ulong),
+                                                  (int)extract_unsigned_integer
+                                                               (a + tdep->size_ulong,
+                                                                tdep->size_ulong)))
 		      return -1;
 		  }
 	      }
@@ -764,40 +824,56 @@ record_linux_system_call (int num, struc
 	  break;
 	case RECORD_SYS_RECVFROM:
 	  {
-	    uint32_t a[6];
-	    regcache_raw_read (regcache, tdep->arg2,
-			       (gdb_byte *) & tmpu32);
-	    if (tmpu32)
+            gdb_byte *a = alloca (tdep->size_ulong * 5);
+	    regcache_raw_read_unsigned (regcache, tdep->arg2,
+			                &tmpulongest);
+	    if (tmpulongest)
 	      {
-		if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
+                tmpulongest += tdep->size_ulong;
+		if (target_read_memory ((CORE_ADDR)tmpulongest, a,
+                    tdep->size_ulong * 5))
 		  {
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %lu.\n",
-					  paddr_nz (tmpu32),
-					  (unsigned long)sizeof (a));
+					  "memory at addr = 0x%s len = %d.\n",
+					  OUTPUT_REG (tmpulongest, tdep->arg2),
+					  tdep->size_ulong * 5);
 		    return -1;
 		  }
-		if (a[2])
+                tmpulongest = extract_unsigned_integer (a + tdep->size_ulong,
+                                                  tdep->size_ulong);
+		if (tmpulongest)
 		  {
-		    if (target_read_memory
-			(a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
+		    if (target_read_memory ((CORE_ADDR)tmpulongest,
+                                            a + tdep->size_ulong,
+                                            tdep->size_ulong))
 		      {
 			if (record_debug)
 			  fprintf_unfiltered (gdb_stdlog,
 					      "Process record: error reading "
 					      "memory at addr = 0x%s "
-					      "len = %lu.\n",
-					      paddr_nz (a[2]),
-					      (unsigned long)sizeof (a[2]));
+					      "len = %d.\n",
+					      phex_nz (tmpulongest,
+                                                       tdep->size_ulong),
+					      tdep->size_ulong);
 			return -1;
 		      }
-		    if (record_arch_list_add_mem (a[1], a[2]))
+		    if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+                                                               (a, tdep->size_ulong),
+                                                  (int)extract_unsigned_integer
+                                                               (a + tdep->size_ulong,
+                                                                tdep->size_ulong)))
 		      return -1;
-		    if (record_arch_list_add_mem (a[4], tdep->size_sockaddr))
+                    a += tdep->size_ulong * 3;
+		    if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+                                                               (a, tdep->size_ulong),
+                                                  tdep->size_sockaddr))
 		      return -1;
-		    if (record_arch_list_add_mem (a[5], tdep->size_int))
+                    a += tdep->size_ulong;
+		    if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+                                                               (a, tdep->size_ulong),
+                                                  tdep->size_int))
 		      return -1;
 		  }
 	      }
@@ -808,40 +884,50 @@ record_linux_system_call (int num, struc
 	  break;
 	case RECORD_SYS_GETSOCKOPT:
 	  {
-	    uint32_t a[5];
-	    uint32_t av;
+            gdb_byte *a = alloca (tdep->size_ulong * 2);
+            gdb_byte *av = alloca (tdep->size_ulong);
 
-	    regcache_raw_read (regcache, tdep->arg2,
-			       (gdb_byte *) & tmpu32);
-	    if (tmpu32)
+	    regcache_raw_read_unsigned (regcache, tdep->arg2,
+			                &tmpulongest);
+	    if (tmpulongest)
 	      {
-		if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
+                tmpulongest += tdep->size_ulong * 3;
+		if (target_read_memory ((CORE_ADDR)tmpulongest, a, tdep->size_ulong * 2))
 		  {
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %lu.\n",
-					  paddr_nz (tmpu32),
-					  (unsigned long)sizeof (a));
+					  "memory at addr = 0x%s len = %d.\n",
+					  OUTPUT_REG (tmpulongest, tdep->arg2),
+					  tdep->size_ulong * 2);
 		    return -1;
 		  }
-		if (a[4])
+                tmpulongest = extract_unsigned_integer (a + tdep->size_ulong,
+                                                  tdep->size_ulong);
+		if (tmpulongest)
 		  {
-		    if (target_read_memory
-			(a[4], (gdb_byte *) & av, sizeof (av)))
+		    if (target_read_memory ((CORE_ADDR)tmpulongest, av,
+                                            tdep->size_ulong))
 		      {
 			if (record_debug)
 			  fprintf_unfiltered (gdb_stdlog,
 					      "Process record: error reading "
 					      "memory at addr = 0x%s "
-					      "len = %lu.\n",
-					      paddr_nz (a[4]),
-					      (unsigned long)sizeof (av));
+					      "len = %d.\n",
+					      phex_nz (tmpulongest,
+                                                       tdep->size_ulong),
+					      tdep->size_ulong);
 			return -1;
 		      }
-		    if (record_arch_list_add_mem (a[3], av))
+		    if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+                                                               (a, tdep->size_ulong),
+                                                  (int)extract_unsigned_integer
+                                                               (av, tdep->size_ulong)))
 		      return -1;
-		    if (record_arch_list_add_mem (a[4], tdep->size_int))
+                    a += tdep->size_ulong;
+		    if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+                                                               (a, tdep->size_ulong),
+                                                  tdep->size_int))
 		      return -1;
 		  }
 	      }
@@ -851,84 +937,96 @@ record_linux_system_call (int num, struc
 	  break;
 	case RECORD_SYS_RECVMSG:
 	  {
-	    uint32_t a[2], i;
-	    struct record_msghdr
-	    {
-	      uint32_t msg_name;
-	      uint32_t msg_namelen;
-	      uint32_t msg_iov;
-	      uint32_t msg_iovlen;
-	      uint32_t msg_control;
-	      uint32_t msg_controllen;
-	      uint32_t msg_flags;
-	    } rec;
-	    struct record_iovec
-	    {
-	      uint32_t iov_base;
-	      uint32_t iov_len;
-	    } iov;
+            gdb_byte *a = alloca (tdep->size_ulong);
 
-	    regcache_raw_read (regcache, tdep->arg2,
-			       (gdb_byte *) & tmpu32);
-	    if (tmpu32)
+	    regcache_raw_read_unsigned (regcache, tdep->arg2,
+			                &tmpulongest);
+	    if (tmpulongest)
 	      {
-		if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
+                tmpulongest += tdep->size_ulong;
+		if (target_read_memory ((CORE_ADDR)tmpulongest, a,
+                    tdep->size_ulong))
 		  {
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %lu.\n",
-					  paddr_nz (tmpu32),
-					  (unsigned long)sizeof (a));
+					  "memory at addr = 0x%s len = %d.\n",
+					  OUTPUT_REG (tmpulongest, tdep->arg2),
+					  tdep->size_ulong);
 		    return -1;
 		  }
-		if (record_arch_list_add_mem (a[1], tdep->size_msghdr))
-		  return -1;
-		if (a[1])
+                tmpulongest = extract_unsigned_integer (a, tdep->size_ulong);
+		if (tmpulongest)
 		  {
-		    if (target_read_memory
-			(a[1], (gdb_byte *) & rec, sizeof (rec)))
+		    if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                                  tdep->size_msghdr))
+		      return -1;
+                    a = alloca (tdep->size_msghdr);
+		    if (target_read_memory ((CORE_ADDR)tmpulongest, a,
+                                            tdep->size_msghdr))
 		      {
 			if (record_debug)
 			  fprintf_unfiltered (gdb_stdlog,
 					      "Process record: error reading "
 					      "memory at addr = 0x%s "
-					      "len = %lu.\n",
-					      paddr_nz (a[1]),
-					      (unsigned long)sizeof (rec));
+					      "len = %d.\n",
+					      phex_nz (tmpulongest,
+                                                       tdep->size_ulong),
+					      tdep->size_msghdr);
 			return -1;
 		      }
-		    if (record_arch_list_add_mem
-			(rec.msg_name, rec.msg_namelen))
-		      return -1;
-		    if (record_arch_list_add_mem
-			(rec.msg_control, rec.msg_controllen))
+                    /* msg_name msg_namelen */
+		    tmpulongest = extract_unsigned_integer (a, tdep->size_pointer);
+                    a += tdep->size_pointer;
+                    if (record_arch_list_add_mem
+                          ((CORE_ADDR)tmpulongest,
+                           (int)extract_unsigned_integer (a, tdep->size_int)))
 		      return -1;
-		    if (rec.msg_iov)
+                    a += tdep->size_int;
+		    /* msg_iov msg_iovlen */
+		    tmpulongest = extract_unsigned_integer (a, tdep->size_pointer);
+                    a += tdep->size_pointer;
+                    if (tmpulongest)
 		      {
-			for (i = 0; i < rec.msg_iovlen; i++)
+                        ULONGEST i;
+                        ULONGEST len = extract_unsigned_integer
+                                         (a, tdep->size_size_t);
+                        gdb_byte *iov = alloca (tdep->size_iovec);
+
+			for (i = 0; i < len; i++)
 			  {
-			    if (target_read_memory
-				(rec.msg_iov, (gdb_byte *) & iov,
-				 sizeof (iov)))
+			    if (target_read_memory ((CORE_ADDR)tmpulongest,
+                                                    iov, tdep->size_iovec))
 			      {
 				if (record_debug)
 				  fprintf_unfiltered (gdb_stdlog,
 						      "Process record: error "
 						      "reading memory at "
 						      "addr = 0x%s "
-						      "len = %lu.\n",
-						      paddr_nz (rec.
-								msg_iov),
-						      (unsigned long)sizeof (iov));
+						      "len = %d.\n",
+						      phex_nz (tmpulongest,
+								tdep->size_pointer),
+						      tdep->size_iovec);
 				return -1;
 			      }
-			    if (record_arch_list_add_mem
-				(iov.iov_base, iov.iov_len))
+		            if (record_arch_list_add_mem
+                                  ((CORE_ADDR)extract_unsigned_integer
+                                                (iov, tdep->size_pointer),
+                                   (int)extract_unsigned_integer
+                                          (iov + tdep->size_pointer,
+                                           tdep->size_size_t)))
 			      return -1;
-			    rec.msg_iov += sizeof (struct record_iovec);
+			    tmpulongest += tdep->size_iovec;
 			  }
 		      }
+                    a += tdep->size_size_t;
+                    /* msg_control msg_controllen */
+                    tmpulongest = extract_unsigned_integer (a, tdep->size_pointer);
+                    a += tdep->size_pointer;
+		    if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                                  (int)extract_unsigned_integer
+                                                         (a, tdep->size_size_t)))
+		      return -1;
 		  }
 	      }
 	  }
@@ -936,7 +1034,7 @@ record_linux_system_call (int num, struc
 	default:
 	  printf_unfiltered (_("Process record and replay target "
 			       "doesn't support socketcall call 0x%s\n"),
-			     phex_nz (tmpu32, 4));
+			     OUTPUT_REG (tmpulongest, tdep->arg1));
 	  return -1;
 	  break;
 	}
@@ -948,15 +1046,17 @@ record_linux_system_call (int num, struc
 
       /* sys_setitimer */
     case 104:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_itimerval))
 	return -1;
       break;
 
       /* sys_getitimer */
     case 105:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_itimerval))
 	return -1;
       break;
 
@@ -966,15 +1066,16 @@ record_linux_system_call (int num, struc
     case 107:
       /* sys_newfstat */
     case 108:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_stat))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_stat))
 	return -1;
       break;
 
       /* sys_uname */
     case 109:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_old_utsname))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_old_utsname))
 	return -1;
       break;
 
@@ -990,11 +1091,13 @@ record_linux_system_call (int num, struc
 
       /* sys_wait4 */
     case 114:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_int))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_int))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_rusage))
+      regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_rusage))
 	return -1;
       break;
 
@@ -1004,44 +1107,47 @@ record_linux_system_call (int num, struc
 
       /* sys_sysinfo */
     case 116:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_sysinfo))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_sysinfo))
 	return -1;
       break;
 
       /* sys_ipc */
     case 117:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      switch (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      switch (tmpulongest)
 	{
 	case RECORD_MSGRCV:
 	  {
-	    int32_t second;
-	    uint32_t ptr;
-	    regcache_raw_read (regcache, tdep->arg3,
-			       (gdb_byte *) & second);
-	    regcache_raw_read (regcache, tdep->arg5,
-			       (gdb_byte *) & ptr);
-	    if (record_arch_list_add_mem (ptr, second + tdep->size_long))
+	    ULONGEST second;
+	    ULONGEST ptr;
+	    regcache_raw_read_unsigned (regcache, tdep->arg3, &second);
+	    regcache_raw_read_unsigned (regcache, tdep->arg5, &ptr);
+	    if (record_arch_list_add_mem ((CORE_ADDR)ptr,
+                                          (int)second + tdep->size_long))
 	      return -1;
 	  }
 	  break;
 	case RECORD_MSGCTL:
-	  regcache_raw_read (regcache, tdep->arg5,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_msqid_ds))
+	  regcache_raw_read_unsigned (regcache, tdep->arg5,
+			              &tmpulongest);
+          if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_msqid_ds))
 	    return -1;
 	  break;
 	case RECORD_SHMAT:
-	  regcache_raw_read (regcache, tdep->arg4,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_ulong))
+	  regcache_raw_read_unsigned (regcache, tdep->arg4,
+			              &tmpulongest);
+          if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_ulong))
 	    return -1;
 	  break;
 	case RECORD_SHMCTL:
-	  regcache_raw_read (regcache, tdep->arg5,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_shmid_ds))
+	  regcache_raw_read_unsigned (regcache, tdep->arg5,
+			              &tmpulongest);
+          if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_shmid_ds))
 	    return -1;
 	  break;
 	}
@@ -1059,29 +1165,29 @@ record_linux_system_call (int num, struc
 
       /* sys_newuname */
     case 122:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_new_utsname))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_new_utsname))
 	return -1;
       break;
 
       /* sys_modify_ldt */
     case 123:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (tmpu32 == 0 || tmpu32 == 2)
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (tmpulongest == 0 || tmpulongest == 2)
 	{
-	  uint32_t ptr, bytecount;
-	  regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & ptr);
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & bytecount);
-	  if (record_arch_list_add_mem (ptr, bytecount))
+	  ULONGEST ptr, bytecount;
+	  regcache_raw_read_unsigned (regcache, tdep->arg2, &ptr);
+	  regcache_raw_read_unsigned (regcache, tdep->arg3, &bytecount);
+	  if (record_arch_list_add_mem ((CORE_ADDR)ptr, (int)bytecount))
 	    return -1;
 	}
       break;
 
       /* sys_adjtimex */
     case 124:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_timex))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_timex))
 	return -1;
       break;
 
@@ -1091,8 +1197,9 @@ record_linux_system_call (int num, struc
 
       /* sys_sigprocmask */
     case 126:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_old_sigset_t))
 	return -1;
       break;
 
@@ -1108,32 +1215,35 @@ record_linux_system_call (int num, struc
 
       /* sys_quotactl */
     case 131:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      switch (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      switch (tmpulongest)
 	{
 	case RECORD_Q_GETFMT:
-	  regcache_raw_read (regcache, tdep->arg4,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, 4))
+	  regcache_raw_read_unsigned (regcache, tdep->arg4,
+			              &tmpulongest);
+          if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 4))
 	    return -1;
 	  break;
 	case RECORD_Q_GETINFO:
-	  regcache_raw_read (regcache, tdep->arg4,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_mem_dqinfo))
+	  regcache_raw_read_unsigned (regcache, tdep->arg4,
+			              &tmpulongest);
+          if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_mem_dqinfo))
 	    return -1;
 	  break;
 	case RECORD_Q_GETQUOTA:
-	  regcache_raw_read (regcache, tdep->arg4,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_if_dqblk))
+	  regcache_raw_read_unsigned (regcache, tdep->arg4,
+			              &tmpulongest);
+          if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_if_dqblk))
 	    return -1;
 	  break;
 	case RECORD_Q_XGETQSTAT:
 	case RECORD_Q_XGETQUOTA:
-	  regcache_raw_read (regcache, tdep->arg4,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_fs_quota_stat))
+	  regcache_raw_read_unsigned (regcache, tdep->arg4,
+			              &tmpulongest);
+          if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_fs_quota_stat))
 	    return -1;
 	  break;
 	}
@@ -1149,13 +1259,13 @@ record_linux_system_call (int num, struc
 
       /* sys_sysfs */
     case 135:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (tmpu32 == 2)
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (tmpulongest == 2)
 	{
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
 	  /*XXX the size of memory is not very clear.  */
-	  if (record_arch_list_add_mem (tmpu32, 10))
+          if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 10))
 	    return -1;
 	}
       break;
@@ -1172,36 +1282,42 @@ record_linux_system_call (int num, struc
 
       /* sys_llseek */
     case 140:
-      regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_loff_t))
 	return -1;
       break;
 
       /* sys_getdents */
     case 141:
       {
-	uint32_t count;
-	regcache_raw_read (regcache, tdep->arg2,
-			   (gdb_byte *) & tmpu32);
-	regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
-	if (record_arch_list_add_mem (tmpu32, tdep->size_dirent * count))
+	ULONGEST count;
+	regcache_raw_read_unsigned (regcache, tdep->arg2,
+			            &tmpulongest);
+	regcache_raw_read_unsigned (regcache, tdep->arg3, &count);
+        if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                      tdep->size_dirent * count))
 	  return -1;
       }
       break;
 
       /* sys_select */
     case 142:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_fd_set))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_fd_set))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set))
+      regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_fd_set))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_timeval))
+      regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_timeval))
 	return -1;
       break;
 
@@ -1214,34 +1330,34 @@ record_linux_system_call (int num, struc
       /* sys_readv */
     case 145:
       {
-	uint32_t vec;
-	uint32_t vlen;
-	struct record_iovec
-	{
-	  uint32_t iov_base;
-	  uint32_t iov_len;
-	} iov;
-	regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec);
+	ULONGEST vec, vlen;
+
+	regcache_raw_read_unsigned (regcache, tdep->arg2, &vec);
 	if (vec)
 	  {
-	    regcache_raw_read (regcache, tdep->arg3,
-			       (gdb_byte *) & vlen);
-	    for (tmpu32 = 0; tmpu32 < vlen; tmpu32++)
+            gdb_byte *iov = alloca (tdep->size_iovec);
+
+	    regcache_raw_read_unsigned (regcache, tdep->arg3, &vlen);
+	    for (tmpulongest = 0; tmpulongest < vlen; tmpulongest++)
 	      {
-		if (target_read_memory
-		    (vec, (gdb_byte *) & iov, sizeof (struct record_iovec)))
+		if (target_read_memory ((CORE_ADDR)vec, iov,
+                                        tdep->size_iovec))
 		  {
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %lu.\n",
-					  paddr_nz (vec),
-					  (unsigned long)sizeof (struct record_iovec));
+					  "memory at addr = 0x%s len = %d.\n",
+					  OUTPUT_REG (vec, tdep->arg2),
+					  tdep->size_iovec);
 		    return -1;
 		  }
-		if (record_arch_list_add_mem (iov.iov_base, iov.iov_len))
+		if (record_arch_list_add_mem
+                      ((CORE_ADDR)extract_unsigned_integer
+                                    (iov, tdep->size_pointer),
+                       (int)extract_unsigned_integer
+                              (iov + tdep->size_pointer, tdep->size_size_t)))
 		  return -1;
-		vec += sizeof (struct record_iovec);
+		vec += tdep->size_iovec;
 	      }
 	  }
       }
@@ -1269,8 +1385,8 @@ record_linux_system_call (int num, struc
 
       /* sys_sched_getparam */
     case 155:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_int))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int))
 	return -1;
       break;
 
@@ -1290,8 +1406,9 @@ record_linux_system_call (int num, struc
     case 161:
       /* sys_nanosleep */
     case 162:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_timespec))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_timespec))
 	return -1;
       break;
 
@@ -1303,14 +1420,16 @@ record_linux_system_call (int num, struc
 
       /* sys_getresuid16 */
     case 165:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_old_uid_t))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_old_uid_t))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_old_uid_t))
 	return -1;
       break;
 
@@ -1322,30 +1441,30 @@ record_linux_system_call (int num, struc
 
       /* sys_poll */
     case 168:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (tmpulongest)
 	{
-	  uint32_t nfds;
-	  regcache_raw_read (regcache, tdep->arg2,
-			     (gdb_byte *) & nfds);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds))
+	  ULONGEST nfds;
+	  regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds);
+          if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_pollfd * nfds))
 	    return -1;
 	}
       break;
 
       /* sys_nfsservctl */
     case 169:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (tmpu32 == 7 || tmpu32 == 8)
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (tmpulongest == 7 || tmpulongest == 8)
 	{
-	  uint32_t rsize;
-	  if (tmpu32 == 7)
+	  int rsize;
+	  if (tmpulongest == 7)
 	    rsize = tdep->size_NFS_FHSIZE;
 	  else
 	    rsize = tdep->size_knfsd_fh;
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, rsize))
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
+          if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, rsize))
 	    return -1;
 	}
       break;
@@ -1356,32 +1475,34 @@ record_linux_system_call (int num, struc
 
       /* sys_getresgid16 */
     case 171:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,tdep->size_old_gid_t))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_old_gid_t))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_old_gid_t))
 	return -1;
       break;
 
       /* sys_prctl */
     case 172:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      switch (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      switch (tmpulongest)
 	{
 	case 2:
-	  regcache_raw_read (regcache, tdep->arg2,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_int))
+	  regcache_raw_read_unsigned (regcache, tdep->arg2,
+			              &tmpulongest);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                                tdep->size_int))
 	    return -1;
 	  break;
 	case 16:
-	  regcache_raw_read (regcache, tdep->arg2,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_TASK_COMM_LEN))
+	  regcache_raw_read_unsigned (regcache, tdep->arg2,
+			              &tmpulongest);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                                tdep->size_TASK_COMM_LEN))
 	    return -1;
 	  break;
 	}
@@ -1393,35 +1514,38 @@ record_linux_system_call (int num, struc
 
       /* sys_rt_sigaction */
     case 174:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_sigaction))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_sigaction))
 	return -1;
       break;
 
       /* sys_rt_sigprocmask */
     case 175:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_sigset_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_sigset_t))
 	return -1;
       break;
 
       /* sys_rt_sigpending */
     case 176:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (tmpulongest)
 	{
-	  uint32_t sigsetsize;
-	  regcache_raw_read (regcache, tdep->arg2,
-			     (gdb_byte *) & sigsetsize);
-	  if (record_arch_list_add_mem (tmpu32, sigsetsize))
+	  ULONGEST sigsetsize;
+	  regcache_raw_read_unsigned (regcache, tdep->arg2,&sigsetsize);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        (int)sigsetsize))
 	    return -1;
 	}
       break;
 
       /* sys_rt_sigtimedwait */
     case 177:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_siginfo_t))
 	return -1;
       break;
 
@@ -1433,13 +1557,12 @@ record_linux_system_call (int num, struc
 
       /* sys_pread64 */
     case 180:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (tmpulongest)
 	{
-	  uint32_t count;
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & count);
-	  if (record_arch_list_add_mem (tmpu32, count))
+	  ULONGEST count;
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,&count);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)count))
 	    return -1;
 	}
       break;
@@ -1452,21 +1575,21 @@ record_linux_system_call (int num, struc
 
       /* sys_getcwd */
     case 183:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (tmpulongest)
 	{
-	  uint32_t size;
-	  regcache_raw_read (regcache, tdep->arg2,
-			     (gdb_byte *) & size);
-	  if (record_arch_list_add_mem (tmpu32, size))
+	  ULONGEST size;
+	  regcache_raw_read_unsigned (regcache, tdep->arg2, &size);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)size))
 	    return -1;
 	}
       break;
 
       /* sys_capget */
     case 184:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_cap_user_data_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_cap_user_data_t))
 	return -1;
       break;
 
@@ -1476,15 +1599,16 @@ record_linux_system_call (int num, struc
 
       /* sys_sigaltstack */
     case 186:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_stack_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_stack_t))
 	return -1;
       break;
 
       /* sys_sendfile */
     case 187:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_off_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_off_t))
 	return -1;
       break;
 
@@ -1498,8 +1622,9 @@ record_linux_system_call (int num, struc
 
       /* sys_getrlimit */
     case 191:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_rlimit))
 	return -1;
       break;
 
@@ -1519,8 +1644,9 @@ record_linux_system_call (int num, struc
     case 196:
       /* sys_fstat64 */
     case 197:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_stat64))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_stat64))
 	return -1;
       break;
 
@@ -1542,14 +1668,14 @@ record_linux_system_call (int num, struc
 
       /* sys_getgroups */
     case 205:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (tmpulongest)
 	{
-	  int gidsetsize;
-	  regcache_raw_read (regcache, tdep->arg1,
-			     (gdb_byte *) & gidsetsize);
-	  if (record_arch_list_add_mem
-	      (tmpu32, tdep->size_gid_t * gidsetsize))
+	  ULONGEST gidsetsize;
+	  regcache_raw_read_unsigned (regcache, tdep->arg1,
+			              &gidsetsize);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                                tdep->size_gid_t * (int)gidsetsize))
 	    return -1;
 	}
       break;
@@ -1564,14 +1690,14 @@ record_linux_system_call (int num, struc
 
       /* sys_getresuid */
     case 209:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_uid_t))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_uid_t))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_uid_t))
 	return -1;
       break;
 
@@ -1581,14 +1707,14 @@ record_linux_system_call (int num, struc
 
       /* sys_getresgid */
     case 211:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_gid_t))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_gid_t))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_gid_t))
 	return -1;
       break;
 
@@ -1608,8 +1734,9 @@ record_linux_system_call (int num, struc
 
       /* sys_mincore */
     case 218:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_PAGE_SIZE))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_PAGE_SIZE))
 	return -1;
       break;
 
@@ -1620,27 +1747,29 @@ record_linux_system_call (int num, struc
       /* sys_getdents64 */
     case 220:
       {
-	uint32_t count;
-	regcache_raw_read (regcache, tdep->arg2,
-			   (gdb_byte *) & tmpu32);
-	regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
-	if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count))
+	ULONGEST count;
+	regcache_raw_read_unsigned (regcache, tdep->arg2,
+			            &tmpulongest);
+	regcache_raw_read_unsigned (regcache, tdep->arg3, &count);
+	if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                              tdep->size_dirent64 * count))
 	  return -1;
       }
       break;
 
       /* sys_fcntl64 */
     case 221:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (tmpu32 == tdep->fcntl_F_GETLK64)
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (tmpulongest == tdep->fcntl_F_GETLK64)
         {
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_flock64))
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                                tdep->size_flock64))
 	    return -1;
 	}
-      else if (tmpu32 != tdep->fcntl_F_SETLK64
-	       && tmpu32 != tdep->fcntl_F_SETLKW64)
+      else if (tmpulongest != tdep->fcntl_F_SETLK64
+	       && tmpulongest != tdep->fcntl_F_SETLKW64)
         {
 	  goto sys_fcntl;
 	}
@@ -1668,13 +1797,12 @@ record_linux_system_call (int num, struc
     case 230:
       /* sys_fgetxattr */
     case 231:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (tmpulongest)
 	{
-	  uint32_t size;
-	  regcache_raw_read (regcache, tdep->arg4,
-			     (gdb_byte *) & size);
-	  if (record_arch_list_add_mem (tmpu32, size))
+	  ULONGEST size;
+	  regcache_raw_read_unsigned (regcache, tdep->arg4, &size);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)size))
 	    return -1;
 	}
       break;
@@ -1685,13 +1813,12 @@ record_linux_system_call (int num, struc
     case 233:
       /* sys_flistxattr */
     case 234:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (tmpulongest)
 	{
-	  uint32_t size;
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & size);
-	  if (record_arch_list_add_mem (tmpu32, size))
+	  ULONGEST size;
+	  regcache_raw_read_unsigned (regcache, tdep->arg3, &size);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)size))
 	    return -1;
 	}
       break;
@@ -1708,8 +1835,9 @@ record_linux_system_call (int num, struc
 
       /* sys_sendfile64 */
     case 239:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_loff_t))
 	return -1;
       break;
 
@@ -1721,34 +1849,35 @@ record_linux_system_call (int num, struc
 
       /* sys_sched_getaffinity */
     case 242:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (tmpulongest)
 	{
-	  uint32_t len;
-	  regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len);
-	  if (record_arch_list_add_mem (tmpu32, len))
+	  ULONGEST len;
+	  regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)len))
 	    return -1;
 	}
       break;
 
       /* sys_set_thread_area */
     case 243:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_int))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int))
 	return -1;
       break;
 
       /* sys_get_thread_area */
     case 244:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_user_desc))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_user_desc))
 	return -1;
       break;
 
       /* sys_io_setup */
     case 245:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_long))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_long))
 	return -1;
       break;
 
@@ -1758,48 +1887,55 @@ record_linux_system_call (int num, struc
 
       /* sys_io_getevents */
     case 247:
-      regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+      if (tmpulongest)
 	{
-	  int32_t nr;
-	  regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & nr);
-	  if (record_arch_list_add_mem (tmpu32, nr * tdep->size_io_event))
+	  ULONGEST nr;
+	  regcache_raw_read_unsigned (regcache, tdep->arg3, &nr);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                                nr * tdep->size_io_event))
 	    return -1;
 	}
       break;
 
       /* sys_io_submit */
     case 248:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (tmpulongest)
 	{
-	  int32_t i, nr;
-	  uint32_t *iocbp;
-	  regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr);
-	  iocbp = (uint32_t *) alloca (nr * tdep->size_int);
-	  if (target_read_memory
-	      (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int))
+          ULONGEST nr, i;
+          gdb_byte *iocbp;
+
+	  regcache_raw_read_unsigned (regcache, tdep->arg2, &nr);
+          iocbp = alloca (nr * tdep->size_pointer);
+	  if (target_read_memory ((CORE_ADDR)tmpulongest, iocbp,
+                                  nr * tdep->size_pointer))
 	    {
 	      if (record_debug)
 		fprintf_unfiltered (gdb_stdlog,
 				    "Process record: error reading memory "
 				    "at addr = 0x%s len = %u.\n",
-				    paddr_nz (tmpu32),
-				    (int)(nr * tdep->size_int));
+				    OUTPUT_REG (tmpulongest, tdep->arg2),
+				    (int)(nr * tdep->size_pointer));
 	      return -1;
 	    }
 	  for (i = 0; i < nr; i++)
 	    {
-	      if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb))
+	      if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+                                                         (iocbp,
+                                                          tdep->size_pointer),
+                                            tdep->size_iocb))
 		return -1;
+              iocbp += tdep->size_pointer;
 	    }
 	}
       break;
 
       /* sys_io_cancel */
     case 249:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_io_event))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_io_event))
 	return -1;
       break;
 
@@ -1826,12 +1962,12 @@ record_linux_system_call (int num, struc
 
       /* sys_lookup_dcookie */
     case 253:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (tmpulongest)
 	{
-	  uint32_t len;
-	  regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len);
-	  if (record_arch_list_add_mem (tmpu32, len))
+	  ULONGEST len;
+	  regcache_raw_read_unsigned (regcache, tdep->arg3, &len);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)len))
 	    return -1;
 	}
       break;
@@ -1844,14 +1980,13 @@ record_linux_system_call (int num, struc
 
       /* sys_epoll_wait */
     case 256:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (tmpulongest)
 	{
-	  int32_t maxevents;
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & maxevents);
-	  if (record_arch_list_add_mem
-	      (tmpu32, maxevents * tdep->size_epoll_event))
+	  ULONGEST maxevents;
+	  regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                                maxevents * tdep->size_epoll_event))
 	    return -1;
 	}
       break;
@@ -1864,22 +1999,24 @@ record_linux_system_call (int num, struc
 
       /* sys_timer_create */
     case 259:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_int))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int))
 	return -1;
       break;
 
       /* sys_timer_settime */
     case 260:
-      regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec))
+      regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_itimerspec))
 	return -1;
       break;
 
       /* sys_timer_gettime */
     case 261:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_itimerspec))
 	return -1;
       break;
 
@@ -1893,22 +2030,25 @@ record_linux_system_call (int num, struc
 
       /* sys_clock_gettime */
     case 265:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_timespec))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_timespec))
 	return -1;
       break;
 
       /* sys_clock_getres */
     case 266:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_timespec))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_timespec))
 	return -1;
       break;
 
       /* sys_clock_nanosleep */
     case 267:
-      regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_timespec))
+      regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_timespec))
 	return -1;
       break;
 
@@ -1916,8 +2056,9 @@ record_linux_system_call (int num, struc
     case 268:
       /* sys_fstatfs64 */
     case 269:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_statfs64))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_statfs64))
 	return -1;
       break;
 
@@ -1935,16 +2076,16 @@ record_linux_system_call (int num, struc
 
       /* sys_get_mempolicy */
     case 275:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_int))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (tmpulongest)
 	{
-	  uint32_t maxnode;
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & maxnode);
-	  if (record_arch_list_add_mem (tmpu32, maxnode * tdep->size_long))
+	  ULONGEST maxnode;
+	  regcache_raw_read_unsigned (regcache, tdep->arg3, &maxnode);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                                maxnode * tdep->size_long))
 	    return -1;
 	}
       break;
@@ -1961,17 +2102,16 @@ record_linux_system_call (int num, struc
 
       /* sys_mq_timedreceive */
     case 280:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (tmpulongest)
 	{
-	  uint32_t msg_len;
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & msg_len);
-	  if (record_arch_list_add_mem (tmpu32, msg_len))
+	  ULONGEST msg_len;
+	  regcache_raw_read_unsigned (regcache, tdep->arg3, &msg_len);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)msg_len))
 	    return -1;
 	}
-      regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_int))
+      regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int))
 	return -1;
       break;
 
@@ -1981,8 +2121,9 @@ record_linux_system_call (int num, struc
 
       /* sys_mq_getsetattr */
     case 282:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_mq_attr))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_mq_attr))
 	return -1;
       break;
 
@@ -1992,11 +2133,13 @@ record_linux_system_call (int num, struc
 
       /* sys_waitid */
     case 284:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_siginfo))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_rusage))
+      regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_rusage))
 	return -1;
       break;
 
@@ -2010,17 +2153,17 @@ record_linux_system_call (int num, struc
 
       /* sys_keyctl */
     case 288:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (tmpu32 == 6 || tmpu32 == 11)
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (tmpulongest == 6 || tmpulongest == 11)
 	{
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & tmpu32);
-	  if (tmpu32)
+	  regcache_raw_read_unsigned (regcache, tdep->arg3,
+			              &tmpulongest);
+	  if (tmpulongest)
 	    {
-	      uint32_t buflen;
-	      regcache_raw_read (regcache, tdep->arg4,
-				 (gdb_byte *) & buflen);
-	      if (record_arch_list_add_mem (tmpu32, buflen))
+	      ULONGEST buflen;
+	      regcache_raw_read_unsigned (regcache, tdep->arg4, &buflen);
+	      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                            (int)buflen))
 		return -1;
 	    }
 	}
@@ -2052,8 +2195,9 @@ record_linux_system_call (int num, struc
 
       /* sys_fstatat64 */
     case 300:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_stat64))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+	                            tdep->size_stat64))
 	return -1;
       break;
 
@@ -2069,13 +2213,12 @@ record_linux_system_call (int num, struc
 
       /* sys_readlinkat */
     case 305:
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (tmpulongest)
 	{
-	  int32_t bufsiz;
-	  regcache_raw_read (regcache, tdep->arg4,
-			     (gdb_byte *) & bufsiz);
-	  if (record_arch_list_add_mem (tmpu32, bufsiz))
+	  ULONGEST bufsiz;
+	  regcache_raw_read_unsigned (regcache, tdep->arg4, &bufsiz);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)bufsiz))
 	    return -1;
 	}
       break;
@@ -2088,33 +2231,38 @@ record_linux_system_call (int num, struc
 
       /* sys_pselect6 */
     case 308:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_fd_set))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_fd_set))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set))
+      regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_fd_set))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_timespec))
+      regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_timespec))
 	return -1;
       break;
 
       /* sys_ppoll */
     case 309:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (tmpulongest)
 	{
-	  uint32_t nfds;
-	  regcache_raw_read (regcache, tdep->arg2,
-			     (gdb_byte *) & nfds);
-	  if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds))
+	  ULONGEST nfds;
+	  regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        tdep->size_pollfd * nfds))
 	    return -1;
 	}
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_timespec))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_timespec))
 	return -1;
       break;
 
@@ -2126,21 +2274,23 @@ record_linux_system_call (int num, struc
 
       /* sys_get_robust_list */
     case 312:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_int))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_int))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int))
 	return -1;
       break;
 
       /* sys_splice */
     case 313:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_loff_t))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t))
+      regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_loff_t))
 	return -1;
       break;
 
@@ -2154,48 +2304,47 @@ record_linux_system_call (int num, struc
 
       /* sys_move_pages */
     case 317:
-      regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
+      if (tmpulongest)
 	{
-	  uint32_t nr_pages;
-	  regcache_raw_read (regcache, tdep->arg2,
-			     (gdb_byte *) & nr_pages);
-	  if (record_arch_list_add_mem (tmpu32, nr_pages * tdep->size_int))
+	  ULONGEST nr_pages;
+	  regcache_raw_read_unsigned (regcache, tdep->arg2, &nr_pages);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        nr_pages * tdep->size_int))
 	    return -1;
 	}
       break;
 
       /* sys_getcpu */
     case 318:
-      regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_int))
+      regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_int))
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int))
 	return -1;
-      regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
-      if (record_arch_list_add_mem (tmpu32, tdep->size_ulong * 2))
+      regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+      if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                    tdep->size_ulong * 2))
 	return -1;
       break;
 
       /* sys_epoll_pwait */
     case 319:
-      regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      if (tmpu32)
+      regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+      if (tmpulongest)
 	{
-	  int32_t maxevents;
-	  regcache_raw_read (regcache, tdep->arg3,
-			     (gdb_byte *) & maxevents);
-	  if (record_arch_list_add_mem
-	      (tmpu32, maxevents * tdep->size_epoll_event))
+	  ULONGEST maxevents;
+	  regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents);
+	  if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+                                        (int)maxevents * tdep->size_epoll_event))
 	    return -1;
 	}
       break;
 
     default:
       printf_unfiltered (_("Process record and replay target doesn't "
-			   "support syscall number %u\n"),
-			 (int)tmpu32);
+			   "support syscall number %u\n"), num);
       return -1;
       break;
     }
--- a/linux-record.h
+++ b/linux-record.h
@@ -23,6 +23,7 @@
 struct linux_record_tdep
 {
   /* The size of the type that will be used in a system call.  */
+  int size_pointer;
   int size__old_kernel_stat;
   int size_tms;
   int size_loff_t;
@@ -81,7 +82,6 @@ struct linux_record_tdep
   int size_itimerspec;
   int size_mq_attr;
   int size_siginfo;
-
   int size_termios;
   int size_termios2;
   int size_pid_t;
@@ -89,6 +89,8 @@ struct linux_record_tdep
   int size_serial_struct;
   int size_serial_icounter_struct;
   int size_hayes_esp_config;
+  int size_size_t;
+  int size_iovec;
 
   /* The values of the second argument of system call "sys_ioctl".  */
   int ioctl_TCGETS;


More information about the Gdb-patches mailing list