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