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