Update copyright year in most headers.
[deliverable/binutils-gdb.git] / gdb / linux-record.c
1 /* Process record and replay target code for GNU/Linux.
2
3 Copyright (C) 2008, 2009, 2010 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 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;
250 }
251 break;
252
253 case gdb_sys_fork:
254 break;
255
256 case gdb_sys_read:
257 {
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;
263 }
264 break;
265
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:
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;
289 break;
290
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:
298 break;
299
300 case gdb_sys_ptrace:
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 }
311 break;
312
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:
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;
334 break;
335
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:
349 /* XXX Need to add a lot of support of other ioctl requests. */
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);
444 /* This syscall affects a char-size memory. */
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 }
494 else
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 }
501 break;
502
503 case gdb_sys_fcntl:
504 /* XXX */
505 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
506 sys_fcntl:
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 }
515 break;
516
517 case gdb_sys_ni_syscall56:
518 case gdb_sys_setpgid:
519 case gdb_sys_ni_syscall58:
520 break;
521
522 case gdb_sys_olduname:
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;
527 break;
528
529 case gdb_sys_umask:
530 case gdb_sys_chroot:
531 break;
532
533 case gdb_sys_ustat:
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;
538 break;
539
540 case gdb_sys_dup2:
541 case gdb_sys_getppid:
542 case gdb_sys_getpgrp:
543 case gdb_sys_setsid:
544 break;
545
546 case gdb_sys_sigaction:
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;
551 break;
552
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:
558 break;
559
560 case gdb_sys_sigpending:
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;
565 break;
566
567 case gdb_sys_sethostname:
568 case gdb_sys_setrlimit:
569 break;
570
571 case gdb_sys_old_getrlimit:
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;
576 break;
577
578 case gdb_sys_getrusage:
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;
583 break;
584
585 case gdb_sys_gettimeofday:
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;
594 break;
595
596 case gdb_sys_settimeofday:
597 break;
598
599 case gdb_sys_getgroups16:
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;
604 break;
605
606 case gdb_sys_setgroups16:
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;
611 break;
612
613 case gdb_old_select:
614 {
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 }
648 }
649 break;
650
651 case gdb_sys_symlink:
652 break;
653
654 case gdb_sys_readlink:
655 {
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;
662 }
663 break;
664
665 case gdb_sys_uselib:
666 case gdb_sys_swapon:
667 break;
668
669 case gdb_sys_reboot:
670 {
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;
680 }
681 break;
682
683 case gdb_old_readdir:
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;
688 break;
689
690 case gdb_old_mmap:
691 break;
692
693 case gdb_sys_munmap:
694 {
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;
710 }
711 break;
712
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:
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;
728 break;
729
730 case gdb_sys_ioperm:
731 break;
732
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:
741 break;
742
743 case gdb_sys_accept:
744 case gdb_sys_getsockname:
745 case gdb_sys_getpeername:
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
755 case gdb_sys_recvfrom:
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 }
763 case gdb_sys_recv:
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
773 case gdb_sys_recvmsg:
774 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
775 if (record_linux_msghdr (regcache, tdep, tmpulongest))
776 return -1;
777 break;
778
779 case gdb_sys_socketpair:
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
785 case gdb_sys_getsockopt:
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
814 case gdb_sys_socketcall:
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);
832 int addrlen;
833 gdb_byte *addrlenp;
834 ULONGEST len;
835
836 tmpulongest += tdep->size_ulong;
837 if (target_read_memory ((CORE_ADDR) tmpulongest, a,
838 tdep->size_ulong * 2))
839 {
840 if (record_debug)
841 fprintf_unfiltered (gdb_stdlog,
842 "Process record: error reading "
843 "memory at addr = 0x%s len = %d.\n",
844 OUTPUT_REG (tmpulongest, tdep->arg2),
845 tdep->size_ulong * 2);
846 return -1;
847 }
848 tmpulongest = extract_unsigned_integer (a,
849 tdep->size_ulong,
850 byte_order);
851 len = extract_unsigned_integer (a + tdep->size_ulong,
852 tdep->size_ulong, byte_order);
853 if (record_linux_sockaddr (regcache, tdep, tmpulongest, len))
854 return -1;
855 }
856 }
857 break;
858
859 case RECORD_SYS_SOCKETPAIR:
860 {
861 gdb_byte *a = alloca (tdep->size_ulong);
862 regcache_raw_read_unsigned (regcache, tdep->arg2,
863 &tmpulongest);
864 if (tmpulongest)
865 {
866 tmpulongest += tdep->size_ulong * 3;
867 if (target_read_memory ((CORE_ADDR) tmpulongest, a,
868 tdep->size_ulong))
869 {
870 if (record_debug)
871 fprintf_unfiltered (gdb_stdlog,
872 "Process record: error reading "
873 "memory at addr = 0x%s len = %d.\n",
874 OUTPUT_REG (tmpulongest, tdep->arg2),
875 tdep->size_ulong);
876 return -1;
877 }
878 tmpaddr
879 = (CORE_ADDR) extract_unsigned_integer (a, tdep->size_ulong,
880 byte_order);
881 if (record_arch_list_add_mem (tmpaddr, tdep->size_int))
882 return -1;
883 }
884 }
885 break;
886 case RECORD_SYS_SEND:
887 case RECORD_SYS_SENDTO:
888 break;
889 case RECORD_SYS_RECVFROM:
890 regcache_raw_read_unsigned (regcache, tdep->arg2,
891 &tmpulongest);
892 if (tmpulongest)
893 {
894 gdb_byte *a = alloca (tdep->size_ulong * 2);
895 int addrlen;
896 gdb_byte *addrlenp;
897 ULONGEST len;
898
899 tmpulongest += tdep->size_ulong * 4;
900 if (target_read_memory ((CORE_ADDR) tmpulongest, a,
901 tdep->size_ulong * 2))
902 {
903 if (record_debug)
904 fprintf_unfiltered (gdb_stdlog,
905 "Process record: error reading "
906 "memory at addr = 0x%s len = %d.\n",
907 OUTPUT_REG (tmpulongest, tdep->arg2),
908 tdep->size_ulong * 2);
909 return -1;
910 }
911 tmpulongest = extract_unsigned_integer (a, tdep->size_ulong,
912 byte_order);
913 len = extract_unsigned_integer (a + tdep->size_ulong,
914 tdep->size_ulong, byte_order);
915 if (record_linux_sockaddr (regcache, tdep, tmpulongest, len))
916 return -1;
917 }
918 case RECORD_SYS_RECV:
919 regcache_raw_read_unsigned (regcache, tdep->arg2,
920 &tmpulongest);
921 if (tmpulongest)
922 {
923 gdb_byte *a = alloca (tdep->size_ulong * 2);
924
925 tmpulongest += tdep->size_ulong;
926 if (target_read_memory ((CORE_ADDR) tmpulongest, a,
927 tdep->size_ulong))
928 {
929 if (record_debug)
930 fprintf_unfiltered (gdb_stdlog,
931 "Process record: error reading "
932 "memory at addr = 0x%s len = %d.\n",
933 OUTPUT_REG (tmpulongest, tdep->arg2),
934 tdep->size_ulong);
935 return -1;
936 }
937 tmpulongest = extract_unsigned_integer (a, tdep->size_ulong,
938 byte_order);
939 if (tmpulongest)
940 {
941 a += tdep->size_ulong;
942 tmpint = (int) extract_unsigned_integer (a, tdep->size_ulong,
943 byte_order);
944 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
945 tmpint))
946 return -1;
947 }
948 }
949 break;
950 case RECORD_SYS_SHUTDOWN:
951 case RECORD_SYS_SETSOCKOPT:
952 break;
953 case RECORD_SYS_GETSOCKOPT:
954 {
955 gdb_byte *a = alloca (tdep->size_ulong * 2);
956 gdb_byte *av = alloca (tdep->size_int);
957
958 regcache_raw_read_unsigned (regcache, tdep->arg2,
959 &tmpulongest);
960 if (tmpulongest)
961 {
962 tmpulongest += tdep->size_ulong * 3;
963 if (target_read_memory ((CORE_ADDR) tmpulongest, a,
964 tdep->size_ulong * 2))
965 {
966 if (record_debug)
967 fprintf_unfiltered (gdb_stdlog,
968 "Process record: error reading "
969 "memory at addr = 0x%s len = %d.\n",
970 OUTPUT_REG (tmpulongest, tdep->arg2),
971 tdep->size_ulong * 2);
972 return -1;
973 }
974 tmpulongest = extract_unsigned_integer (a + tdep->size_ulong,
975 tdep->size_ulong,
976 byte_order);
977 if (tmpulongest)
978 {
979 if (target_read_memory ((CORE_ADDR) tmpulongest, av,
980 tdep->size_int))
981 {
982 if (record_debug)
983 fprintf_unfiltered (gdb_stdlog,
984 "Process record: error reading "
985 "memory at addr = 0x%s "
986 "len = %d.\n",
987 phex_nz (tmpulongest,
988 tdep->size_ulong),
989 tdep->size_int);
990 return -1;
991 }
992 tmpaddr
993 = (CORE_ADDR) extract_unsigned_integer (a,
994 tdep->size_ulong,
995 byte_order);
996 tmpint = (int) extract_unsigned_integer (av,
997 tdep->size_int,
998 byte_order);
999 if (record_arch_list_add_mem (tmpaddr, tmpint))
1000 return -1;
1001 a += tdep->size_ulong;
1002 tmpaddr
1003 = (CORE_ADDR) extract_unsigned_integer (a,
1004 tdep->size_ulong,
1005 byte_order);
1006 if (record_arch_list_add_mem (tmpaddr, tdep->size_int))
1007 return -1;
1008 }
1009 }
1010 }
1011 break;
1012 case RECORD_SYS_SENDMSG:
1013 break;
1014 case RECORD_SYS_RECVMSG:
1015 {
1016 gdb_byte *a = alloca (tdep->size_ulong);
1017
1018 regcache_raw_read_unsigned (regcache, tdep->arg2,
1019 &tmpulongest);
1020 if (tmpulongest)
1021 {
1022 tmpulongest += tdep->size_ulong;
1023 if (target_read_memory ((CORE_ADDR) tmpulongest, a,
1024 tdep->size_ulong))
1025 {
1026 if (record_debug)
1027 fprintf_unfiltered (gdb_stdlog,
1028 "Process record: error reading "
1029 "memory at addr = 0x%s len = %d.\n",
1030 OUTPUT_REG (tmpulongest, tdep->arg2),
1031 tdep->size_ulong);
1032 return -1;
1033 }
1034 tmpulongest = extract_unsigned_integer (a, tdep->size_ulong,
1035 byte_order);
1036 if (record_linux_msghdr (regcache, tdep, tmpulongest))
1037 return -1;
1038 }
1039 }
1040 break;
1041 default:
1042 printf_unfiltered (_("Process record and replay target "
1043 "doesn't support socketcall call 0x%s\n"),
1044 OUTPUT_REG (tmpulongest, tdep->arg1));
1045 return -1;
1046 break;
1047 }
1048 break;
1049
1050 case gdb_sys_syslog:
1051 break;
1052
1053 case gdb_sys_setitimer:
1054 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1055 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1056 tdep->size_itimerval))
1057 return -1;
1058 break;
1059
1060 case gdb_sys_getitimer:
1061 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1062 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1063 tdep->size_itimerval))
1064 return -1;
1065 break;
1066
1067 case gdb_sys_newstat:
1068 case gdb_sys_newlstat:
1069 case gdb_sys_newfstat:
1070 case gdb_sys_newfstatat:
1071 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1072 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_stat))
1073 return -1;
1074 break;
1075
1076 case gdb_sys_uname:
1077 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1078 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1079 tdep->size_old_utsname))
1080 return -1;
1081 break;
1082
1083 case gdb_sys_iopl:
1084 case gdb_sys_vhangup:
1085 case gdb_sys_ni_syscall112:
1086 case gdb_sys_vm86old:
1087 break;
1088
1089 case gdb_sys_wait4:
1090 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1091 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1092 tdep->size_int))
1093 return -1;
1094 regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
1095 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1096 tdep->size_rusage))
1097 return -1;
1098 break;
1099
1100 case gdb_sys_swapoff:
1101 break;
1102
1103 case gdb_sys_sysinfo:
1104 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1105 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1106 tdep->size_sysinfo))
1107 return -1;
1108 break;
1109
1110 case gdb_sys_shmget:
1111 case gdb_sys_semget:
1112 case gdb_sys_semop:
1113 case gdb_sys_msgget:
1114 /* XXX maybe need do some record works with sys_shmdt. */
1115 case gdb_sys_shmdt:
1116 case gdb_sys_msgsnd:
1117 case gdb_sys_semtimedop:
1118 break;
1119
1120 case gdb_sys_shmat:
1121 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1122 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1123 tdep->size_ulong))
1124 return -1;
1125 break;
1126
1127 case gdb_sys_shmctl:
1128 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1129 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1130 tdep->size_shmid_ds))
1131 return -1;
1132 break;
1133
1134 /* XXX sys_semctl 525 still not supported. */
1135 /* sys_semctl */
1136
1137 case gdb_sys_msgrcv:
1138 {
1139 ULONGEST msgp;
1140 regcache_raw_read_signed (regcache, tdep->arg3, &tmpulongest);
1141 regcache_raw_read_unsigned (regcache, tdep->arg2, &msgp);
1142 tmpint = (int) tmpulongest + tdep->size_long;
1143 if (record_arch_list_add_mem ((CORE_ADDR) msgp, tmpint))
1144 return -1;
1145 }
1146 break;
1147
1148 case gdb_sys_msgctl:
1149 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1150 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1151 tdep->size_msqid_ds))
1152 return -1;
1153 break;
1154
1155 case gdb_sys_ipc:
1156 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1157 tmpulongest &= 0xffff;
1158 switch (tmpulongest)
1159 {
1160 case RECORD_SEMOP:
1161 case RECORD_SEMGET:
1162 case RECORD_SEMTIMEDOP:
1163 case RECORD_MSGSND:
1164 case RECORD_MSGGET:
1165 /* XXX maybe need do some record works with RECORD_SHMDT. */
1166 case RECORD_SHMDT:
1167 case RECORD_SHMGET:
1168 break;
1169 case RECORD_MSGRCV:
1170 {
1171 ULONGEST second;
1172 ULONGEST ptr;
1173 regcache_raw_read_signed (regcache, tdep->arg3, &second);
1174 regcache_raw_read_unsigned (regcache, tdep->arg5, &ptr);
1175 tmpint = (int) second + tdep->size_long;
1176 if (record_arch_list_add_mem ((CORE_ADDR) ptr, tmpint))
1177 return -1;
1178 }
1179 break;
1180 case RECORD_MSGCTL:
1181 regcache_raw_read_unsigned (regcache, tdep->arg5,
1182 &tmpulongest);
1183 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1184 tdep->size_msqid_ds))
1185 return -1;
1186 break;
1187 case RECORD_SHMAT:
1188 regcache_raw_read_unsigned (regcache, tdep->arg4,
1189 &tmpulongest);
1190 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1191 tdep->size_ulong))
1192 return -1;
1193 break;
1194 case RECORD_SHMCTL:
1195 regcache_raw_read_unsigned (regcache, tdep->arg5,
1196 &tmpulongest);
1197 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1198 tdep->size_shmid_ds))
1199 return -1;
1200 break;
1201 default:
1202 /* XXX RECORD_SEMCTL still not supported. */
1203 printf_unfiltered (_("Process record and replay target doesn't "
1204 "support ipc number %s\n"),
1205 pulongest (tmpulongest));
1206 break;
1207 }
1208 break;
1209
1210 case gdb_sys_fsync:
1211 case gdb_sys_sigreturn:
1212 case gdb_sys_clone:
1213 case gdb_sys_setdomainname:
1214 break;
1215
1216 case gdb_sys_newuname:
1217 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1218 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1219 tdep->size_new_utsname))
1220 return -1;
1221 break;
1222
1223 case gdb_sys_modify_ldt:
1224 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1225 if (tmpulongest == 0 || tmpulongest == 2)
1226 {
1227 ULONGEST ptr, bytecount;
1228 regcache_raw_read_unsigned (regcache, tdep->arg2, &ptr);
1229 regcache_raw_read_unsigned (regcache, tdep->arg3, &bytecount);
1230 if (record_arch_list_add_mem ((CORE_ADDR) ptr, (int) bytecount))
1231 return -1;
1232 }
1233 break;
1234
1235 case gdb_sys_adjtimex:
1236 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1237 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_timex))
1238 return -1;
1239 break;
1240
1241 case gdb_sys_mprotect:
1242 break;
1243
1244 case gdb_sys_sigprocmask:
1245 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1246 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1247 tdep->size_old_sigset_t))
1248 return -1;
1249 break;
1250
1251 case gdb_sys_ni_syscall127:
1252 case gdb_sys_init_module:
1253 case gdb_sys_delete_module:
1254 case gdb_sys_ni_syscall130:
1255 break;
1256
1257 case gdb_sys_quotactl:
1258 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1259 switch (tmpulongest)
1260 {
1261 case RECORD_Q_GETFMT:
1262 regcache_raw_read_unsigned (regcache, tdep->arg4,
1263 &tmpulongest);
1264 /* __u32 */
1265 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 4))
1266 return -1;
1267 break;
1268 case RECORD_Q_GETINFO:
1269 regcache_raw_read_unsigned (regcache, tdep->arg4,
1270 &tmpulongest);
1271 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1272 tdep->size_mem_dqinfo))
1273 return -1;
1274 break;
1275 case RECORD_Q_GETQUOTA:
1276 regcache_raw_read_unsigned (regcache, tdep->arg4,
1277 &tmpulongest);
1278 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1279 tdep->size_if_dqblk))
1280 return -1;
1281 break;
1282 case RECORD_Q_XGETQSTAT:
1283 case RECORD_Q_XGETQUOTA:
1284 regcache_raw_read_unsigned (regcache, tdep->arg4,
1285 &tmpulongest);
1286 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1287 tdep->size_fs_quota_stat))
1288 return -1;
1289 break;
1290 }
1291 break;
1292
1293 case gdb_sys_getpgid:
1294 case gdb_sys_fchdir:
1295 case gdb_sys_bdflush:
1296 break;
1297
1298 case gdb_sys_sysfs:
1299 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1300 if (tmpulongest == 2)
1301 {
1302 regcache_raw_read_unsigned (regcache, tdep->arg3,
1303 &tmpulongest);
1304 /*XXX the size of memory is not very clear. */
1305 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 10))
1306 return -1;
1307 }
1308 break;
1309
1310 case gdb_sys_personality:
1311 case gdb_sys_ni_syscall137:
1312 case gdb_sys_setfsuid16:
1313 case gdb_sys_setfsgid16:
1314 break;
1315
1316 case gdb_sys_llseek:
1317 regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
1318 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1319 tdep->size_loff_t))
1320 return -1;
1321 break;
1322
1323 case gdb_sys_getdents:
1324 {
1325 ULONGEST count;
1326 regcache_raw_read_unsigned (regcache, tdep->arg2,
1327 &tmpulongest);
1328 regcache_raw_read_unsigned (regcache, tdep->arg3, &count);
1329 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1330 tdep->size_dirent * count))
1331 return -1;
1332 }
1333 break;
1334
1335 case gdb_sys_select:
1336 regcache_raw_read_unsigned (regcache, tdep->arg2, &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->arg3, &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->arg4, &tmpulongest);
1345 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1346 tdep->size_fd_set))
1347 return -1;
1348 regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
1349 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1350 tdep->size_timeval))
1351 return -1;
1352 break;
1353
1354 case gdb_sys_flock:
1355 case gdb_sys_msync:
1356 break;
1357
1358 case gdb_sys_readv:
1359 {
1360 ULONGEST vec, vlen;
1361
1362 regcache_raw_read_unsigned (regcache, tdep->arg2, &vec);
1363 if (vec)
1364 {
1365 gdb_byte *iov = alloca (tdep->size_iovec);
1366
1367 regcache_raw_read_unsigned (regcache, tdep->arg3, &vlen);
1368 for (tmpulongest = 0; tmpulongest < vlen; tmpulongest++)
1369 {
1370 if (target_read_memory ((CORE_ADDR) vec, iov,
1371 tdep->size_iovec))
1372 {
1373 if (record_debug)
1374 fprintf_unfiltered (gdb_stdlog,
1375 "Process record: error reading "
1376 "memory at addr = 0x%s len = %d.\n",
1377 OUTPUT_REG (vec, tdep->arg2),
1378 tdep->size_iovec);
1379 return -1;
1380 }
1381 tmpaddr
1382 = (CORE_ADDR) extract_unsigned_integer (iov,
1383 tdep->size_pointer,
1384 byte_order);
1385 tmpint
1386 = (int) extract_unsigned_integer (iov + tdep->size_pointer,
1387 tdep->size_size_t,
1388 byte_order);
1389 if (record_arch_list_add_mem (tmpaddr, tmpint))
1390 return -1;
1391 vec += tdep->size_iovec;
1392 }
1393 }
1394 }
1395 break;
1396
1397 case gdb_sys_writev:
1398 case gdb_sys_getsid:
1399 case gdb_sys_fdatasync:
1400 case gdb_sys_sysctl:
1401 case gdb_sys_mlock:
1402 case gdb_sys_munlock:
1403 case gdb_sys_mlockall:
1404 case gdb_sys_munlockall:
1405 case gdb_sys_sched_setparam:
1406 break;
1407
1408 case gdb_sys_sched_getparam:
1409 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1410 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
1411 return -1;
1412 break;
1413
1414 case gdb_sys_sched_setscheduler:
1415 case gdb_sys_sched_getscheduler:
1416 case gdb_sys_sched_yield:
1417 case gdb_sys_sched_get_priority_max:
1418 case gdb_sys_sched_get_priority_min:
1419 break;
1420
1421 case gdb_sys_sched_rr_get_interval:
1422 case gdb_sys_nanosleep:
1423 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1424 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1425 tdep->size_timespec))
1426 return -1;
1427 break;
1428
1429 case gdb_sys_mremap:
1430 case gdb_sys_setresuid16:
1431 break;
1432
1433 case gdb_sys_getresuid16:
1434 regcache_raw_read_unsigned (regcache, tdep->arg1, &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->arg2, &tmpulongest);
1439 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1440 tdep->size_old_uid_t))
1441 return -1;
1442 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1443 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1444 tdep->size_old_uid_t))
1445 return -1;
1446 break;
1447
1448 case gdb_sys_vm86:
1449 case gdb_sys_ni_syscall167:
1450 break;
1451
1452 case gdb_sys_poll:
1453 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1454 if (tmpulongest)
1455 {
1456 ULONGEST nfds;
1457 regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds);
1458 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1459 tdep->size_pollfd * nfds))
1460 return -1;
1461 }
1462 break;
1463
1464 case gdb_sys_nfsservctl:
1465 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1466 if (tmpulongest == 7 || tmpulongest == 8)
1467 {
1468 int rsize;
1469 if (tmpulongest == 7)
1470 rsize = tdep->size_NFS_FHSIZE;
1471 else
1472 rsize = tdep->size_knfsd_fh;
1473 regcache_raw_read_unsigned (regcache, tdep->arg3,
1474 &tmpulongest);
1475 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, rsize))
1476 return -1;
1477 }
1478 break;
1479
1480 case gdb_sys_setresgid16:
1481 break;
1482
1483 case gdb_sys_getresgid16:
1484 regcache_raw_read_unsigned (regcache, tdep->arg1, &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->arg2, &tmpulongest);
1489 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1490 tdep->size_old_gid_t))
1491 return -1;
1492 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1493 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1494 tdep->size_old_gid_t))
1495 return -1;
1496 break;
1497
1498 case gdb_sys_prctl:
1499 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1500 switch (tmpulongest)
1501 {
1502 case 2:
1503 regcache_raw_read_unsigned (regcache, tdep->arg2,
1504 &tmpulongest);
1505 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1506 tdep->size_int))
1507 return -1;
1508 break;
1509 case 16:
1510 regcache_raw_read_unsigned (regcache, tdep->arg2,
1511 &tmpulongest);
1512 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1513 tdep->size_TASK_COMM_LEN))
1514 return -1;
1515 break;
1516 }
1517 break;
1518
1519 case gdb_sys_rt_sigreturn:
1520 break;
1521
1522 case gdb_sys_rt_sigaction:
1523 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1524 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1525 tdep->size_sigaction))
1526 return -1;
1527 break;
1528
1529 case gdb_sys_rt_sigprocmask:
1530 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1531 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1532 tdep->size_sigset_t))
1533 return -1;
1534 break;
1535
1536 case gdb_sys_rt_sigpending:
1537 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1538 if (tmpulongest)
1539 {
1540 ULONGEST sigsetsize;
1541 regcache_raw_read_unsigned (regcache, tdep->arg2,&sigsetsize);
1542 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1543 (int) sigsetsize))
1544 return -1;
1545 }
1546 break;
1547
1548 case gdb_sys_rt_sigtimedwait:
1549 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1550 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1551 tdep->size_siginfo_t))
1552 return -1;
1553 break;
1554
1555 case gdb_sys_rt_sigqueueinfo:
1556 case gdb_sys_rt_sigsuspend:
1557 break;
1558
1559 case gdb_sys_pread64:
1560 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1561 if (tmpulongest)
1562 {
1563 ULONGEST count;
1564 regcache_raw_read_unsigned (regcache, tdep->arg3,&count);
1565 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) count))
1566 return -1;
1567 }
1568 break;
1569
1570 case gdb_sys_pwrite64:
1571 case gdb_sys_chown16:
1572 break;
1573
1574 case gdb_sys_getcwd:
1575 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1576 if (tmpulongest)
1577 {
1578 ULONGEST size;
1579 regcache_raw_read_unsigned (regcache, tdep->arg2, &size);
1580 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) size))
1581 return -1;
1582 }
1583 break;
1584
1585 case gdb_sys_capget:
1586 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1587 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1588 tdep->size_cap_user_data_t))
1589 return -1;
1590 break;
1591
1592 case gdb_sys_capset:
1593 break;
1594
1595 case gdb_sys_sigaltstack:
1596 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1597 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1598 tdep->size_stack_t))
1599 return -1;
1600 break;
1601
1602 case gdb_sys_sendfile:
1603 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1604 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1605 tdep->size_off_t))
1606 return -1;
1607 break;
1608
1609 case gdb_sys_ni_syscall188:
1610 case gdb_sys_ni_syscall189:
1611 case gdb_sys_vfork:
1612 break;
1613
1614 case gdb_sys_getrlimit:
1615 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1616 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1617 tdep->size_rlimit))
1618 return -1;
1619 break;
1620
1621 case gdb_sys_mmap2:
1622 break;
1623
1624 case gdb_sys_truncate64:
1625 case gdb_sys_ftruncate64:
1626 break;
1627
1628 case gdb_sys_stat64:
1629 case gdb_sys_lstat64:
1630 case gdb_sys_fstat64:
1631 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1632 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1633 tdep->size_stat64))
1634 return -1;
1635 break;
1636
1637 case gdb_sys_lchown:
1638 case gdb_sys_getuid:
1639 case gdb_sys_getgid:
1640 case gdb_sys_geteuid:
1641 case gdb_sys_getegid:
1642 case gdb_sys_setreuid:
1643 case gdb_sys_setregid:
1644 break;
1645
1646 case gdb_sys_getgroups:
1647 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1648 if (tmpulongest)
1649 {
1650 ULONGEST gidsetsize;
1651 regcache_raw_read_unsigned (regcache, tdep->arg1,
1652 &gidsetsize);
1653 tmpint = tdep->size_gid_t * (int) gidsetsize;
1654 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint))
1655 return -1;
1656 }
1657 break;
1658
1659 case gdb_sys_setgroups:
1660 case gdb_sys_fchown:
1661 case gdb_sys_setresuid:
1662 break;
1663
1664 case gdb_sys_getresuid:
1665 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1666 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_uid_t))
1667 return -1;
1668 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1669 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_uid_t))
1670 return -1;
1671 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1672 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_uid_t))
1673 return -1;
1674 break;
1675
1676 case gdb_sys_setresgid:
1677 break;
1678
1679 case gdb_sys_getresgid:
1680 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1681 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gid_t))
1682 return -1;
1683 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1684 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gid_t))
1685 return -1;
1686 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1687 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gid_t))
1688 return -1;
1689 break;
1690
1691 case gdb_sys_chown:
1692 case gdb_sys_setuid:
1693 case gdb_sys_setgid:
1694 case gdb_sys_setfsuid:
1695 case gdb_sys_setfsgid:
1696 case gdb_sys_pivot_root:
1697 break;
1698
1699 case gdb_sys_mincore:
1700 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1701 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1702 tdep->size_PAGE_SIZE))
1703 return -1;
1704 break;
1705
1706 case gdb_sys_madvise:
1707 break;
1708
1709 case gdb_sys_getdents64:
1710 {
1711 ULONGEST count;
1712 regcache_raw_read_unsigned (regcache, tdep->arg2,
1713 &tmpulongest);
1714 regcache_raw_read_unsigned (regcache, tdep->arg3, &count);
1715 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1716 tdep->size_dirent64 * count))
1717 return -1;
1718 }
1719 break;
1720
1721 case gdb_sys_fcntl64:
1722 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1723 if (tmpulongest == tdep->fcntl_F_GETLK64)
1724 {
1725 regcache_raw_read_unsigned (regcache, tdep->arg3,
1726 &tmpulongest);
1727 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1728 tdep->size_flock64))
1729 return -1;
1730 }
1731 else if (tmpulongest != tdep->fcntl_F_SETLK64
1732 && tmpulongest != tdep->fcntl_F_SETLKW64)
1733 {
1734 goto sys_fcntl;
1735 }
1736 break;
1737
1738 case gdb_sys_ni_syscall222:
1739 case gdb_sys_ni_syscall223:
1740 case gdb_sys_gettid:
1741 case gdb_sys_readahead:
1742 case gdb_sys_setxattr:
1743 case gdb_sys_lsetxattr:
1744 case gdb_sys_fsetxattr:
1745 break;
1746
1747 case gdb_sys_getxattr:
1748 case gdb_sys_lgetxattr:
1749 case gdb_sys_fgetxattr:
1750 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1751 if (tmpulongest)
1752 {
1753 ULONGEST size;
1754 regcache_raw_read_unsigned (regcache, tdep->arg4, &size);
1755 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) size))
1756 return -1;
1757 }
1758 break;
1759
1760 case gdb_sys_listxattr:
1761 case gdb_sys_llistxattr:
1762 case gdb_sys_flistxattr:
1763 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1764 if (tmpulongest)
1765 {
1766 ULONGEST size;
1767 regcache_raw_read_unsigned (regcache, tdep->arg3, &size);
1768 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) size))
1769 return -1;
1770 }
1771 break;
1772
1773 case gdb_sys_removexattr:
1774 case gdb_sys_lremovexattr:
1775 case gdb_sys_fremovexattr:
1776 case gdb_sys_tkill:
1777 break;
1778
1779 case gdb_sys_sendfile64:
1780 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1781 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1782 tdep->size_loff_t))
1783 return -1;
1784 break;
1785
1786 case gdb_sys_futex:
1787 case gdb_sys_sched_setaffinity:
1788 break;
1789
1790 case gdb_sys_sched_getaffinity:
1791 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1792 if (tmpulongest)
1793 {
1794 ULONGEST len;
1795 regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
1796 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len))
1797 return -1;
1798 }
1799 break;
1800
1801 case gdb_sys_set_thread_area:
1802 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1803 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
1804 return -1;
1805 break;
1806
1807 case gdb_sys_get_thread_area:
1808 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1809 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1810 tdep->size_user_desc))
1811 return -1;
1812 break;
1813
1814 case gdb_sys_io_setup:
1815 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1816 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_long))
1817 return -1;
1818 break;
1819
1820 case gdb_sys_io_destroy:
1821 break;
1822
1823 case gdb_sys_io_getevents:
1824 regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
1825 if (tmpulongest)
1826 {
1827 ULONGEST nr;
1828 regcache_raw_read_unsigned (regcache, tdep->arg3, &nr);
1829 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1830 nr * tdep->size_io_event))
1831 return -1;
1832 }
1833 break;
1834
1835 case gdb_sys_io_submit:
1836 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1837 if (tmpulongest)
1838 {
1839 ULONGEST nr, i;
1840 gdb_byte *iocbp;
1841
1842 regcache_raw_read_unsigned (regcache, tdep->arg2, &nr);
1843 iocbp = alloca (nr * tdep->size_pointer);
1844 if (target_read_memory ((CORE_ADDR) tmpulongest, iocbp,
1845 nr * tdep->size_pointer))
1846 {
1847 if (record_debug)
1848 fprintf_unfiltered (gdb_stdlog,
1849 "Process record: error reading memory "
1850 "at addr = 0x%s len = %u.\n",
1851 OUTPUT_REG (tmpulongest, tdep->arg2),
1852 (int) (nr * tdep->size_pointer));
1853 return -1;
1854 }
1855 for (i = 0; i < nr; i++)
1856 {
1857 tmpaddr
1858 = (CORE_ADDR) extract_unsigned_integer (iocbp,
1859 tdep->size_pointer,
1860 byte_order);
1861 if (record_arch_list_add_mem (tmpaddr, tdep->size_iocb))
1862 return -1;
1863 iocbp += tdep->size_pointer;
1864 }
1865 }
1866 break;
1867
1868 case gdb_sys_io_cancel:
1869 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1870 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1871 tdep->size_io_event))
1872 return -1;
1873 break;
1874
1875 case gdb_sys_fadvise64:
1876 case gdb_sys_ni_syscall251:
1877 break;
1878
1879 case gdb_sys_exit_group:
1880 {
1881 int q;
1882 target_terminal_ours ();
1883 q = yquery (_("The next instruction is syscall exit_group. "
1884 "It will make the program exit. "
1885 "Do you want to stop the program?"));
1886 target_terminal_inferior ();
1887 if (q)
1888 return 1;
1889 }
1890 break;
1891
1892 case gdb_sys_lookup_dcookie:
1893 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1894 if (tmpulongest)
1895 {
1896 ULONGEST len;
1897 regcache_raw_read_unsigned (regcache, tdep->arg3, &len);
1898 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len))
1899 return -1;
1900 }
1901 break;
1902
1903 case gdb_sys_epoll_create:
1904 case gdb_sys_epoll_ctl:
1905 break;
1906
1907 case gdb_sys_epoll_wait:
1908 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1909 if (tmpulongest)
1910 {
1911 ULONGEST maxevents;
1912 regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents);
1913 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1914 maxevents * tdep->size_epoll_event))
1915 return -1;
1916 }
1917 break;
1918
1919 case gdb_sys_remap_file_pages:
1920 case gdb_sys_set_tid_address:
1921 break;
1922
1923 case gdb_sys_timer_create:
1924 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1925 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
1926 return -1;
1927 break;
1928
1929 case gdb_sys_timer_settime:
1930 regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
1931 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1932 tdep->size_itimerspec))
1933 return -1;
1934 break;
1935
1936 case gdb_sys_timer_gettime:
1937 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1938 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1939 tdep->size_itimerspec))
1940 return -1;
1941 break;
1942
1943 case gdb_sys_timer_getoverrun:
1944 case gdb_sys_timer_delete:
1945 case gdb_sys_clock_settime:
1946 break;
1947
1948 case gdb_sys_clock_gettime:
1949 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1950 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1951 tdep->size_timespec))
1952 return -1;
1953 break;
1954
1955 case gdb_sys_clock_getres:
1956 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1957 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1958 tdep->size_timespec))
1959 return -1;
1960 break;
1961
1962 case gdb_sys_clock_nanosleep:
1963 regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
1964 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1965 tdep->size_timespec))
1966 return -1;
1967 break;
1968
1969 case gdb_sys_statfs64:
1970 case gdb_sys_fstatfs64:
1971 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1972 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1973 tdep->size_statfs64))
1974 return -1;
1975 break;
1976
1977 case gdb_sys_tgkill:
1978 case gdb_sys_utimes:
1979 case gdb_sys_fadvise64_64:
1980 case gdb_sys_ni_syscall273:
1981 case gdb_sys_mbind:
1982 break;
1983
1984 case gdb_sys_get_mempolicy:
1985 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1986 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
1987 return -1;
1988 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1989 if (tmpulongest)
1990 {
1991 ULONGEST maxnode;
1992 regcache_raw_read_unsigned (regcache, tdep->arg3, &maxnode);
1993 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1994 maxnode * tdep->size_long))
1995 return -1;
1996 }
1997 break;
1998
1999 case gdb_sys_set_mempolicy:
2000 case gdb_sys_mq_open:
2001 case gdb_sys_mq_unlink:
2002 case gdb_sys_mq_timedsend:
2003 break;
2004
2005 case gdb_sys_mq_timedreceive:
2006 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
2007 if (tmpulongest)
2008 {
2009 ULONGEST msg_len;
2010 regcache_raw_read_unsigned (regcache, tdep->arg3, &msg_len);
2011 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2012 (int) msg_len))
2013 return -1;
2014 }
2015 regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
2016 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
2017 return -1;
2018 break;
2019
2020 case gdb_sys_mq_notify:
2021 break;
2022
2023 case gdb_sys_mq_getsetattr:
2024 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
2025 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2026 tdep->size_mq_attr))
2027 return -1;
2028 break;
2029
2030 case gdb_sys_kexec_load:
2031 break;
2032
2033 case gdb_sys_waitid:
2034 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
2035 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2036 tdep->size_siginfo))
2037 return -1;
2038 regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
2039 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2040 tdep->size_rusage))
2041 return -1;
2042 break;
2043
2044 case gdb_sys_ni_syscall285:
2045 case gdb_sys_add_key:
2046 case gdb_sys_request_key:
2047 break;
2048
2049 case gdb_sys_keyctl:
2050 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
2051 if (tmpulongest == 6 || tmpulongest == 11)
2052 {
2053 regcache_raw_read_unsigned (regcache, tdep->arg3,
2054 &tmpulongest);
2055 if (tmpulongest)
2056 {
2057 ULONGEST buflen;
2058 regcache_raw_read_unsigned (regcache, tdep->arg4, &buflen);
2059 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2060 (int) buflen))
2061 return -1;
2062 }
2063 }
2064 break;
2065
2066 case gdb_sys_ioprio_set:
2067 case gdb_sys_ioprio_get:
2068 case gdb_sys_inotify_init:
2069 case gdb_sys_inotify_add_watch:
2070 case gdb_sys_inotify_rm_watch:
2071 case gdb_sys_migrate_pages:
2072 case gdb_sys_openat:
2073 case gdb_sys_mkdirat:
2074 case gdb_sys_mknodat:
2075 case gdb_sys_fchownat:
2076 case gdb_sys_futimesat:
2077 break;
2078
2079 case gdb_sys_fstatat64:
2080 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
2081 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2082 tdep->size_stat64))
2083 return -1;
2084 break;
2085
2086 case gdb_sys_unlinkat:
2087 case gdb_sys_renameat:
2088 case gdb_sys_linkat:
2089 case gdb_sys_symlinkat:
2090 break;
2091
2092 case gdb_sys_readlinkat:
2093 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
2094 if (tmpulongest)
2095 {
2096 ULONGEST bufsiz;
2097 regcache_raw_read_unsigned (regcache, tdep->arg4, &bufsiz);
2098 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) bufsiz))
2099 return -1;
2100 }
2101 break;
2102
2103 case gdb_sys_fchmodat:
2104 case gdb_sys_faccessat:
2105 break;
2106
2107 case gdb_sys_pselect6:
2108 regcache_raw_read_unsigned (regcache, tdep->arg2, &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->arg3, &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->arg4, &tmpulongest);
2117 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2118 tdep->size_fd_set))
2119 return -1;
2120 regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
2121 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2122 tdep->size_timespec))
2123 return -1;
2124 break;
2125
2126 case gdb_sys_ppoll:
2127 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
2128 if (tmpulongest)
2129 {
2130 ULONGEST nfds;
2131 regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds);
2132 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2133 tdep->size_pollfd * nfds))
2134 return -1;
2135 }
2136 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
2137 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2138 tdep->size_timespec))
2139 return -1;
2140 break;
2141
2142 case gdb_sys_unshare:
2143 case gdb_sys_set_robust_list:
2144 break;
2145
2146 case gdb_sys_get_robust_list:
2147 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
2148 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
2149 return -1;
2150 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
2151 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
2152 return -1;
2153 break;
2154
2155 case gdb_sys_splice:
2156 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
2157 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2158 tdep->size_loff_t))
2159 return -1;
2160 regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
2161 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2162 tdep->size_loff_t))
2163 return -1;
2164 break;
2165
2166 case gdb_sys_sync_file_range:
2167 case gdb_sys_tee:
2168 case gdb_sys_vmsplice:
2169 break;
2170
2171 case gdb_sys_move_pages:
2172 regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
2173 if (tmpulongest)
2174 {
2175 ULONGEST nr_pages;
2176 regcache_raw_read_unsigned (regcache, tdep->arg2, &nr_pages);
2177 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2178 nr_pages * tdep->size_int))
2179 return -1;
2180 }
2181 break;
2182
2183 case gdb_sys_getcpu:
2184 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
2185 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
2186 return -1;
2187 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
2188 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
2189 return -1;
2190 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
2191 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
2192 tdep->size_ulong * 2))
2193 return -1;
2194 break;
2195
2196 case gdb_sys_epoll_pwait:
2197 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
2198 if (tmpulongest)
2199 {
2200 ULONGEST maxevents;
2201 regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents);
2202 tmpint = (int) maxevents * tdep->size_epoll_event;
2203 if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint))
2204 return -1;
2205 }
2206 break;
2207
2208 default:
2209 printf_unfiltered (_("Process record and replay target doesn't "
2210 "support syscall number %d\n"), syscall);
2211 return -1;
2212 break;
2213 }
2214
2215 return 0;
2216 }
This page took 0.073243 seconds and 5 git commands to generate.