Home | History | Annotate | Line # | Download | only in gdb
linux-record.c revision 1.1.1.9
      1 /* Process record and replay target code for GNU/Linux.
      2 
      3    Copyright (C) 2008-2024 Free Software Foundation, Inc.
      4 
      5    This file is part of GDB.
      6 
      7    This program is free software; you can redistribute it and/or modify
      8    it under the terms of the GNU General Public License as published by
      9    the Free Software Foundation; either version 3 of the License, or
     10    (at your option) any later version.
     11 
     12    This program is distributed in the hope that it will be useful,
     13    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15    GNU General Public License for more details.
     16 
     17    You should have received a copy of the GNU General Public License
     18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19 
     20 #include "extract-store-integer.h"
     21 #include "target.h"
     22 #include "gdbtypes.h"
     23 #include "regcache.h"
     24 #include "record.h"
     25 #include "record-full.h"
     26 #include "linux-record.h"
     27 #include "gdbarch.h"
     28 
     29 /* These macros are the values of the first argument of system call
     30    "sys_ptrace".  The values of these macros were obtained from Linux
     31    Kernel source.  */
     32 
     33 #define RECORD_PTRACE_PEEKTEXT	1
     34 #define RECORD_PTRACE_PEEKDATA	2
     35 #define RECORD_PTRACE_PEEKUSR	3
     36 
     37 /* These macros are the values of the first argument of system call
     38    "sys_socketcall".  The values of these macros were obtained from
     39    Linux Kernel source.  */
     40 
     41 #define RECORD_SYS_SOCKET	1
     42 #define RECORD_SYS_BIND		2
     43 #define RECORD_SYS_CONNECT	3
     44 #define RECORD_SYS_LISTEN	4
     45 #define RECORD_SYS_ACCEPT	5
     46 #define RECORD_SYS_GETSOCKNAME	6
     47 #define RECORD_SYS_GETPEERNAME	7
     48 #define RECORD_SYS_SOCKETPAIR	8
     49 #define RECORD_SYS_SEND		9
     50 #define RECORD_SYS_RECV		10
     51 #define RECORD_SYS_SENDTO	11
     52 #define RECORD_SYS_RECVFROM	12
     53 #define RECORD_SYS_SHUTDOWN	13
     54 #define RECORD_SYS_SETSOCKOPT	14
     55 #define RECORD_SYS_GETSOCKOPT	15
     56 #define RECORD_SYS_SENDMSG	16
     57 #define RECORD_SYS_RECVMSG	17
     58 
     59 /* These macros are the values of the first argument of system call
     60    "sys_ipc".  The values of these macros were obtained from Linux
     61    Kernel source.  */
     62 
     63 #define RECORD_SEMOP		1
     64 #define RECORD_SEMGET		2
     65 #define RECORD_SEMCTL		3
     66 #define RECORD_SEMTIMEDOP	4
     67 #define RECORD_MSGSND		11
     68 #define RECORD_MSGRCV		12
     69 #define RECORD_MSGGET		13
     70 #define RECORD_MSGCTL		14
     71 #define RECORD_SHMAT		21
     72 #define RECORD_SHMDT		22
     73 #define RECORD_SHMGET		23
     74 #define RECORD_SHMCTL		24
     75 
     76 /* These macros are the values of the first argument of system call
     77    "sys_quotactl".  The values of these macros were obtained from Linux
     78    Kernel source.  */
     79 
     80 #define RECORD_Q_GETFMT		0x800004
     81 #define RECORD_Q_GETINFO	0x800005
     82 #define RECORD_Q_GETQUOTA	0x800007
     83 #define RECORD_Q_XGETQSTAT	(('5' << 8) + 5)
     84 #define RECORD_Q_XGETQUOTA	(('3' << 8) + 3)
     85 
     86 #define OUTPUT_REG(val, num)      phex_nz ((val), \
     87     gdbarch_register_type (regcache->arch (), (num))->length ())
     88 
     89 /* Record a memory area of length LEN pointed to by register
     90    REGNUM.  */
     91 
     92 static int
     93 record_mem_at_reg (struct regcache *regcache, int regnum, int len)
     94 {
     95   ULONGEST addr;
     96 
     97   regcache_raw_read_unsigned (regcache, regnum, &addr);
     98   return record_full_arch_list_add_mem ((CORE_ADDR) addr, len);
     99 }
    100 
    101 static int
    102 record_linux_sockaddr (struct regcache *regcache,
    103 		       struct linux_record_tdep *tdep, ULONGEST addr,
    104 		       ULONGEST len)
    105 {
    106   gdb_byte *a;
    107   int addrlen;
    108   struct gdbarch *gdbarch = regcache->arch ();
    109   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
    110 
    111   if (!addr)
    112     return 0;
    113 
    114   a = (gdb_byte *) alloca (tdep->size_int);
    115 
    116   if (record_full_arch_list_add_mem ((CORE_ADDR) len, tdep->size_int))
    117     return -1;
    118 
    119   /* Get the addrlen.  */
    120   if (target_read_memory ((CORE_ADDR) len, a, tdep->size_int))
    121     {
    122       if (record_debug)
    123 	gdb_printf (gdb_stdlog,
    124 		    "Process record: error reading "
    125 		    "memory at addr = 0x%s len = %d.\n",
    126 		    phex_nz (len, tdep->size_pointer),
    127 		    tdep->size_int);
    128       return -1;
    129     }
    130   addrlen = (int) extract_unsigned_integer (a, tdep->size_int, byte_order);
    131   if (addrlen <= 0 || addrlen > tdep->size_sockaddr)
    132     addrlen = tdep->size_sockaddr;
    133 
    134   if (record_full_arch_list_add_mem ((CORE_ADDR) addr, addrlen))
    135     return -1;
    136 
    137   return 0;
    138 }
    139 
    140 static int
    141 record_linux_msghdr (struct regcache *regcache,
    142 		     struct linux_record_tdep *tdep, ULONGEST addr)
    143 {
    144   gdb_byte *a;
    145   struct gdbarch *gdbarch = regcache->arch ();
    146   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
    147   CORE_ADDR tmpaddr;
    148   int tmpint;
    149 
    150   if (!addr)
    151     return 0;
    152 
    153   if (record_full_arch_list_add_mem ((CORE_ADDR) addr, tdep->size_msghdr))
    154     return -1;
    155 
    156   a = (gdb_byte *) alloca (tdep->size_msghdr);
    157   if (target_read_memory ((CORE_ADDR) addr, a, tdep->size_msghdr))
    158     {
    159       if (record_debug)
    160 	gdb_printf (gdb_stdlog,
    161 		    "Process record: error reading "
    162 		    "memory at addr = 0x%s "
    163 		    "len = %d.\n",
    164 		    phex_nz (addr, tdep->size_pointer),
    165 		    tdep->size_msghdr);
    166       return -1;
    167     }
    168 
    169   /* msg_name msg_namelen */
    170   addr = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
    171   a += tdep->size_pointer;
    172   if (record_full_arch_list_add_mem
    173       ((CORE_ADDR) addr,
    174        (int) extract_unsigned_integer (a,
    175 				       tdep->size_int,
    176 				       byte_order)))
    177     return -1;
    178   /* We have read an int, but skip size_pointer bytes to account for alignment
    179      of the next field on 64-bit targets. */
    180   a += tdep->size_pointer;
    181 
    182   /* msg_iov msg_iovlen */
    183   addr = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
    184   a += tdep->size_pointer;
    185   if (addr)
    186     {
    187       ULONGEST i;
    188       ULONGEST len = extract_unsigned_integer (a, tdep->size_size_t,
    189 					       byte_order);
    190       gdb_byte *iov = (gdb_byte *) alloca (tdep->size_iovec);
    191 
    192       for (i = 0; i < len; i++)
    193 	{
    194 	  if (target_read_memory ((CORE_ADDR) addr, iov, tdep->size_iovec))
    195 	    {
    196 	      if (record_debug)
    197 		gdb_printf (gdb_stdlog,
    198 			    "Process record: error "
    199 			    "reading memory at "
    200 			    "addr = 0x%s "
    201 			    "len = %d.\n",
    202 			    phex_nz (addr,tdep->size_pointer),
    203 			    tdep->size_iovec);
    204 	      return -1;
    205 	    }
    206 	  tmpaddr = (CORE_ADDR) extract_unsigned_integer (iov,
    207 							  tdep->size_pointer,
    208 							  byte_order);
    209 	  tmpint = (int) extract_unsigned_integer (iov + tdep->size_pointer,
    210 						   tdep->size_size_t,
    211 						   byte_order);
    212 	  if (record_full_arch_list_add_mem (tmpaddr, tmpint))
    213 	    return -1;
    214 	  addr += tdep->size_iovec;
    215 	}
    216     }
    217   a += tdep->size_size_t;
    218 
    219   /* msg_control msg_controllen */
    220   addr = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
    221   a += tdep->size_pointer;
    222   tmpint = (int) extract_unsigned_integer (a, tdep->size_size_t, byte_order);
    223   if (record_full_arch_list_add_mem ((CORE_ADDR) addr, tmpint))
    224     return -1;
    225 
    226   return 0;
    227 }
    228 
    229 /* When the architecture process record get a Linux syscall
    230    instruction, it will get a Linux syscall number of this
    231    architecture and convert it to the Linux syscall number "num" which
    232    is internal to GDB.  Most Linux syscalls across architectures in
    233    Linux would be similar and mostly differ by sizes of types and
    234    structures.  This sizes are put to "tdep".
    235 
    236    Record the values of the registers and memory that will be changed
    237    in current system call.
    238 
    239    Return -1 if something wrong.  */
    240 
    241 int
    242 record_linux_system_call (enum gdb_syscall syscall,
    243 			  struct regcache *regcache,
    244 			  struct linux_record_tdep *tdep)
    245 {
    246   struct gdbarch *gdbarch = regcache->arch ();
    247   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
    248   ULONGEST tmpulongest;
    249   CORE_ADDR tmpaddr;
    250   int tmpint;
    251 
    252   switch (syscall)
    253     {
    254     case gdb_sys_restart_syscall:
    255       break;
    256 
    257     case gdb_sys_exit:
    258       if (yquery (_("The next instruction is syscall exit.  "
    259 		    "It will make the program exit.  "
    260 		    "Do you want to stop the program?")))
    261 	return 1;
    262       break;
    263 
    264     case gdb_sys_fork:
    265       break;
    266 
    267     case gdb_sys_read:
    268     case gdb_sys_readlink:
    269     case gdb_sys_recv:
    270       regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
    271       if (record_mem_at_reg (regcache, tdep->arg2, (int) tmpulongest))
    272 	return -1;
    273       break;
    274 
    275     case gdb_sys_write:
    276     case gdb_sys_open:
    277     case gdb_sys_close:
    278       break;
    279 
    280     case gdb_sys_waitpid:
    281       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
    282       if (tmpulongest)
    283 	if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
    284 					   tdep->size_int))
    285 	  return -1;
    286       break;
    287 
    288     case gdb_sys_creat:
    289     case gdb_sys_link:
    290     case gdb_sys_unlink:
    291     case gdb_sys_execve:
    292     case gdb_sys_chdir:
    293       break;
    294 
    295     case gdb_sys_time:
    296       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
    297       if (tmpulongest)
    298 	if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
    299 					   tdep->size_time_t))
    300 	  return -1;
    301       break;
    302 
    303     case gdb_sys_mknod:
    304     case gdb_sys_chmod:
    305     case gdb_sys_lchown16:
    306     case gdb_sys_ni_syscall17:
    307       break;
    308 
    309     case gdb_sys_stat:
    310     case gdb_sys_fstat:
    311     case gdb_sys_lstat:
    312       if (record_mem_at_reg (regcache, tdep->arg2,
    313 			     tdep->size__old_kernel_stat))
    314 	return -1;
    315       break;
    316 
    317     case gdb_sys_lseek:
    318     case gdb_sys_getpid:
    319     case gdb_sys_mount:
    320     case gdb_sys_oldumount:
    321     case gdb_sys_setuid16:
    322     case gdb_sys_getuid16:
    323     case gdb_sys_stime:
    324       break;
    325 
    326     case gdb_sys_ptrace:
    327       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
    328       if (tmpulongest == RECORD_PTRACE_PEEKTEXT
    329 	  || tmpulongest == RECORD_PTRACE_PEEKDATA
    330 	  || tmpulongest == RECORD_PTRACE_PEEKUSR)
    331 	{
    332 	  if (record_mem_at_reg (regcache, tdep->arg4, 4))
    333 	    return -1;
    334 	}
    335       break;
    336 
    337     case gdb_sys_alarm:
    338     case gdb_sys_pause:
    339     case gdb_sys_utime:
    340     case gdb_sys_ni_syscall31:
    341     case gdb_sys_ni_syscall32:
    342     case gdb_sys_access:
    343     case gdb_sys_nice:
    344     case gdb_sys_ni_syscall35:
    345     case gdb_sys_sync:
    346     case gdb_sys_kill:
    347     case gdb_sys_rename:
    348     case gdb_sys_mkdir:
    349     case gdb_sys_rmdir:
    350     case gdb_sys_dup:
    351       break;
    352 
    353     case gdb_sys_pipe:
    354     case gdb_sys_pipe2:
    355       if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int * 2))
    356 	return -1;
    357       break;
    358 
    359     case gdb_sys_getrandom:
    360       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
    361       if (record_mem_at_reg (regcache, tdep->arg1, tmpulongest))
    362 	return -1;
    363       break;
    364 
    365     case gdb_sys_times:
    366       if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_tms))
    367 	return -1;
    368       break;
    369 
    370     case gdb_sys_ni_syscall44:
    371     case gdb_sys_brk:
    372     case gdb_sys_setgid16:
    373     case gdb_sys_getgid16:
    374     case gdb_sys_signal:
    375     case gdb_sys_geteuid16:
    376     case gdb_sys_getegid16:
    377     case gdb_sys_acct:
    378     case gdb_sys_umount:
    379     case gdb_sys_ni_syscall53:
    380       break;
    381 
    382     case gdb_sys_ioctl:
    383       /* XXX Need to add a lot of support of other ioctl requests.  */
    384       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
    385       if (tmpulongest == tdep->ioctl_FIOCLEX
    386 	  || tmpulongest == tdep->ioctl_FIONCLEX
    387 	  || tmpulongest == tdep->ioctl_FIONBIO
    388 	  || tmpulongest == tdep->ioctl_FIOASYNC
    389 	  || tmpulongest == tdep->ioctl_TCSETS
    390 	  || tmpulongest == tdep->ioctl_TCSETSW
    391 	  || tmpulongest == tdep->ioctl_TCSETSF
    392 	  || tmpulongest == tdep->ioctl_TCSETA
    393 	  || tmpulongest == tdep->ioctl_TCSETAW
    394 	  || tmpulongest == tdep->ioctl_TCSETAF
    395 	  || tmpulongest == tdep->ioctl_TCSBRK
    396 	  || tmpulongest == tdep->ioctl_TCXONC
    397 	  || tmpulongest == tdep->ioctl_TCFLSH
    398 	  || tmpulongest == tdep->ioctl_TIOCEXCL
    399 	  || tmpulongest == tdep->ioctl_TIOCNXCL
    400 	  || tmpulongest == tdep->ioctl_TIOCSCTTY
    401 	  || tmpulongest == tdep->ioctl_TIOCSPGRP
    402 	  || tmpulongest == tdep->ioctl_TIOCSTI
    403 	  || tmpulongest == tdep->ioctl_TIOCSWINSZ
    404 	  || tmpulongest == tdep->ioctl_TIOCMBIS
    405 	  || tmpulongest == tdep->ioctl_TIOCMBIC
    406 	  || tmpulongest == tdep->ioctl_TIOCMSET
    407 	  || tmpulongest == tdep->ioctl_TIOCSSOFTCAR
    408 	  || tmpulongest == tdep->ioctl_TIOCCONS
    409 	  || tmpulongest == tdep->ioctl_TIOCSSERIAL
    410 	  || tmpulongest == tdep->ioctl_TIOCPKT
    411 	  || tmpulongest == tdep->ioctl_TIOCNOTTY
    412 	  || tmpulongest == tdep->ioctl_TIOCSETD
    413 	  || tmpulongest == tdep->ioctl_TCSBRKP
    414 	  || tmpulongest == tdep->ioctl_TIOCTTYGSTRUCT
    415 	  || tmpulongest == tdep->ioctl_TIOCSBRK
    416 	  || tmpulongest == tdep->ioctl_TIOCCBRK
    417 	  || tmpulongest == tdep->ioctl_TCSETS2
    418 	  || tmpulongest == tdep->ioctl_TCSETSW2
    419 	  || tmpulongest == tdep->ioctl_TCSETSF2
    420 	  || tmpulongest == tdep->ioctl_TIOCSPTLCK
    421 	  || tmpulongest == tdep->ioctl_TIOCSERCONFIG
    422 	  || tmpulongest == tdep->ioctl_TIOCSERGWILD
    423 	  || tmpulongest == tdep->ioctl_TIOCSERSWILD
    424 	  || tmpulongest == tdep->ioctl_TIOCSLCKTRMIOS
    425 	  || tmpulongest == tdep->ioctl_TIOCSERGETMULTI
    426 	  || tmpulongest == tdep->ioctl_TIOCSERSETMULTI
    427 	  || tmpulongest == tdep->ioctl_TIOCMIWAIT
    428 	  || tmpulongest == tdep->ioctl_TIOCSHAYESESP)
    429 	{
    430 	  /* Nothing to do.  */
    431 	}
    432       else if (tmpulongest == tdep->ioctl_TCGETS
    433 	       || tmpulongest == tdep->ioctl_TCGETA
    434 	       || tmpulongest == tdep->ioctl_TIOCGLCKTRMIOS)
    435 	{
    436 	  if (record_mem_at_reg (regcache, tdep->arg3,
    437 				 tdep->size_termios))
    438 	    return -1;
    439 	}
    440       else if (tmpulongest == tdep->ioctl_TIOCGPGRP
    441 	       || tmpulongest == tdep->ioctl_TIOCGSID)
    442 	{
    443 	  if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_pid_t))
    444 	    return -1;
    445 	}
    446       else if (tmpulongest == tdep->ioctl_TIOCOUTQ
    447 	       || tmpulongest == tdep->ioctl_TIOCMGET
    448 	       || tmpulongest == tdep->ioctl_TIOCGSOFTCAR
    449 	       || tmpulongest == tdep->ioctl_FIONREAD
    450 	       || tmpulongest == tdep->ioctl_TIOCINQ
    451 	       || tmpulongest == tdep->ioctl_TIOCGETD
    452 	       || tmpulongest == tdep->ioctl_TIOCGPTN
    453 	       || tmpulongest == tdep->ioctl_TIOCSERGETLSR)
    454 	{
    455 	  if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_int))
    456 	    return -1;
    457 	}
    458       else if (tmpulongest == tdep->ioctl_TIOCGWINSZ)
    459 	{
    460 	  if (record_mem_at_reg (regcache, tdep->arg3,
    461 				 tdep->size_winsize))
    462 	    return -1;
    463 	}
    464       else if (tmpulongest == tdep->ioctl_TIOCLINUX)
    465 	{
    466 	  /* This syscall affects a char-size memory.  */
    467 	  if (record_mem_at_reg (regcache, tdep->arg3, 1))
    468 	    return -1;
    469 	}
    470       else if (tmpulongest == tdep->ioctl_TIOCGSERIAL)
    471 	{
    472 	  if (record_mem_at_reg (regcache, tdep->arg3,
    473 				 tdep->size_serial_struct))
    474 	    return -1;
    475 	}
    476       else if (tmpulongest == tdep->ioctl_TCGETS2)
    477 	{
    478 	  if (record_mem_at_reg (regcache, tdep->arg3,
    479 				 tdep->size_termios2))
    480 	    return -1;
    481 	}
    482       else if (tmpulongest == tdep->ioctl_FIOQSIZE)
    483 	{
    484 	  if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_loff_t))
    485 	    return -1;
    486 	}
    487       else if (tmpulongest == tdep->ioctl_TIOCGICOUNT)
    488 	{
    489 	  if (record_mem_at_reg (regcache, tdep->arg3,
    490 				 tdep->size_serial_icounter_struct))
    491 	    return -1;
    492 	}
    493       else if (tmpulongest == tdep->ioctl_TIOCGHAYESESP)
    494 	{
    495 	  if (record_mem_at_reg (regcache, tdep->arg3,
    496 				 tdep->size_hayes_esp_config))
    497 	    return -1;
    498 	}
    499       else if (tmpulongest == tdep->ioctl_TIOCSERGSTRUCT)
    500 	{
    501 	  gdb_printf (gdb_stderr,
    502 		      _("Process record and replay target doesn't "
    503 			"support ioctl request TIOCSERGSTRUCT\n"));
    504 	  return 1;
    505 	}
    506       else
    507 	{
    508 	  gdb_printf (gdb_stderr,
    509 		      _("Process record and replay target doesn't "
    510 			"support ioctl request 0x%s.\n"),
    511 		      OUTPUT_REG (tmpulongest, tdep->arg2));
    512 	  return 1;
    513 	}
    514       break;
    515 
    516     case gdb_sys_fcntl:
    517       /* XXX */
    518       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
    519     sys_fcntl:
    520       if (tmpulongest == tdep->fcntl_F_GETLK)
    521 	{
    522 	  if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_flock))
    523 	    return -1;
    524 	}
    525       break;
    526 
    527     case gdb_sys_ni_syscall56:
    528     case gdb_sys_setpgid:
    529     case gdb_sys_ni_syscall58:
    530       break;
    531 
    532     case gdb_sys_olduname:
    533       if (record_mem_at_reg (regcache, tdep->arg1,
    534 			     tdep->size_oldold_utsname))
    535 	return -1;
    536       break;
    537 
    538     case gdb_sys_umask:
    539     case gdb_sys_chroot:
    540       break;
    541 
    542     case gdb_sys_ustat:
    543       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_ustat))
    544 	return -1;
    545       break;
    546 
    547     case gdb_sys_dup2:
    548     case gdb_sys_getppid:
    549     case gdb_sys_getpgrp:
    550     case gdb_sys_setsid:
    551       break;
    552 
    553     case gdb_sys_sigaction:
    554       if (record_mem_at_reg (regcache, tdep->arg3,
    555 			     tdep->size_old_sigaction))
    556 	return -1;
    557       break;
    558 
    559     case gdb_sys_sgetmask:
    560     case gdb_sys_ssetmask:
    561     case gdb_sys_setreuid16:
    562     case gdb_sys_setregid16:
    563     case gdb_sys_sigsuspend:
    564       break;
    565 
    566     case gdb_sys_sigpending:
    567       if (record_mem_at_reg (regcache, tdep->arg1,
    568 			     tdep->size_old_sigset_t))
    569 	return -1;
    570       break;
    571 
    572     case gdb_sys_sethostname:
    573     case gdb_sys_setrlimit:
    574       break;
    575 
    576     case gdb_sys_old_getrlimit:
    577       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_rlimit))
    578 	return -1;
    579       break;
    580 
    581     case gdb_sys_getrusage:
    582       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_rusage))
    583 	return -1;
    584       break;
    585 
    586     case gdb_sys_gettimeofday:
    587       if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_timeval)
    588 	  || record_mem_at_reg (regcache, tdep->arg2, tdep->size_timezone))
    589 	return -1;
    590       break;
    591 
    592     case gdb_sys_settimeofday:
    593       break;
    594 
    595     case gdb_sys_getgroups16:
    596       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
    597       if (tmpulongest)
    598 	{
    599 	  ULONGEST gidsetsize;
    600 
    601 	  regcache_raw_read_unsigned (regcache, tdep->arg1,
    602 				      &gidsetsize);
    603 	  tmpint = tdep->size_old_gid_t * (int) gidsetsize;
    604 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint))
    605 	    return -1;
    606 	}
    607       break;
    608 
    609     case gdb_sys_setgroups16:
    610       break;
    611 
    612     case gdb_old_select:
    613       {
    614 	unsigned long sz_sel_arg = tdep->size_long + tdep->size_pointer * 4;
    615 	gdb_byte *a = (gdb_byte *) alloca (sz_sel_arg);
    616 	CORE_ADDR inp, outp, exp, tvp;
    617 
    618 	regcache_raw_read_unsigned (regcache, tdep->arg1,
    619 				    &tmpulongest);
    620 	if (tmpulongest)
    621 	  {
    622 	    if (target_read_memory (tmpulongest, a, sz_sel_arg))
    623 	      {
    624 		if (record_debug)
    625 		  gdb_printf (gdb_stdlog,
    626 			      "Process record: error reading memory "
    627 			      "at addr = 0x%s len = %lu.\n",
    628 			      OUTPUT_REG (tmpulongest, tdep->arg1),
    629 			      sz_sel_arg);
    630 		return -1;
    631 	      }
    632 	    /* Skip n. */
    633 	    a += tdep->size_long;
    634 	    inp = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
    635 	    a += tdep->size_pointer;
    636 	    outp = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
    637 	    a += tdep->size_pointer;
    638 	    exp = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
    639 	    a += tdep->size_pointer;
    640 	    tvp = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
    641 	    if (inp)
    642 	      if (record_full_arch_list_add_mem (inp, tdep->size_fd_set))
    643 		return -1;
    644 	    if (outp)
    645 	      if (record_full_arch_list_add_mem (outp, tdep->size_fd_set))
    646 		return -1;
    647 	    if (exp)
    648 	      if (record_full_arch_list_add_mem (exp, tdep->size_fd_set))
    649 		return -1;
    650 	    if (tvp)
    651 	      if (record_full_arch_list_add_mem (tvp, tdep->size_timeval))
    652 		return -1;
    653 	  }
    654       }
    655       break;
    656 
    657     case gdb_sys_symlink:
    658       break;
    659 
    660     case gdb_sys_uselib:
    661     case gdb_sys_swapon:
    662       break;
    663 
    664     case gdb_sys_reboot:
    665       if (yquery (_("The next instruction is syscall reboot.  "
    666 		    "It will restart the computer.  "
    667 		    "Do you want to stop the program?")))
    668 	return 1;
    669       break;
    670 
    671     case gdb_old_readdir:
    672       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_old_dirent))
    673 	return -1;
    674       break;
    675 
    676     case gdb_old_mmap:
    677       break;
    678 
    679     case gdb_sys_munmap:
    680       {
    681 	ULONGEST len;
    682 
    683 	regcache_raw_read_unsigned (regcache, tdep->arg1,
    684 				    &tmpulongest);
    685 	regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
    686 	if (record_full_memory_query)
    687 	  {
    688 	    if (yquery (_("\
    689 The next instruction is syscall munmap.\n\
    690 It will free the memory addr = 0x%s len = %u.\n\
    691 It will make record target cannot record some memory change.\n\
    692 Do you want to stop the program?"),
    693 			OUTPUT_REG (tmpulongest, tdep->arg1), (int) len))
    694 	      return 1;
    695 	  }
    696       }
    697       break;
    698 
    699     case gdb_sys_truncate:
    700     case gdb_sys_ftruncate:
    701     case gdb_sys_fchmod:
    702     case gdb_sys_fchown16:
    703     case gdb_sys_getpriority:
    704     case gdb_sys_setpriority:
    705     case gdb_sys_ni_syscall98:
    706       break;
    707 
    708     case gdb_sys_statfs:
    709     case gdb_sys_fstatfs:
    710       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_statfs))
    711 	return -1;
    712       break;
    713 
    714     case gdb_sys_ioperm:
    715       break;
    716 
    717     case gdb_sys_socket:
    718     case gdb_sys_sendto:
    719     case gdb_sys_sendmsg:
    720     case gdb_sys_shutdown:
    721     case gdb_sys_bind:
    722     case gdb_sys_connect:
    723     case gdb_sys_listen:
    724     case gdb_sys_setsockopt:
    725       break;
    726 
    727     case gdb_sys_accept:
    728     case gdb_sys_getsockname:
    729     case gdb_sys_getpeername:
    730       {
    731 	ULONGEST len;
    732 
    733 	regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
    734 	regcache_raw_read_unsigned (regcache, tdep->arg3, &len);
    735 	if (record_linux_sockaddr (regcache, tdep, tmpulongest, len))
    736 	  return -1;
    737       }
    738       break;
    739 
    740     case gdb_sys_recvfrom:
    741       {
    742 	ULONGEST len;
    743 
    744 	regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
    745 	regcache_raw_read_unsigned (regcache, tdep->arg5, &len);
    746 	if (record_linux_sockaddr (regcache, tdep, tmpulongest, len))
    747 	  return -1;
    748       }
    749       break;
    750 
    751     case gdb_sys_recvmsg:
    752       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
    753       if (record_linux_msghdr (regcache, tdep, tmpulongest))
    754 	return -1;
    755       break;
    756 
    757     case gdb_sys_socketpair:
    758       if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_int))
    759 	return -1;
    760       break;
    761 
    762     case gdb_sys_getsockopt:
    763       regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
    764       if (tmpulongest)
    765 	{
    766 	  ULONGEST optvalp;
    767 	  gdb_byte *optlenp = (gdb_byte *) alloca (tdep->size_int);
    768 
    769 	  if (target_read_memory ((CORE_ADDR) tmpulongest, optlenp,
    770 				  tdep->size_int))
    771 	    {
    772 	      if (record_debug)
    773 		gdb_printf (gdb_stdlog,
    774 			    "Process record: error reading "
    775 			    "memory at addr = 0x%s "
    776 			    "len = %d.\n",
    777 			    OUTPUT_REG (tmpulongest, tdep->arg5),
    778 			    tdep->size_int);
    779 	      return -1;
    780 	    }
    781 	  regcache_raw_read_unsigned (regcache, tdep->arg4, &optvalp);
    782 	  tmpint = (int) extract_signed_integer (optlenp, tdep->size_int,
    783 						 byte_order);
    784 	  if (record_full_arch_list_add_mem ((CORE_ADDR) optvalp, tmpint))
    785 	    return -1;
    786 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
    787 					     tdep->size_int))
    788 	    return -1;
    789 	}
    790       break;
    791 
    792     case gdb_sys_socketcall:
    793       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
    794       switch (tmpulongest)
    795 	{
    796 	case RECORD_SYS_SOCKET:
    797 	case RECORD_SYS_BIND:
    798 	case RECORD_SYS_CONNECT:
    799 	case RECORD_SYS_LISTEN:
    800 	  break;
    801 	case RECORD_SYS_ACCEPT:
    802 	case RECORD_SYS_GETSOCKNAME:
    803 	case RECORD_SYS_GETPEERNAME:
    804 	  {
    805 	    regcache_raw_read_unsigned (regcache, tdep->arg2,
    806 					&tmpulongest);
    807 	    if (tmpulongest)
    808 	      {
    809 		gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2);
    810 		ULONGEST len;
    811 
    812 		tmpulongest += tdep->size_ulong;
    813 		if (target_read_memory ((CORE_ADDR) tmpulongest, a,
    814 					tdep->size_ulong * 2))
    815 		  {
    816 		    if (record_debug)
    817 		      gdb_printf (gdb_stdlog,
    818 				  "Process record: error reading "
    819 				  "memory at addr = 0x%s len = %d.\n",
    820 				  OUTPUT_REG (tmpulongest, tdep->arg2),
    821 				  tdep->size_ulong * 2);
    822 		    return -1;
    823 		  }
    824 		tmpulongest = extract_unsigned_integer (a,
    825 							tdep->size_ulong,
    826 							byte_order);
    827 		len = extract_unsigned_integer (a + tdep->size_ulong,
    828 						tdep->size_ulong, byte_order);
    829 		if (record_linux_sockaddr (regcache, tdep, tmpulongest, len))
    830 		  return -1;
    831 	      }
    832 	  }
    833 	  break;
    834 
    835 	case RECORD_SYS_SOCKETPAIR:
    836 	  {
    837 	    gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong);
    838 
    839 	    regcache_raw_read_unsigned (regcache, tdep->arg2,
    840 					&tmpulongest);
    841 	    if (tmpulongest)
    842 	      {
    843 		tmpulongest += tdep->size_ulong * 3;
    844 		if (target_read_memory ((CORE_ADDR) tmpulongest, a,
    845 					tdep->size_ulong))
    846 		  {
    847 		    if (record_debug)
    848 		      gdb_printf (gdb_stdlog,
    849 				  "Process record: error reading "
    850 				  "memory at addr = 0x%s len = %d.\n",
    851 				  OUTPUT_REG (tmpulongest, tdep->arg2),
    852 				  tdep->size_ulong);
    853 		    return -1;
    854 		  }
    855 		tmpaddr
    856 		  = (CORE_ADDR) extract_unsigned_integer (a, tdep->size_ulong,
    857 							  byte_order);
    858 		if (record_full_arch_list_add_mem (tmpaddr, tdep->size_int))
    859 		  return -1;
    860 	      }
    861 	  }
    862 	  break;
    863 	case RECORD_SYS_SEND:
    864 	case RECORD_SYS_SENDTO:
    865 	  break;
    866 	case RECORD_SYS_RECVFROM:
    867 	  regcache_raw_read_unsigned (regcache, tdep->arg2,
    868 				      &tmpulongest);
    869 	  if (tmpulongest)
    870 	    {
    871 	      gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2);
    872 	      ULONGEST len;
    873 
    874 	      tmpulongest += tdep->size_ulong * 4;
    875 	      if (target_read_memory ((CORE_ADDR) tmpulongest, a,
    876 				      tdep->size_ulong * 2))
    877 		{
    878 		  if (record_debug)
    879 		    gdb_printf (gdb_stdlog,
    880 				"Process record: error reading "
    881 				"memory at addr = 0x%s len = %d.\n",
    882 				OUTPUT_REG (tmpulongest, tdep->arg2),
    883 				tdep->size_ulong * 2);
    884 		  return -1;
    885 		}
    886 	      tmpulongest = extract_unsigned_integer (a, tdep->size_ulong,
    887 						      byte_order);
    888 	      len = extract_unsigned_integer (a + tdep->size_ulong,
    889 					      tdep->size_ulong, byte_order);
    890 	      if (record_linux_sockaddr (regcache, tdep, tmpulongest, len))
    891 		return -1;
    892 	    }
    893 	  break;
    894 	case RECORD_SYS_RECV:
    895 	  regcache_raw_read_unsigned (regcache, tdep->arg2,
    896 				      &tmpulongest);
    897 	  if (tmpulongest)
    898 	    {
    899 	      gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2);
    900 
    901 	      tmpulongest += tdep->size_ulong;
    902 	      if (target_read_memory ((CORE_ADDR) tmpulongest, a,
    903 				      tdep->size_ulong))
    904 		{
    905 		  if (record_debug)
    906 		    gdb_printf (gdb_stdlog,
    907 				"Process record: error reading "
    908 				"memory at addr = 0x%s len = %d.\n",
    909 				OUTPUT_REG (tmpulongest, tdep->arg2),
    910 				tdep->size_ulong);
    911 		  return -1;
    912 		}
    913 	      tmpulongest = extract_unsigned_integer (a, tdep->size_ulong,
    914 						      byte_order);
    915 	      if (tmpulongest)
    916 		{
    917 		  a += tdep->size_ulong;
    918 		  tmpint = (int) extract_unsigned_integer (a, tdep->size_ulong,
    919 							   byte_order);
    920 		  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
    921 						     tmpint))
    922 		    return -1;
    923 		}
    924 	    }
    925 	  break;
    926 	case RECORD_SYS_SHUTDOWN:
    927 	case RECORD_SYS_SETSOCKOPT:
    928 	  break;
    929 	case RECORD_SYS_GETSOCKOPT:
    930 	  {
    931 	    gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2);
    932 	    gdb_byte *av = (gdb_byte *) alloca (tdep->size_int);
    933 
    934 	    regcache_raw_read_unsigned (regcache, tdep->arg2,
    935 					&tmpulongest);
    936 	    if (tmpulongest)
    937 	      {
    938 		tmpulongest += tdep->size_ulong * 3;
    939 		if (target_read_memory ((CORE_ADDR) tmpulongest, a,
    940 					tdep->size_ulong * 2))
    941 		  {
    942 		    if (record_debug)
    943 		      gdb_printf (gdb_stdlog,
    944 				  "Process record: error reading "
    945 				  "memory at addr = 0x%s len = %d.\n",
    946 				  OUTPUT_REG (tmpulongest, tdep->arg2),
    947 				  tdep->size_ulong * 2);
    948 		    return -1;
    949 		  }
    950 		tmpulongest = extract_unsigned_integer (a + tdep->size_ulong,
    951 							tdep->size_ulong,
    952 							byte_order);
    953 		if (tmpulongest)
    954 		  {
    955 		    if (target_read_memory ((CORE_ADDR) tmpulongest, av,
    956 					    tdep->size_int))
    957 		      {
    958 			if (record_debug)
    959 			  gdb_printf (gdb_stdlog,
    960 				      "Process record: error reading "
    961 				      "memory at addr = 0x%s "
    962 				      "len = %d.\n",
    963 				      phex_nz (tmpulongest,
    964 					       tdep->size_ulong),
    965 				      tdep->size_int);
    966 			return -1;
    967 		      }
    968 		    tmpaddr
    969 		      = (CORE_ADDR) extract_unsigned_integer (a,
    970 							      tdep->size_ulong,
    971 							      byte_order);
    972 		    tmpint = (int) extract_unsigned_integer (av,
    973 							     tdep->size_int,
    974 							     byte_order);
    975 		    if (record_full_arch_list_add_mem (tmpaddr, tmpint))
    976 		      return -1;
    977 		    a += tdep->size_ulong;
    978 		    tmpaddr
    979 		      = (CORE_ADDR) extract_unsigned_integer (a,
    980 							      tdep->size_ulong,
    981 							      byte_order);
    982 		    if (record_full_arch_list_add_mem (tmpaddr,
    983 						       tdep->size_int))
    984 		      return -1;
    985 		  }
    986 	      }
    987 	  }
    988 	  break;
    989 	case RECORD_SYS_SENDMSG:
    990 	  break;
    991 	case RECORD_SYS_RECVMSG:
    992 	  {
    993 	    gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong);
    994 
    995 	    regcache_raw_read_unsigned (regcache, tdep->arg2,
    996 					&tmpulongest);
    997 	    if (tmpulongest)
    998 	      {
    999 		tmpulongest += tdep->size_ulong;
   1000 		if (target_read_memory ((CORE_ADDR) tmpulongest, a,
   1001 					tdep->size_ulong))
   1002 		  {
   1003 		    if (record_debug)
   1004 		      gdb_printf (gdb_stdlog,
   1005 				  "Process record: error reading "
   1006 				  "memory at addr = 0x%s len = %d.\n",
   1007 				  OUTPUT_REG (tmpulongest, tdep->arg2),
   1008 				  tdep->size_ulong);
   1009 		    return -1;
   1010 		  }
   1011 		tmpulongest = extract_unsigned_integer (a, tdep->size_ulong,
   1012 							byte_order);
   1013 		if (record_linux_msghdr (regcache, tdep, tmpulongest))
   1014 		  return -1;
   1015 	      }
   1016 	  }
   1017 	  break;
   1018 	default:
   1019 	  gdb_printf (gdb_stderr,
   1020 		      _("Process record and replay target "
   1021 			"doesn't support socketcall call 0x%s\n"),
   1022 		      OUTPUT_REG (tmpulongest, tdep->arg1));
   1023 	  return -1;
   1024 	  break;
   1025 	}
   1026       break;
   1027 
   1028     case gdb_sys_syslog:
   1029       break;
   1030 
   1031     case gdb_sys_setitimer:
   1032       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_itimerval))
   1033 	return -1;
   1034       break;
   1035 
   1036     case gdb_sys_getitimer:
   1037       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_itimerval))
   1038 	return -1;
   1039       break;
   1040 
   1041     case gdb_sys_newstat:
   1042     case gdb_sys_newlstat:
   1043     case gdb_sys_newfstat:
   1044       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_stat))
   1045 	return -1;
   1046       break;
   1047 
   1048     case gdb_sys_newfstatat:
   1049       regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
   1050       if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1051 					 tdep->size_stat))
   1052 	return -1;
   1053       break;
   1054 
   1055     case gdb_sys_statx:
   1056       regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
   1057       if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, 256))
   1058 	return -1;
   1059       break;
   1060 
   1061     case gdb_sys_uname:
   1062       if (record_mem_at_reg (regcache, tdep->arg1,
   1063 			     tdep->size_old_utsname))
   1064 	return -1;
   1065       break;
   1066 
   1067     case gdb_sys_iopl:
   1068     case gdb_sys_vhangup:
   1069     case gdb_sys_ni_syscall112:
   1070     case gdb_sys_vm86old:
   1071       break;
   1072 
   1073     case gdb_sys_wait4:
   1074       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_int)
   1075 	  || record_mem_at_reg (regcache, tdep->arg4, tdep->size_rusage))
   1076 	return -1;
   1077       break;
   1078 
   1079     case gdb_sys_swapoff:
   1080       break;
   1081 
   1082     case gdb_sys_sysinfo:
   1083       if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_sysinfo))
   1084 	return -1;
   1085       break;
   1086 
   1087     case gdb_sys_shmget:
   1088     case gdb_sys_semget:
   1089     case gdb_sys_semop:
   1090     case gdb_sys_msgget:
   1091       /* XXX maybe need do some record works with sys_shmdt.  */
   1092     case gdb_sys_shmdt:
   1093     case gdb_sys_msgsnd:
   1094     case gdb_sys_semtimedop:
   1095       break;
   1096 
   1097     case gdb_sys_shmat:
   1098       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_ulong))
   1099 	return -1;
   1100       break;
   1101 
   1102     case gdb_sys_shmctl:
   1103       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_shmid_ds))
   1104 	return -1;
   1105       break;
   1106 
   1107       /* XXX sys_semctl 525 still not supported.  */
   1108       /* sys_semctl */
   1109 
   1110     case gdb_sys_msgrcv:
   1111       {
   1112 	LONGEST l;
   1113 
   1114 	regcache_raw_read_signed (regcache, tdep->arg3, &l);
   1115 	tmpint = l + tdep->size_long;
   1116 	if (record_mem_at_reg (regcache, tdep->arg2, tmpint))
   1117 	  return -1;
   1118       }
   1119       break;
   1120 
   1121     case gdb_sys_msgctl:
   1122       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_msqid_ds))
   1123 	return -1;
   1124       break;
   1125 
   1126     case gdb_sys_ipc:
   1127       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
   1128       tmpulongest &= 0xffff;
   1129       switch (tmpulongest)
   1130 	{
   1131 	case RECORD_SEMOP:
   1132 	case RECORD_SEMGET:
   1133 	case RECORD_SEMTIMEDOP:
   1134 	case RECORD_MSGSND:
   1135 	case RECORD_MSGGET:
   1136 	  /* XXX maybe need do some record works with RECORD_SHMDT.  */
   1137 	case RECORD_SHMDT:
   1138 	case RECORD_SHMGET:
   1139 	  break;
   1140 	case RECORD_MSGRCV:
   1141 	  {
   1142 	    LONGEST second;
   1143 
   1144 	    regcache_raw_read_signed (regcache, tdep->arg3, &second);
   1145 	    tmpint = (int) second + tdep->size_long;
   1146 	    if (record_mem_at_reg (regcache, tdep->arg5, tmpint))
   1147 	      return -1;
   1148 	  }
   1149 	  break;
   1150 	case RECORD_MSGCTL:
   1151 	  if (record_mem_at_reg (regcache, tdep->arg5,
   1152 				 tdep->size_msqid_ds))
   1153 	    return -1;
   1154 	  break;
   1155 	case RECORD_SHMAT:
   1156 	  if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_ulong))
   1157 	    return -1;
   1158 	  break;
   1159 	case RECORD_SHMCTL:
   1160 	  if (record_mem_at_reg (regcache, tdep->arg5,
   1161 				 tdep->size_shmid_ds))
   1162 	    return -1;
   1163 	  break;
   1164 	default:
   1165 	  /* XXX RECORD_SEMCTL still not supported.  */
   1166 	  gdb_printf (gdb_stderr,
   1167 		      _("Process record and replay target doesn't "
   1168 			"support ipc number %s\n"),
   1169 		      pulongest (tmpulongest));
   1170 	  break;
   1171 	}
   1172       break;
   1173 
   1174     case gdb_sys_fsync:
   1175     case gdb_sys_sigreturn:
   1176     case gdb_sys_clone:
   1177     case gdb_sys_setdomainname:
   1178       break;
   1179 
   1180     case gdb_sys_newuname:
   1181       if (record_mem_at_reg (regcache, tdep->arg1,
   1182 			     tdep->size_new_utsname))
   1183 	return -1;
   1184       break;
   1185 
   1186     case gdb_sys_modify_ldt:
   1187       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
   1188       if (tmpulongest == 0 || tmpulongest == 2)
   1189 	{
   1190 	  ULONGEST bytecount;
   1191 
   1192 	  regcache_raw_read_unsigned (regcache, tdep->arg3, &bytecount);
   1193 	  if (record_mem_at_reg (regcache, tdep->arg2, (int) bytecount))
   1194 	    return -1;
   1195 	}
   1196       break;
   1197 
   1198     case gdb_sys_adjtimex:
   1199       if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_timex))
   1200 	return -1;
   1201       break;
   1202 
   1203     case gdb_sys_mprotect:
   1204       break;
   1205 
   1206     case gdb_sys_sigprocmask:
   1207       if (record_mem_at_reg (regcache, tdep->arg3,
   1208 			     tdep->size_old_sigset_t))
   1209 	return -1;
   1210       break;
   1211 
   1212     case gdb_sys_ni_syscall127:
   1213     case gdb_sys_init_module:
   1214     case gdb_sys_delete_module:
   1215     case gdb_sys_ni_syscall130:
   1216       break;
   1217 
   1218     case gdb_sys_quotactl:
   1219       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
   1220       switch (tmpulongest)
   1221 	{
   1222 	case RECORD_Q_GETFMT:
   1223 	  /* __u32 */
   1224 	  if (record_mem_at_reg (regcache, tdep->arg4, 4))
   1225 	    return -1;
   1226 	  break;
   1227 	case RECORD_Q_GETINFO:
   1228 	  if (record_mem_at_reg (regcache, tdep->arg4,
   1229 				 tdep->size_mem_dqinfo))
   1230 	    return -1;
   1231 	  break;
   1232 	case RECORD_Q_GETQUOTA:
   1233 	  if (record_mem_at_reg (regcache, tdep->arg4,
   1234 				 tdep->size_if_dqblk))
   1235 	    return -1;
   1236 	  break;
   1237 	case RECORD_Q_XGETQSTAT:
   1238 	case RECORD_Q_XGETQUOTA:
   1239 	  if (record_mem_at_reg (regcache, tdep->arg4,
   1240 				 tdep->size_fs_quota_stat))
   1241 	    return -1;
   1242 	  break;
   1243 	}
   1244       break;
   1245 
   1246     case gdb_sys_getpgid:
   1247     case gdb_sys_fchdir:
   1248     case gdb_sys_bdflush:
   1249       break;
   1250 
   1251     case gdb_sys_sysfs:
   1252       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
   1253       if (tmpulongest == 2)
   1254 	{
   1255 	  /*XXX the size of memory is not very clear.  */
   1256 	  if (record_mem_at_reg (regcache, tdep->arg3, 10))
   1257 	    return -1;
   1258 	}
   1259       break;
   1260 
   1261     case gdb_sys_personality:
   1262     case gdb_sys_ni_syscall137:
   1263     case gdb_sys_setfsuid16:
   1264     case gdb_sys_setfsgid16:
   1265       break;
   1266 
   1267     case gdb_sys_llseek:
   1268       if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_loff_t))
   1269 	return -1;
   1270       break;
   1271 
   1272     case gdb_sys_getdents:
   1273     case gdb_sys_getdents64:
   1274       regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
   1275       if (record_mem_at_reg (regcache, tdep->arg2, tmpulongest))
   1276 	return -1;
   1277       break;
   1278 
   1279     case gdb_sys_select:
   1280       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_fd_set)
   1281 	  || record_mem_at_reg (regcache, tdep->arg3, tdep->size_fd_set)
   1282 	  || record_mem_at_reg (regcache, tdep->arg4, tdep->size_fd_set)
   1283 	  || record_mem_at_reg (regcache, tdep->arg5, tdep->size_timeval))
   1284 	return -1;
   1285       break;
   1286 
   1287     case gdb_sys_flock:
   1288     case gdb_sys_msync:
   1289       break;
   1290 
   1291     case gdb_sys_readv:
   1292       {
   1293 	ULONGEST vec, vlen;
   1294 
   1295 	regcache_raw_read_unsigned (regcache, tdep->arg2, &vec);
   1296 	if (vec)
   1297 	  {
   1298 	    gdb_byte *iov = (gdb_byte *) alloca (tdep->size_iovec);
   1299 
   1300 	    regcache_raw_read_unsigned (regcache, tdep->arg3, &vlen);
   1301 	    for (tmpulongest = 0; tmpulongest < vlen; tmpulongest++)
   1302 	      {
   1303 		if (target_read_memory ((CORE_ADDR) vec, iov,
   1304 					tdep->size_iovec))
   1305 		  {
   1306 		    if (record_debug)
   1307 		      gdb_printf (gdb_stdlog,
   1308 				  "Process record: error reading "
   1309 				  "memory at addr = 0x%s len = %d.\n",
   1310 				  OUTPUT_REG (vec, tdep->arg2),
   1311 				  tdep->size_iovec);
   1312 		    return -1;
   1313 		  }
   1314 		tmpaddr
   1315 		  = (CORE_ADDR) extract_unsigned_integer (iov,
   1316 							  tdep->size_pointer,
   1317 							  byte_order);
   1318 		tmpint
   1319 		  = (int) extract_unsigned_integer (iov + tdep->size_pointer,
   1320 						    tdep->size_size_t,
   1321 						    byte_order);
   1322 		if (record_full_arch_list_add_mem (tmpaddr, tmpint))
   1323 		  return -1;
   1324 		vec += tdep->size_iovec;
   1325 	      }
   1326 	  }
   1327       }
   1328       break;
   1329 
   1330     case gdb_sys_writev:
   1331     case gdb_sys_getsid:
   1332     case gdb_sys_fdatasync:
   1333     case gdb_sys_sysctl:
   1334     case gdb_sys_mlock:
   1335     case gdb_sys_munlock:
   1336     case gdb_sys_mlockall:
   1337     case gdb_sys_munlockall:
   1338     case gdb_sys_sched_setparam:
   1339       break;
   1340 
   1341     case gdb_sys_sched_getparam:
   1342       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_int))
   1343 	return -1;
   1344       break;
   1345 
   1346     case gdb_sys_sched_setscheduler:
   1347     case gdb_sys_sched_getscheduler:
   1348     case gdb_sys_sched_yield:
   1349     case gdb_sys_sched_get_priority_max:
   1350     case gdb_sys_sched_get_priority_min:
   1351       break;
   1352 
   1353     case gdb_sys_sched_rr_get_interval:
   1354     case gdb_sys_nanosleep:
   1355       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_timespec))
   1356 	return -1;
   1357       break;
   1358 
   1359     case gdb_sys_mremap:
   1360     case gdb_sys_setresuid16:
   1361       break;
   1362 
   1363     case gdb_sys_getresuid16:
   1364       if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_old_uid_t)
   1365 	  || record_mem_at_reg (regcache, tdep->arg2,
   1366 				tdep->size_old_uid_t)
   1367 	  || record_mem_at_reg (regcache, tdep->arg3,
   1368 				tdep->size_old_uid_t))
   1369 	return -1;
   1370       break;
   1371 
   1372     case gdb_sys_vm86:
   1373     case gdb_sys_ni_syscall167:
   1374       break;
   1375 
   1376     case gdb_sys_poll:
   1377       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
   1378       if (tmpulongest)
   1379 	{
   1380 	  ULONGEST nfds;
   1381 
   1382 	  regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds);
   1383 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1384 					     tdep->size_pollfd * nfds))
   1385 	    return -1;
   1386 	}
   1387       break;
   1388 
   1389     case gdb_sys_nfsservctl:
   1390       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
   1391       if (tmpulongest == 7 || tmpulongest == 8)
   1392 	{
   1393 	  int rsize;
   1394 
   1395 	  if (tmpulongest == 7)
   1396 	    rsize = tdep->size_NFS_FHSIZE;
   1397 	  else
   1398 	    rsize = tdep->size_knfsd_fh;
   1399 	  if (record_mem_at_reg (regcache, tdep->arg3, rsize))
   1400 	    return -1;
   1401 	}
   1402       break;
   1403 
   1404     case gdb_sys_setresgid16:
   1405       break;
   1406 
   1407     case gdb_sys_getresgid16:
   1408       if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_old_gid_t)
   1409 	  || record_mem_at_reg (regcache, tdep->arg2,
   1410 				tdep->size_old_gid_t)
   1411 	  || record_mem_at_reg (regcache, tdep->arg3,
   1412 				tdep->size_old_gid_t))
   1413 	return -1;
   1414       break;
   1415 
   1416     case gdb_sys_prctl:
   1417       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
   1418       switch (tmpulongest)
   1419 	{
   1420 	case 2:
   1421 	  if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_int))
   1422 	    return -1;
   1423 	  break;
   1424 	case 16:
   1425 	  if (record_mem_at_reg (regcache, tdep->arg2,
   1426 				 tdep->size_TASK_COMM_LEN))
   1427 	    return -1;
   1428 	  break;
   1429 	}
   1430       break;
   1431 
   1432     case gdb_sys_rt_sigreturn:
   1433       break;
   1434 
   1435     case gdb_sys_rt_sigaction:
   1436       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_sigaction))
   1437 	return -1;
   1438       break;
   1439 
   1440     case gdb_sys_rt_sigprocmask:
   1441       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_sigset_t))
   1442 	return -1;
   1443       break;
   1444 
   1445     case gdb_sys_rt_sigpending:
   1446       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
   1447       if (tmpulongest)
   1448 	{
   1449 	  ULONGEST sigsetsize;
   1450 
   1451 	  regcache_raw_read_unsigned (regcache, tdep->arg2,&sigsetsize);
   1452 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1453 					     (int) sigsetsize))
   1454 	    return -1;
   1455 	}
   1456       break;
   1457 
   1458     case gdb_sys_rt_sigtimedwait:
   1459       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_siginfo_t))
   1460 	return -1;
   1461       break;
   1462 
   1463     case gdb_sys_rt_sigqueueinfo:
   1464     case gdb_sys_rt_sigsuspend:
   1465       break;
   1466 
   1467     case gdb_sys_pread64:
   1468       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
   1469       if (tmpulongest)
   1470 	{
   1471 	  ULONGEST count;
   1472 
   1473 	  regcache_raw_read_unsigned (regcache, tdep->arg3,&count);
   1474 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1475 					     (int) count))
   1476 	    return -1;
   1477 	}
   1478       break;
   1479 
   1480     case gdb_sys_pwrite64:
   1481     case gdb_sys_chown16:
   1482       break;
   1483 
   1484     case gdb_sys_getcwd:
   1485       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
   1486       if (tmpulongest)
   1487 	{
   1488 	  ULONGEST size;
   1489 
   1490 	  regcache_raw_read_unsigned (regcache, tdep->arg2, &size);
   1491 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1492 					     (int) size))
   1493 	    return -1;
   1494 	}
   1495       break;
   1496 
   1497     case gdb_sys_capget:
   1498       if (record_mem_at_reg (regcache, tdep->arg2,
   1499 			     tdep->size_cap_user_data_t))
   1500 	return -1;
   1501       break;
   1502 
   1503     case gdb_sys_capset:
   1504       break;
   1505 
   1506     case gdb_sys_sigaltstack:
   1507       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_stack_t))
   1508 	return -1;
   1509       break;
   1510 
   1511     case gdb_sys_sendfile:
   1512       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_off_t))
   1513 	return -1;
   1514       break;
   1515 
   1516     case gdb_sys_ni_syscall188:
   1517     case gdb_sys_ni_syscall189:
   1518     case gdb_sys_vfork:
   1519       break;
   1520 
   1521     case gdb_sys_getrlimit:
   1522       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_rlimit))
   1523 	return -1;
   1524       break;
   1525 
   1526     case gdb_sys_mmap2:
   1527       break;
   1528 
   1529     case gdb_sys_truncate64:
   1530     case gdb_sys_ftruncate64:
   1531       break;
   1532 
   1533     case gdb_sys_stat64:
   1534     case gdb_sys_lstat64:
   1535     case gdb_sys_fstat64:
   1536       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_stat64))
   1537 	return -1;
   1538       break;
   1539 
   1540     case gdb_sys_lchown:
   1541     case gdb_sys_getuid:
   1542     case gdb_sys_getgid:
   1543     case gdb_sys_geteuid:
   1544     case gdb_sys_getegid:
   1545     case gdb_sys_setreuid:
   1546     case gdb_sys_setregid:
   1547       break;
   1548 
   1549     case gdb_sys_getgroups:
   1550       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
   1551       if (tmpulongest)
   1552 	{
   1553 	  ULONGEST gidsetsize;
   1554 
   1555 	  regcache_raw_read_unsigned (regcache, tdep->arg1,
   1556 				      &gidsetsize);
   1557 	  tmpint = tdep->size_gid_t * (int) gidsetsize;
   1558 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint))
   1559 	    return -1;
   1560 	}
   1561       break;
   1562 
   1563     case gdb_sys_setgroups:
   1564     case gdb_sys_fchown:
   1565     case gdb_sys_setresuid:
   1566       break;
   1567 
   1568     case gdb_sys_getresuid:
   1569       if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_uid_t)
   1570 	  || record_mem_at_reg (regcache, tdep->arg2, tdep->size_uid_t)
   1571 	  || record_mem_at_reg (regcache, tdep->arg3, tdep->size_uid_t))
   1572 	return -1;
   1573       break;
   1574 
   1575     case gdb_sys_setresgid:
   1576       break;
   1577 
   1578     case gdb_sys_getresgid:
   1579       if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_gid_t)
   1580 	  || record_mem_at_reg (regcache, tdep->arg2, tdep->size_gid_t)
   1581 	  || record_mem_at_reg (regcache, tdep->arg3, tdep->size_gid_t))
   1582 	return -1;
   1583       break;
   1584 
   1585     case gdb_sys_chown:
   1586     case gdb_sys_setuid:
   1587     case gdb_sys_setgid:
   1588     case gdb_sys_setfsuid:
   1589     case gdb_sys_setfsgid:
   1590     case gdb_sys_pivot_root:
   1591       break;
   1592 
   1593     case gdb_sys_mincore:
   1594       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_PAGE_SIZE))
   1595 	return -1;
   1596       break;
   1597 
   1598     case gdb_sys_madvise:
   1599       break;
   1600 
   1601     case gdb_sys_fcntl64:
   1602       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
   1603       if (tmpulongest == tdep->fcntl_F_GETLK64)
   1604 	{
   1605 	  if (record_mem_at_reg (regcache, tdep->arg3,
   1606 				 tdep->size_flock64))
   1607 	    return -1;
   1608 	}
   1609       else if (tmpulongest != tdep->fcntl_F_SETLK64
   1610 	       && tmpulongest != tdep->fcntl_F_SETLKW64)
   1611 	{
   1612 	  goto sys_fcntl;
   1613 	}
   1614       break;
   1615 
   1616     case gdb_sys_ni_syscall222:
   1617     case gdb_sys_ni_syscall223:
   1618     case gdb_sys_gettid:
   1619     case gdb_sys_readahead:
   1620     case gdb_sys_setxattr:
   1621     case gdb_sys_lsetxattr:
   1622     case gdb_sys_fsetxattr:
   1623       break;
   1624 
   1625     case gdb_sys_getxattr:
   1626     case gdb_sys_lgetxattr:
   1627     case gdb_sys_fgetxattr:
   1628       regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
   1629       if (tmpulongest)
   1630 	{
   1631 	  ULONGEST size;
   1632 
   1633 	  regcache_raw_read_unsigned (regcache, tdep->arg4, &size);
   1634 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1635 					     (int) size))
   1636 	    return -1;
   1637 	}
   1638       break;
   1639 
   1640     case gdb_sys_listxattr:
   1641     case gdb_sys_llistxattr:
   1642     case gdb_sys_flistxattr:
   1643       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
   1644       if (tmpulongest)
   1645 	{
   1646 	  ULONGEST size;
   1647 
   1648 	  regcache_raw_read_unsigned (regcache, tdep->arg3, &size);
   1649 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1650 					     (int) size))
   1651 	    return -1;
   1652 	}
   1653       break;
   1654 
   1655     case gdb_sys_removexattr:
   1656     case gdb_sys_lremovexattr:
   1657     case gdb_sys_fremovexattr:
   1658     case gdb_sys_tkill:
   1659       break;
   1660 
   1661     case gdb_sys_sendfile64:
   1662       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_loff_t))
   1663 	return -1;
   1664       break;
   1665 
   1666     case gdb_sys_futex:
   1667     case gdb_sys_sched_setaffinity:
   1668       break;
   1669 
   1670     case gdb_sys_sched_getaffinity:
   1671       regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
   1672       if (tmpulongest)
   1673 	{
   1674 	  ULONGEST len;
   1675 
   1676 	  regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
   1677 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1678 					     (int) len))
   1679 	    return -1;
   1680 	}
   1681       break;
   1682 
   1683     case gdb_sys_set_thread_area:
   1684       if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int))
   1685 	return -1;
   1686       break;
   1687 
   1688     case gdb_sys_get_thread_area:
   1689       if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_user_desc))
   1690 	return -1;
   1691       break;
   1692 
   1693     case gdb_sys_io_setup:
   1694       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_long))
   1695 	return -1;
   1696       break;
   1697 
   1698     case gdb_sys_io_destroy:
   1699       break;
   1700 
   1701     case gdb_sys_io_getevents:
   1702       regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
   1703       if (tmpulongest)
   1704 	{
   1705 	  ULONGEST nr;
   1706 
   1707 	  regcache_raw_read_unsigned (regcache, tdep->arg3, &nr);
   1708 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1709 					     nr * tdep->size_io_event))
   1710 	    return -1;
   1711 	}
   1712       break;
   1713 
   1714     case gdb_sys_io_submit:
   1715       regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
   1716       if (tmpulongest)
   1717 	{
   1718 	  ULONGEST nr, i;
   1719 	  gdb_byte *iocbp;
   1720 
   1721 	  regcache_raw_read_unsigned (regcache, tdep->arg2, &nr);
   1722 	  iocbp = (gdb_byte *) alloca (nr * tdep->size_pointer);
   1723 	  if (target_read_memory ((CORE_ADDR) tmpulongest, iocbp,
   1724 				  nr * tdep->size_pointer))
   1725 	    {
   1726 	      if (record_debug)
   1727 		gdb_printf (gdb_stdlog,
   1728 			    "Process record: error reading memory "
   1729 			    "at addr = 0x%s len = %u.\n",
   1730 			    OUTPUT_REG (tmpulongest, tdep->arg2),
   1731 			    (int) (nr * tdep->size_pointer));
   1732 	      return -1;
   1733 	    }
   1734 	  for (i = 0; i < nr; i++)
   1735 	    {
   1736 	      tmpaddr
   1737 		= (CORE_ADDR) extract_unsigned_integer (iocbp,
   1738 							tdep->size_pointer,
   1739 							byte_order);
   1740 	      if (record_full_arch_list_add_mem (tmpaddr, tdep->size_iocb))
   1741 		return -1;
   1742 	      iocbp += tdep->size_pointer;
   1743 	    }
   1744 	}
   1745       break;
   1746 
   1747     case gdb_sys_io_cancel:
   1748       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_io_event))
   1749 	return -1;
   1750       break;
   1751 
   1752     case gdb_sys_fadvise64:
   1753     case gdb_sys_ni_syscall251:
   1754       break;
   1755 
   1756     case gdb_sys_exit_group:
   1757       if (yquery (_("The next instruction is syscall exit_group.  "
   1758 		    "It will make the program exit.  "
   1759 		    "Do you want to stop the program?")))
   1760 	return 1;
   1761       break;
   1762 
   1763     case gdb_sys_lookup_dcookie:
   1764       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
   1765       if (tmpulongest)
   1766 	{
   1767 	  ULONGEST len;
   1768 
   1769 	  regcache_raw_read_unsigned (regcache, tdep->arg3, &len);
   1770 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1771 					     (int) len))
   1772 	    return -1;
   1773 	}
   1774       break;
   1775 
   1776     case gdb_sys_epoll_create:
   1777     case gdb_sys_epoll_ctl:
   1778       break;
   1779 
   1780     case gdb_sys_epoll_wait:
   1781       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
   1782       if (tmpulongest)
   1783 	{
   1784 	  ULONGEST maxevents;
   1785 
   1786 	  regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents);
   1787 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1788 					     (maxevents
   1789 					      * tdep->size_epoll_event)))
   1790 	    return -1;
   1791 	}
   1792       break;
   1793 
   1794     case gdb_sys_remap_file_pages:
   1795     case gdb_sys_set_tid_address:
   1796       break;
   1797 
   1798     case gdb_sys_timer_create:
   1799       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_int))
   1800 	return -1;
   1801       break;
   1802 
   1803     case gdb_sys_timer_settime:
   1804       if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_itimerspec))
   1805 	return -1;
   1806       break;
   1807 
   1808     case gdb_sys_timer_gettime:
   1809       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_itimerspec))
   1810 	return -1;
   1811       break;
   1812 
   1813     case gdb_sys_timer_getoverrun:
   1814     case gdb_sys_timer_delete:
   1815     case gdb_sys_clock_settime:
   1816       break;
   1817 
   1818     case gdb_sys_clock_gettime:
   1819       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_timespec))
   1820 	return -1;
   1821       break;
   1822 
   1823     case gdb_sys_clock_gettime64:
   1824       /* Size of struct __timespec64 is 16.  */
   1825       if (record_mem_at_reg (regcache, tdep->arg2, 16))
   1826 	return -1;
   1827       break;
   1828 
   1829     case gdb_sys_clock_getres:
   1830       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_timespec))
   1831 	return -1;
   1832       break;
   1833 
   1834     case gdb_sys_clock_nanosleep:
   1835       if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_timespec))
   1836 	return -1;
   1837       break;
   1838 
   1839     case gdb_sys_statfs64:
   1840     case gdb_sys_fstatfs64:
   1841       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_statfs64))
   1842 	return -1;
   1843       break;
   1844 
   1845     case gdb_sys_tgkill:
   1846     case gdb_sys_utimes:
   1847     case gdb_sys_fadvise64_64:
   1848     case gdb_sys_ni_syscall273:
   1849     case gdb_sys_mbind:
   1850       break;
   1851 
   1852     case gdb_sys_get_mempolicy:
   1853       if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int))
   1854 	return -1;
   1855       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
   1856       if (tmpulongest)
   1857 	{
   1858 	  ULONGEST maxnode;
   1859 
   1860 	  regcache_raw_read_unsigned (regcache, tdep->arg3, &maxnode);
   1861 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1862 					     maxnode * tdep->size_long))
   1863 	    return -1;
   1864 	}
   1865       break;
   1866 
   1867     case gdb_sys_set_mempolicy:
   1868     case gdb_sys_mq_open:
   1869     case gdb_sys_mq_unlink:
   1870     case gdb_sys_mq_timedsend:
   1871       break;
   1872 
   1873     case gdb_sys_mq_timedreceive:
   1874       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
   1875       if (tmpulongest)
   1876 	{
   1877 	  ULONGEST msg_len;
   1878 
   1879 	  regcache_raw_read_unsigned (regcache, tdep->arg3, &msg_len);
   1880 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1881 					     (int) msg_len))
   1882 	    return -1;
   1883 	}
   1884       if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_int))
   1885 	return -1;
   1886       break;
   1887 
   1888     case gdb_sys_mq_notify:
   1889       break;
   1890 
   1891     case gdb_sys_mq_getsetattr:
   1892       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_mq_attr))
   1893 	return -1;
   1894       break;
   1895 
   1896     case gdb_sys_kexec_load:
   1897       break;
   1898 
   1899     case gdb_sys_waitid:
   1900       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_siginfo_t)
   1901 	  || record_mem_at_reg (regcache, tdep->arg5, tdep->size_rusage))
   1902 	return -1;
   1903       break;
   1904 
   1905     case gdb_sys_ni_syscall285:
   1906     case gdb_sys_add_key:
   1907     case gdb_sys_request_key:
   1908       break;
   1909 
   1910     case gdb_sys_keyctl:
   1911       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
   1912       if (tmpulongest == 6 || tmpulongest == 11)
   1913 	{
   1914 	  regcache_raw_read_unsigned (regcache, tdep->arg3,
   1915 				      &tmpulongest);
   1916 	  if (tmpulongest)
   1917 	    {
   1918 	      ULONGEST buflen;
   1919 
   1920 	      regcache_raw_read_unsigned (regcache, tdep->arg4, &buflen);
   1921 	      if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1922 						 (int) buflen))
   1923 		return -1;
   1924 	    }
   1925 	}
   1926       break;
   1927 
   1928     case gdb_sys_ioprio_set:
   1929     case gdb_sys_ioprio_get:
   1930     case gdb_sys_inotify_init:
   1931     case gdb_sys_inotify_add_watch:
   1932     case gdb_sys_inotify_rm_watch:
   1933     case gdb_sys_migrate_pages:
   1934     case gdb_sys_openat:
   1935     case gdb_sys_mkdirat:
   1936     case gdb_sys_mknodat:
   1937     case gdb_sys_fchownat:
   1938     case gdb_sys_futimesat:
   1939       break;
   1940 
   1941     case gdb_sys_fstatat64:
   1942       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_stat64))
   1943 	return -1;
   1944       break;
   1945 
   1946     case gdb_sys_unlinkat:
   1947     case gdb_sys_renameat:
   1948     case gdb_sys_linkat:
   1949     case gdb_sys_symlinkat:
   1950       break;
   1951 
   1952     case gdb_sys_readlinkat:
   1953       regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
   1954       if (tmpulongest)
   1955 	{
   1956 	  ULONGEST bufsiz;
   1957 
   1958 	  regcache_raw_read_unsigned (regcache, tdep->arg4, &bufsiz);
   1959 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1960 					     (int) bufsiz))
   1961 	    return -1;
   1962 	}
   1963       break;
   1964 
   1965     case gdb_sys_fchmodat:
   1966     case gdb_sys_faccessat:
   1967       break;
   1968 
   1969     case gdb_sys_pselect6:
   1970       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_fd_set)
   1971 	  || record_mem_at_reg (regcache, tdep->arg3, tdep->size_fd_set)
   1972 	  || record_mem_at_reg (regcache, tdep->arg4, tdep->size_fd_set)
   1973 	  || record_mem_at_reg (regcache, tdep->arg5, tdep->size_timespec))
   1974 	return -1;
   1975       break;
   1976 
   1977     case gdb_sys_ppoll:
   1978       regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
   1979       if (tmpulongest)
   1980 	{
   1981 	  ULONGEST nfds;
   1982 
   1983 	  regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds);
   1984 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   1985 					     tdep->size_pollfd * nfds))
   1986 	    return -1;
   1987 	}
   1988       if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_timespec))
   1989 	return -1;
   1990       break;
   1991 
   1992     case gdb_sys_unshare:
   1993     case gdb_sys_set_robust_list:
   1994       break;
   1995 
   1996     case gdb_sys_get_robust_list:
   1997       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_int)
   1998 	  || record_mem_at_reg (regcache, tdep->arg3, tdep->size_int))
   1999 	return -1;
   2000       break;
   2001 
   2002     case gdb_sys_splice:
   2003       if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_loff_t)
   2004 	  || record_mem_at_reg (regcache, tdep->arg4, tdep->size_loff_t))
   2005 	return -1;
   2006       break;
   2007 
   2008     case gdb_sys_sync_file_range:
   2009     case gdb_sys_tee:
   2010     case gdb_sys_vmsplice:
   2011       break;
   2012 
   2013     case gdb_sys_move_pages:
   2014       regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
   2015       if (tmpulongest)
   2016 	{
   2017 	  ULONGEST nr_pages;
   2018 
   2019 	  regcache_raw_read_unsigned (regcache, tdep->arg2, &nr_pages);
   2020 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
   2021 					     nr_pages * tdep->size_int))
   2022 	    return -1;
   2023 	}
   2024       break;
   2025 
   2026     case gdb_sys_getcpu:
   2027       if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int)
   2028 	  || record_mem_at_reg (regcache, tdep->arg2, tdep->size_int)
   2029 	  || record_mem_at_reg (regcache, tdep->arg3,
   2030 				tdep->size_ulong * 2))
   2031 	return -1;
   2032       break;
   2033 
   2034     case gdb_sys_epoll_pwait:
   2035       regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
   2036       if (tmpulongest)
   2037 	{
   2038 	  ULONGEST maxevents;
   2039 
   2040 	  regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents);
   2041 	  tmpint = (int) maxevents * tdep->size_epoll_event;
   2042 	  if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint))
   2043 	    return -1;
   2044 	}
   2045       break;
   2046 
   2047     case gdb_sys_fallocate:
   2048     case gdb_sys_eventfd2:
   2049     case gdb_sys_epoll_create1:
   2050     case gdb_sys_dup3:
   2051       break;
   2052 
   2053     case gdb_sys_inotify_init1:
   2054       break;
   2055 
   2056     default:
   2057       gdb_printf (gdb_stderr,
   2058 		  _("Process record and replay target doesn't "
   2059 		    "support syscall number %d\n"), syscall);
   2060       return -1;
   2061       break;
   2062     }
   2063 
   2064   return 0;
   2065 }
   2066