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