1 /* Process record and replay target code for GNU/Linux.
3 Copyright (C) 2008-2024 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
24 #include "record-full.h"
25 #include "linux-record.h"
28 /* These macros are the values of the first argument of system call
29 "sys_ptrace". The values of these macros were obtained from Linux
32 #define RECORD_PTRACE_PEEKTEXT 1
33 #define RECORD_PTRACE_PEEKDATA 2
34 #define RECORD_PTRACE_PEEKUSR 3
36 /* These macros are the values of the first argument of system call
37 "sys_socketcall". The values of these macros were obtained from
38 Linux Kernel source. */
40 #define RECORD_SYS_SOCKET 1
41 #define RECORD_SYS_BIND 2
42 #define RECORD_SYS_CONNECT 3
43 #define RECORD_SYS_LISTEN 4
44 #define RECORD_SYS_ACCEPT 5
45 #define RECORD_SYS_GETSOCKNAME 6
46 #define RECORD_SYS_GETPEERNAME 7
47 #define RECORD_SYS_SOCKETPAIR 8
48 #define RECORD_SYS_SEND 9
49 #define RECORD_SYS_RECV 10
50 #define RECORD_SYS_SENDTO 11
51 #define RECORD_SYS_RECVFROM 12
52 #define RECORD_SYS_SHUTDOWN 13
53 #define RECORD_SYS_SETSOCKOPT 14
54 #define RECORD_SYS_GETSOCKOPT 15
55 #define RECORD_SYS_SENDMSG 16
56 #define RECORD_SYS_RECVMSG 17
58 /* These macros are the values of the first argument of system call
59 "sys_ipc". The values of these macros were obtained from Linux
62 #define RECORD_SEMOP 1
63 #define RECORD_SEMGET 2
64 #define RECORD_SEMCTL 3
65 #define RECORD_SEMTIMEDOP 4
66 #define RECORD_MSGSND 11
67 #define RECORD_MSGRCV 12
68 #define RECORD_MSGGET 13
69 #define RECORD_MSGCTL 14
70 #define RECORD_SHMAT 21
71 #define RECORD_SHMDT 22
72 #define RECORD_SHMGET 23
73 #define RECORD_SHMCTL 24
75 /* These macros are the values of the first argument of system call
76 "sys_quotactl". The values of these macros were obtained from Linux
79 #define RECORD_Q_GETFMT 0x800004
80 #define RECORD_Q_GETINFO 0x800005
81 #define RECORD_Q_GETQUOTA 0x800007
82 #define RECORD_Q_XGETQSTAT (('5' << 8) + 5)
83 #define RECORD_Q_XGETQUOTA (('3' << 8) + 3)
85 #define OUTPUT_REG(val, num) phex_nz ((val), \
86 gdbarch_register_type (regcache->arch (), (num))->length ())
88 /* Record a memory area of length LEN pointed to by register
92 record_mem_at_reg (struct regcache
*regcache
, int regnum
, int len
)
96 regcache_raw_read_unsigned (regcache
, regnum
, &addr
);
97 return record_full_arch_list_add_mem ((CORE_ADDR
) addr
, len
);
101 record_linux_sockaddr (struct regcache
*regcache
,
102 struct linux_record_tdep
*tdep
, ULONGEST addr
,
107 struct gdbarch
*gdbarch
= regcache
->arch ();
108 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
113 a
= (gdb_byte
*) alloca (tdep
->size_int
);
115 if (record_full_arch_list_add_mem ((CORE_ADDR
) len
, tdep
->size_int
))
118 /* Get the addrlen. */
119 if (target_read_memory ((CORE_ADDR
) len
, a
, tdep
->size_int
))
122 gdb_printf (gdb_stdlog
,
123 "Process record: error reading "
124 "memory at addr = 0x%s len = %d.\n",
125 phex_nz (len
, tdep
->size_pointer
),
129 addrlen
= (int) extract_unsigned_integer (a
, tdep
->size_int
, byte_order
);
130 if (addrlen
<= 0 || addrlen
> tdep
->size_sockaddr
)
131 addrlen
= tdep
->size_sockaddr
;
133 if (record_full_arch_list_add_mem ((CORE_ADDR
) addr
, addrlen
))
140 record_linux_msghdr (struct regcache
*regcache
,
141 struct linux_record_tdep
*tdep
, ULONGEST addr
)
144 struct gdbarch
*gdbarch
= regcache
->arch ();
145 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
152 if (record_full_arch_list_add_mem ((CORE_ADDR
) addr
, tdep
->size_msghdr
))
155 a
= (gdb_byte
*) alloca (tdep
->size_msghdr
);
156 if (target_read_memory ((CORE_ADDR
) addr
, a
, tdep
->size_msghdr
))
159 gdb_printf (gdb_stdlog
,
160 "Process record: error reading "
161 "memory at addr = 0x%s "
163 phex_nz (addr
, tdep
->size_pointer
),
168 /* msg_name msg_namelen */
169 addr
= extract_unsigned_integer (a
, tdep
->size_pointer
, byte_order
);
170 a
+= tdep
->size_pointer
;
171 if (record_full_arch_list_add_mem
173 (int) extract_unsigned_integer (a
,
177 /* We have read an int, but skip size_pointer bytes to account for alignment
178 of the next field on 64-bit targets. */
179 a
+= tdep
->size_pointer
;
181 /* msg_iov msg_iovlen */
182 addr
= extract_unsigned_integer (a
, tdep
->size_pointer
, byte_order
);
183 a
+= tdep
->size_pointer
;
187 ULONGEST len
= extract_unsigned_integer (a
, tdep
->size_size_t
,
189 gdb_byte
*iov
= (gdb_byte
*) alloca (tdep
->size_iovec
);
191 for (i
= 0; i
< len
; i
++)
193 if (target_read_memory ((CORE_ADDR
) addr
, iov
, tdep
->size_iovec
))
196 gdb_printf (gdb_stdlog
,
197 "Process record: error "
201 phex_nz (addr
,tdep
->size_pointer
),
205 tmpaddr
= (CORE_ADDR
) extract_unsigned_integer (iov
,
208 tmpint
= (int) extract_unsigned_integer (iov
+ tdep
->size_pointer
,
211 if (record_full_arch_list_add_mem (tmpaddr
, tmpint
))
213 addr
+= tdep
->size_iovec
;
216 a
+= tdep
->size_size_t
;
218 /* msg_control msg_controllen */
219 addr
= extract_unsigned_integer (a
, tdep
->size_pointer
, byte_order
);
220 a
+= tdep
->size_pointer
;
221 tmpint
= (int) extract_unsigned_integer (a
, tdep
->size_size_t
, byte_order
);
222 if (record_full_arch_list_add_mem ((CORE_ADDR
) addr
, tmpint
))
228 /* When the architecture process record get a Linux syscall
229 instruction, it will get a Linux syscall number of this
230 architecture and convert it to the Linux syscall number "num" which
231 is internal to GDB. Most Linux syscalls across architectures in
232 Linux would be similar and mostly differ by sizes of types and
233 structures. This sizes are put to "tdep".
235 Record the values of the registers and memory that will be changed
236 in current system call.
238 Return -1 if something wrong. */
241 record_linux_system_call (enum gdb_syscall syscall
,
242 struct regcache
*regcache
,
243 struct linux_record_tdep
*tdep
)
245 struct gdbarch
*gdbarch
= regcache
->arch ();
246 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
247 ULONGEST tmpulongest
;
253 case gdb_sys_restart_syscall
:
257 if (yquery (_("The next instruction is syscall exit. "
258 "It will make the program exit. "
259 "Do you want to stop the program?")))
267 case gdb_sys_readlink
:
269 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &tmpulongest
);
270 if (record_mem_at_reg (regcache
, tdep
->arg2
, (int) tmpulongest
))
279 case gdb_sys_waitpid
:
280 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
282 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
295 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
297 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
304 case gdb_sys_lchown16
:
305 case gdb_sys_ni_syscall17
:
311 if (record_mem_at_reg (regcache
, tdep
->arg2
,
312 tdep
->size__old_kernel_stat
))
319 case gdb_sys_oldumount
:
320 case gdb_sys_setuid16
:
321 case gdb_sys_getuid16
:
326 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
327 if (tmpulongest
== RECORD_PTRACE_PEEKTEXT
328 || tmpulongest
== RECORD_PTRACE_PEEKDATA
329 || tmpulongest
== RECORD_PTRACE_PEEKUSR
)
331 if (record_mem_at_reg (regcache
, tdep
->arg4
, 4))
339 case gdb_sys_ni_syscall31
:
340 case gdb_sys_ni_syscall32
:
343 case gdb_sys_ni_syscall35
:
354 if (record_mem_at_reg (regcache
, tdep
->arg1
, tdep
->size_int
* 2))
358 case gdb_sys_getrandom
:
359 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
360 if (record_mem_at_reg (regcache
, tdep
->arg1
, tmpulongest
))
365 if (record_mem_at_reg (regcache
, tdep
->arg1
, tdep
->size_tms
))
369 case gdb_sys_ni_syscall44
:
371 case gdb_sys_setgid16
:
372 case gdb_sys_getgid16
:
374 case gdb_sys_geteuid16
:
375 case gdb_sys_getegid16
:
378 case gdb_sys_ni_syscall53
:
382 /* XXX Need to add a lot of support of other ioctl requests. */
383 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
384 if (tmpulongest
== tdep
->ioctl_FIOCLEX
385 || tmpulongest
== tdep
->ioctl_FIONCLEX
386 || tmpulongest
== tdep
->ioctl_FIONBIO
387 || tmpulongest
== tdep
->ioctl_FIOASYNC
388 || tmpulongest
== tdep
->ioctl_TCSETS
389 || tmpulongest
== tdep
->ioctl_TCSETSW
390 || tmpulongest
== tdep
->ioctl_TCSETSF
391 || tmpulongest
== tdep
->ioctl_TCSETA
392 || tmpulongest
== tdep
->ioctl_TCSETAW
393 || tmpulongest
== tdep
->ioctl_TCSETAF
394 || tmpulongest
== tdep
->ioctl_TCSBRK
395 || tmpulongest
== tdep
->ioctl_TCXONC
396 || tmpulongest
== tdep
->ioctl_TCFLSH
397 || tmpulongest
== tdep
->ioctl_TIOCEXCL
398 || tmpulongest
== tdep
->ioctl_TIOCNXCL
399 || tmpulongest
== tdep
->ioctl_TIOCSCTTY
400 || tmpulongest
== tdep
->ioctl_TIOCSPGRP
401 || tmpulongest
== tdep
->ioctl_TIOCSTI
402 || tmpulongest
== tdep
->ioctl_TIOCSWINSZ
403 || tmpulongest
== tdep
->ioctl_TIOCMBIS
404 || tmpulongest
== tdep
->ioctl_TIOCMBIC
405 || tmpulongest
== tdep
->ioctl_TIOCMSET
406 || tmpulongest
== tdep
->ioctl_TIOCSSOFTCAR
407 || tmpulongest
== tdep
->ioctl_TIOCCONS
408 || tmpulongest
== tdep
->ioctl_TIOCSSERIAL
409 || tmpulongest
== tdep
->ioctl_TIOCPKT
410 || tmpulongest
== tdep
->ioctl_TIOCNOTTY
411 || tmpulongest
== tdep
->ioctl_TIOCSETD
412 || tmpulongest
== tdep
->ioctl_TCSBRKP
413 || tmpulongest
== tdep
->ioctl_TIOCTTYGSTRUCT
414 || tmpulongest
== tdep
->ioctl_TIOCSBRK
415 || tmpulongest
== tdep
->ioctl_TIOCCBRK
416 || tmpulongest
== tdep
->ioctl_TCSETS2
417 || tmpulongest
== tdep
->ioctl_TCSETSW2
418 || tmpulongest
== tdep
->ioctl_TCSETSF2
419 || tmpulongest
== tdep
->ioctl_TIOCSPTLCK
420 || tmpulongest
== tdep
->ioctl_TIOCSERCONFIG
421 || tmpulongest
== tdep
->ioctl_TIOCSERGWILD
422 || tmpulongest
== tdep
->ioctl_TIOCSERSWILD
423 || tmpulongest
== tdep
->ioctl_TIOCSLCKTRMIOS
424 || tmpulongest
== tdep
->ioctl_TIOCSERGETMULTI
425 || tmpulongest
== tdep
->ioctl_TIOCSERSETMULTI
426 || tmpulongest
== tdep
->ioctl_TIOCMIWAIT
427 || tmpulongest
== tdep
->ioctl_TIOCSHAYESESP
)
431 else if (tmpulongest
== tdep
->ioctl_TCGETS
432 || tmpulongest
== tdep
->ioctl_TCGETA
433 || tmpulongest
== tdep
->ioctl_TIOCGLCKTRMIOS
)
435 if (record_mem_at_reg (regcache
, tdep
->arg3
,
439 else if (tmpulongest
== tdep
->ioctl_TIOCGPGRP
440 || tmpulongest
== tdep
->ioctl_TIOCGSID
)
442 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_pid_t
))
445 else if (tmpulongest
== tdep
->ioctl_TIOCOUTQ
446 || tmpulongest
== tdep
->ioctl_TIOCMGET
447 || tmpulongest
== tdep
->ioctl_TIOCGSOFTCAR
448 || tmpulongest
== tdep
->ioctl_FIONREAD
449 || tmpulongest
== tdep
->ioctl_TIOCINQ
450 || tmpulongest
== tdep
->ioctl_TIOCGETD
451 || tmpulongest
== tdep
->ioctl_TIOCGPTN
452 || tmpulongest
== tdep
->ioctl_TIOCSERGETLSR
)
454 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_int
))
457 else if (tmpulongest
== tdep
->ioctl_TIOCGWINSZ
)
459 if (record_mem_at_reg (regcache
, tdep
->arg3
,
463 else if (tmpulongest
== tdep
->ioctl_TIOCLINUX
)
465 /* This syscall affects a char-size memory. */
466 if (record_mem_at_reg (regcache
, tdep
->arg3
, 1))
469 else if (tmpulongest
== tdep
->ioctl_TIOCGSERIAL
)
471 if (record_mem_at_reg (regcache
, tdep
->arg3
,
472 tdep
->size_serial_struct
))
475 else if (tmpulongest
== tdep
->ioctl_TCGETS2
)
477 if (record_mem_at_reg (regcache
, tdep
->arg3
,
478 tdep
->size_termios2
))
481 else if (tmpulongest
== tdep
->ioctl_FIOQSIZE
)
483 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_loff_t
))
486 else if (tmpulongest
== tdep
->ioctl_TIOCGICOUNT
)
488 if (record_mem_at_reg (regcache
, tdep
->arg3
,
489 tdep
->size_serial_icounter_struct
))
492 else if (tmpulongest
== tdep
->ioctl_TIOCGHAYESESP
)
494 if (record_mem_at_reg (regcache
, tdep
->arg3
,
495 tdep
->size_hayes_esp_config
))
498 else if (tmpulongest
== tdep
->ioctl_TIOCSERGSTRUCT
)
500 gdb_printf (gdb_stderr
,
501 _("Process record and replay target doesn't "
502 "support ioctl request TIOCSERGSTRUCT\n"));
507 gdb_printf (gdb_stderr
,
508 _("Process record and replay target doesn't "
509 "support ioctl request 0x%s.\n"),
510 OUTPUT_REG (tmpulongest
, tdep
->arg2
));
517 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
519 if (tmpulongest
== tdep
->fcntl_F_GETLK
)
521 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_flock
))
526 case gdb_sys_ni_syscall56
:
527 case gdb_sys_setpgid
:
528 case gdb_sys_ni_syscall58
:
531 case gdb_sys_olduname
:
532 if (record_mem_at_reg (regcache
, tdep
->arg1
,
533 tdep
->size_oldold_utsname
))
542 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_ustat
))
547 case gdb_sys_getppid
:
548 case gdb_sys_getpgrp
:
552 case gdb_sys_sigaction
:
553 if (record_mem_at_reg (regcache
, tdep
->arg3
,
554 tdep
->size_old_sigaction
))
558 case gdb_sys_sgetmask
:
559 case gdb_sys_ssetmask
:
560 case gdb_sys_setreuid16
:
561 case gdb_sys_setregid16
:
562 case gdb_sys_sigsuspend
:
565 case gdb_sys_sigpending
:
566 if (record_mem_at_reg (regcache
, tdep
->arg1
,
567 tdep
->size_old_sigset_t
))
571 case gdb_sys_sethostname
:
572 case gdb_sys_setrlimit
:
575 case gdb_sys_old_getrlimit
:
576 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_rlimit
))
580 case gdb_sys_getrusage
:
581 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_rusage
))
585 case gdb_sys_gettimeofday
:
586 if (record_mem_at_reg (regcache
, tdep
->arg1
, tdep
->size_timeval
)
587 || record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_timezone
))
591 case gdb_sys_settimeofday
:
594 case gdb_sys_getgroups16
:
595 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
600 regcache_raw_read_unsigned (regcache
, tdep
->arg1
,
602 tmpint
= tdep
->size_old_gid_t
* (int) gidsetsize
;
603 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
, tmpint
))
608 case gdb_sys_setgroups16
:
613 unsigned long sz_sel_arg
= tdep
->size_long
+ tdep
->size_pointer
* 4;
614 gdb_byte
*a
= (gdb_byte
*) alloca (sz_sel_arg
);
615 CORE_ADDR inp
, outp
, exp
, tvp
;
617 regcache_raw_read_unsigned (regcache
, tdep
->arg1
,
621 if (target_read_memory (tmpulongest
, a
, sz_sel_arg
))
624 gdb_printf (gdb_stdlog
,
625 "Process record: error reading memory "
626 "at addr = 0x%s len = %lu.\n",
627 OUTPUT_REG (tmpulongest
, tdep
->arg1
),
632 a
+= tdep
->size_long
;
633 inp
= extract_unsigned_integer (a
, tdep
->size_pointer
, byte_order
);
634 a
+= tdep
->size_pointer
;
635 outp
= extract_unsigned_integer (a
, tdep
->size_pointer
, byte_order
);
636 a
+= tdep
->size_pointer
;
637 exp
= extract_unsigned_integer (a
, tdep
->size_pointer
, byte_order
);
638 a
+= tdep
->size_pointer
;
639 tvp
= extract_unsigned_integer (a
, tdep
->size_pointer
, byte_order
);
641 if (record_full_arch_list_add_mem (inp
, tdep
->size_fd_set
))
644 if (record_full_arch_list_add_mem (outp
, tdep
->size_fd_set
))
647 if (record_full_arch_list_add_mem (exp
, tdep
->size_fd_set
))
650 if (record_full_arch_list_add_mem (tvp
, tdep
->size_timeval
))
656 case gdb_sys_symlink
:
664 if (yquery (_("The next instruction is syscall reboot. "
665 "It will restart the computer. "
666 "Do you want to stop the program?")))
670 case gdb_old_readdir
:
671 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_old_dirent
))
682 regcache_raw_read_unsigned (regcache
, tdep
->arg1
,
684 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &len
);
685 if (record_full_memory_query
)
688 The next instruction is syscall munmap.\n\
689 It will free the memory addr = 0x%s len = %u.\n\
690 It will make record target cannot record some memory change.\n\
691 Do you want to stop the program?"),
692 OUTPUT_REG (tmpulongest
, tdep
->arg1
), (int) len
))
698 case gdb_sys_truncate
:
699 case gdb_sys_ftruncate
:
701 case gdb_sys_fchown16
:
702 case gdb_sys_getpriority
:
703 case gdb_sys_setpriority
:
704 case gdb_sys_ni_syscall98
:
708 case gdb_sys_fstatfs
:
709 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_statfs
))
718 case gdb_sys_sendmsg
:
719 case gdb_sys_shutdown
:
721 case gdb_sys_connect
:
723 case gdb_sys_setsockopt
:
727 case gdb_sys_getsockname
:
728 case gdb_sys_getpeername
:
732 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
733 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &len
);
734 if (record_linux_sockaddr (regcache
, tdep
, tmpulongest
, len
))
739 case gdb_sys_recvfrom
:
743 regcache_raw_read_unsigned (regcache
, tdep
->arg4
, &tmpulongest
);
744 regcache_raw_read_unsigned (regcache
, tdep
->arg5
, &len
);
745 if (record_linux_sockaddr (regcache
, tdep
, tmpulongest
, len
))
750 case gdb_sys_recvmsg
:
751 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
752 if (record_linux_msghdr (regcache
, tdep
, tmpulongest
))
756 case gdb_sys_socketpair
:
757 if (record_mem_at_reg (regcache
, tdep
->arg4
, tdep
->size_int
))
761 case gdb_sys_getsockopt
:
762 regcache_raw_read_unsigned (regcache
, tdep
->arg5
, &tmpulongest
);
766 gdb_byte
*optlenp
= (gdb_byte
*) alloca (tdep
->size_int
);
768 if (target_read_memory ((CORE_ADDR
) tmpulongest
, optlenp
,
772 gdb_printf (gdb_stdlog
,
773 "Process record: error reading "
774 "memory at addr = 0x%s "
776 OUTPUT_REG (tmpulongest
, tdep
->arg5
),
780 regcache_raw_read_unsigned (regcache
, tdep
->arg4
, &optvalp
);
781 tmpint
= (int) extract_signed_integer (optlenp
, tdep
->size_int
,
783 if (record_full_arch_list_add_mem ((CORE_ADDR
) optvalp
, tmpint
))
785 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
791 case gdb_sys_socketcall
:
792 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
795 case RECORD_SYS_SOCKET
:
796 case RECORD_SYS_BIND
:
797 case RECORD_SYS_CONNECT
:
798 case RECORD_SYS_LISTEN
:
800 case RECORD_SYS_ACCEPT
:
801 case RECORD_SYS_GETSOCKNAME
:
802 case RECORD_SYS_GETPEERNAME
:
804 regcache_raw_read_unsigned (regcache
, tdep
->arg2
,
808 gdb_byte
*a
= (gdb_byte
*) alloca (tdep
->size_ulong
* 2);
811 tmpulongest
+= tdep
->size_ulong
;
812 if (target_read_memory ((CORE_ADDR
) tmpulongest
, a
,
813 tdep
->size_ulong
* 2))
816 gdb_printf (gdb_stdlog
,
817 "Process record: error reading "
818 "memory at addr = 0x%s len = %d.\n",
819 OUTPUT_REG (tmpulongest
, tdep
->arg2
),
820 tdep
->size_ulong
* 2);
823 tmpulongest
= extract_unsigned_integer (a
,
826 len
= extract_unsigned_integer (a
+ tdep
->size_ulong
,
827 tdep
->size_ulong
, byte_order
);
828 if (record_linux_sockaddr (regcache
, tdep
, tmpulongest
, len
))
834 case RECORD_SYS_SOCKETPAIR
:
836 gdb_byte
*a
= (gdb_byte
*) alloca (tdep
->size_ulong
);
838 regcache_raw_read_unsigned (regcache
, tdep
->arg2
,
842 tmpulongest
+= tdep
->size_ulong
* 3;
843 if (target_read_memory ((CORE_ADDR
) tmpulongest
, a
,
847 gdb_printf (gdb_stdlog
,
848 "Process record: error reading "
849 "memory at addr = 0x%s len = %d.\n",
850 OUTPUT_REG (tmpulongest
, tdep
->arg2
),
855 = (CORE_ADDR
) extract_unsigned_integer (a
, tdep
->size_ulong
,
857 if (record_full_arch_list_add_mem (tmpaddr
, tdep
->size_int
))
862 case RECORD_SYS_SEND
:
863 case RECORD_SYS_SENDTO
:
865 case RECORD_SYS_RECVFROM
:
866 regcache_raw_read_unsigned (regcache
, tdep
->arg2
,
870 gdb_byte
*a
= (gdb_byte
*) alloca (tdep
->size_ulong
* 2);
873 tmpulongest
+= tdep
->size_ulong
* 4;
874 if (target_read_memory ((CORE_ADDR
) tmpulongest
, a
,
875 tdep
->size_ulong
* 2))
878 gdb_printf (gdb_stdlog
,
879 "Process record: error reading "
880 "memory at addr = 0x%s len = %d.\n",
881 OUTPUT_REG (tmpulongest
, tdep
->arg2
),
882 tdep
->size_ulong
* 2);
885 tmpulongest
= extract_unsigned_integer (a
, tdep
->size_ulong
,
887 len
= extract_unsigned_integer (a
+ tdep
->size_ulong
,
888 tdep
->size_ulong
, byte_order
);
889 if (record_linux_sockaddr (regcache
, tdep
, tmpulongest
, len
))
893 case RECORD_SYS_RECV
:
894 regcache_raw_read_unsigned (regcache
, tdep
->arg2
,
898 gdb_byte
*a
= (gdb_byte
*) alloca (tdep
->size_ulong
* 2);
900 tmpulongest
+= tdep
->size_ulong
;
901 if (target_read_memory ((CORE_ADDR
) tmpulongest
, a
,
905 gdb_printf (gdb_stdlog
,
906 "Process record: error reading "
907 "memory at addr = 0x%s len = %d.\n",
908 OUTPUT_REG (tmpulongest
, tdep
->arg2
),
912 tmpulongest
= extract_unsigned_integer (a
, tdep
->size_ulong
,
916 a
+= tdep
->size_ulong
;
917 tmpint
= (int) extract_unsigned_integer (a
, tdep
->size_ulong
,
919 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
925 case RECORD_SYS_SHUTDOWN
:
926 case RECORD_SYS_SETSOCKOPT
:
928 case RECORD_SYS_GETSOCKOPT
:
930 gdb_byte
*a
= (gdb_byte
*) alloca (tdep
->size_ulong
* 2);
931 gdb_byte
*av
= (gdb_byte
*) alloca (tdep
->size_int
);
933 regcache_raw_read_unsigned (regcache
, tdep
->arg2
,
937 tmpulongest
+= tdep
->size_ulong
* 3;
938 if (target_read_memory ((CORE_ADDR
) tmpulongest
, a
,
939 tdep
->size_ulong
* 2))
942 gdb_printf (gdb_stdlog
,
943 "Process record: error reading "
944 "memory at addr = 0x%s len = %d.\n",
945 OUTPUT_REG (tmpulongest
, tdep
->arg2
),
946 tdep
->size_ulong
* 2);
949 tmpulongest
= extract_unsigned_integer (a
+ tdep
->size_ulong
,
954 if (target_read_memory ((CORE_ADDR
) tmpulongest
, av
,
958 gdb_printf (gdb_stdlog
,
959 "Process record: error reading "
960 "memory at addr = 0x%s "
962 phex_nz (tmpulongest
,
968 = (CORE_ADDR
) extract_unsigned_integer (a
,
971 tmpint
= (int) extract_unsigned_integer (av
,
974 if (record_full_arch_list_add_mem (tmpaddr
, tmpint
))
976 a
+= tdep
->size_ulong
;
978 = (CORE_ADDR
) extract_unsigned_integer (a
,
981 if (record_full_arch_list_add_mem (tmpaddr
,
988 case RECORD_SYS_SENDMSG
:
990 case RECORD_SYS_RECVMSG
:
992 gdb_byte
*a
= (gdb_byte
*) alloca (tdep
->size_ulong
);
994 regcache_raw_read_unsigned (regcache
, tdep
->arg2
,
998 tmpulongest
+= tdep
->size_ulong
;
999 if (target_read_memory ((CORE_ADDR
) tmpulongest
, a
,
1003 gdb_printf (gdb_stdlog
,
1004 "Process record: error reading "
1005 "memory at addr = 0x%s len = %d.\n",
1006 OUTPUT_REG (tmpulongest
, tdep
->arg2
),
1010 tmpulongest
= extract_unsigned_integer (a
, tdep
->size_ulong
,
1012 if (record_linux_msghdr (regcache
, tdep
, tmpulongest
))
1018 gdb_printf (gdb_stderr
,
1019 _("Process record and replay target "
1020 "doesn't support socketcall call 0x%s\n"),
1021 OUTPUT_REG (tmpulongest
, tdep
->arg1
));
1027 case gdb_sys_syslog
:
1030 case gdb_sys_setitimer
:
1031 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_itimerval
))
1035 case gdb_sys_getitimer
:
1036 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_itimerval
))
1040 case gdb_sys_newstat
:
1041 case gdb_sys_newlstat
:
1042 case gdb_sys_newfstat
:
1043 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_stat
))
1047 case gdb_sys_newfstatat
:
1048 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &tmpulongest
);
1049 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1055 regcache_raw_read_unsigned (regcache
, tdep
->arg5
, &tmpulongest
);
1056 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
, 256))
1061 if (record_mem_at_reg (regcache
, tdep
->arg1
,
1062 tdep
->size_old_utsname
))
1067 case gdb_sys_vhangup
:
1068 case gdb_sys_ni_syscall112
:
1069 case gdb_sys_vm86old
:
1073 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_int
)
1074 || record_mem_at_reg (regcache
, tdep
->arg4
, tdep
->size_rusage
))
1078 case gdb_sys_swapoff
:
1081 case gdb_sys_sysinfo
:
1082 if (record_mem_at_reg (regcache
, tdep
->arg1
, tdep
->size_sysinfo
))
1086 case gdb_sys_shmget
:
1087 case gdb_sys_semget
:
1089 case gdb_sys_msgget
:
1090 /* XXX maybe need do some record works with sys_shmdt. */
1092 case gdb_sys_msgsnd
:
1093 case gdb_sys_semtimedop
:
1097 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_ulong
))
1101 case gdb_sys_shmctl
:
1102 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_shmid_ds
))
1106 /* XXX sys_semctl 525 still not supported. */
1109 case gdb_sys_msgrcv
:
1113 regcache_raw_read_signed (regcache
, tdep
->arg3
, &l
);
1114 tmpint
= l
+ tdep
->size_long
;
1115 if (record_mem_at_reg (regcache
, tdep
->arg2
, tmpint
))
1120 case gdb_sys_msgctl
:
1121 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_msqid_ds
))
1126 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
1127 tmpulongest
&= 0xffff;
1128 switch (tmpulongest
)
1132 case RECORD_SEMTIMEDOP
:
1135 /* XXX maybe need do some record works with RECORD_SHMDT. */
1143 regcache_raw_read_signed (regcache
, tdep
->arg3
, &second
);
1144 tmpint
= (int) second
+ tdep
->size_long
;
1145 if (record_mem_at_reg (regcache
, tdep
->arg5
, tmpint
))
1150 if (record_mem_at_reg (regcache
, tdep
->arg5
,
1151 tdep
->size_msqid_ds
))
1155 if (record_mem_at_reg (regcache
, tdep
->arg4
, tdep
->size_ulong
))
1159 if (record_mem_at_reg (regcache
, tdep
->arg5
,
1160 tdep
->size_shmid_ds
))
1164 /* XXX RECORD_SEMCTL still not supported. */
1165 gdb_printf (gdb_stderr
,
1166 _("Process record and replay target doesn't "
1167 "support ipc number %s\n"),
1168 pulongest (tmpulongest
));
1174 case gdb_sys_sigreturn
:
1176 case gdb_sys_setdomainname
:
1179 case gdb_sys_newuname
:
1180 if (record_mem_at_reg (regcache
, tdep
->arg1
,
1181 tdep
->size_new_utsname
))
1185 case gdb_sys_modify_ldt
:
1186 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
1187 if (tmpulongest
== 0 || tmpulongest
== 2)
1191 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &bytecount
);
1192 if (record_mem_at_reg (regcache
, tdep
->arg2
, (int) bytecount
))
1197 case gdb_sys_adjtimex
:
1198 if (record_mem_at_reg (regcache
, tdep
->arg1
, tdep
->size_timex
))
1202 case gdb_sys_mprotect
:
1205 case gdb_sys_sigprocmask
:
1206 if (record_mem_at_reg (regcache
, tdep
->arg3
,
1207 tdep
->size_old_sigset_t
))
1211 case gdb_sys_ni_syscall127
:
1212 case gdb_sys_init_module
:
1213 case gdb_sys_delete_module
:
1214 case gdb_sys_ni_syscall130
:
1217 case gdb_sys_quotactl
:
1218 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
1219 switch (tmpulongest
)
1221 case RECORD_Q_GETFMT
:
1223 if (record_mem_at_reg (regcache
, tdep
->arg4
, 4))
1226 case RECORD_Q_GETINFO
:
1227 if (record_mem_at_reg (regcache
, tdep
->arg4
,
1228 tdep
->size_mem_dqinfo
))
1231 case RECORD_Q_GETQUOTA
:
1232 if (record_mem_at_reg (regcache
, tdep
->arg4
,
1233 tdep
->size_if_dqblk
))
1236 case RECORD_Q_XGETQSTAT
:
1237 case RECORD_Q_XGETQUOTA
:
1238 if (record_mem_at_reg (regcache
, tdep
->arg4
,
1239 tdep
->size_fs_quota_stat
))
1245 case gdb_sys_getpgid
:
1246 case gdb_sys_fchdir
:
1247 case gdb_sys_bdflush
:
1251 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
1252 if (tmpulongest
== 2)
1254 /*XXX the size of memory is not very clear. */
1255 if (record_mem_at_reg (regcache
, tdep
->arg3
, 10))
1260 case gdb_sys_personality
:
1261 case gdb_sys_ni_syscall137
:
1262 case gdb_sys_setfsuid16
:
1263 case gdb_sys_setfsgid16
:
1266 case gdb_sys_llseek
:
1267 if (record_mem_at_reg (regcache
, tdep
->arg4
, tdep
->size_loff_t
))
1271 case gdb_sys_getdents
:
1272 case gdb_sys_getdents64
:
1273 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &tmpulongest
);
1274 if (record_mem_at_reg (regcache
, tdep
->arg2
, tmpulongest
))
1278 case gdb_sys_select
:
1279 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_fd_set
)
1280 || record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_fd_set
)
1281 || record_mem_at_reg (regcache
, tdep
->arg4
, tdep
->size_fd_set
)
1282 || record_mem_at_reg (regcache
, tdep
->arg5
, tdep
->size_timeval
))
1294 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &vec
);
1297 gdb_byte
*iov
= (gdb_byte
*) alloca (tdep
->size_iovec
);
1299 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &vlen
);
1300 for (tmpulongest
= 0; tmpulongest
< vlen
; tmpulongest
++)
1302 if (target_read_memory ((CORE_ADDR
) vec
, iov
,
1306 gdb_printf (gdb_stdlog
,
1307 "Process record: error reading "
1308 "memory at addr = 0x%s len = %d.\n",
1309 OUTPUT_REG (vec
, tdep
->arg2
),
1314 = (CORE_ADDR
) extract_unsigned_integer (iov
,
1318 = (int) extract_unsigned_integer (iov
+ tdep
->size_pointer
,
1321 if (record_full_arch_list_add_mem (tmpaddr
, tmpint
))
1323 vec
+= tdep
->size_iovec
;
1329 case gdb_sys_writev
:
1330 case gdb_sys_getsid
:
1331 case gdb_sys_fdatasync
:
1332 case gdb_sys_sysctl
:
1334 case gdb_sys_munlock
:
1335 case gdb_sys_mlockall
:
1336 case gdb_sys_munlockall
:
1337 case gdb_sys_sched_setparam
:
1340 case gdb_sys_sched_getparam
:
1341 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_int
))
1345 case gdb_sys_sched_setscheduler
:
1346 case gdb_sys_sched_getscheduler
:
1347 case gdb_sys_sched_yield
:
1348 case gdb_sys_sched_get_priority_max
:
1349 case gdb_sys_sched_get_priority_min
:
1352 case gdb_sys_sched_rr_get_interval
:
1353 case gdb_sys_nanosleep
:
1354 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_timespec
))
1358 case gdb_sys_mremap
:
1359 case gdb_sys_setresuid16
:
1362 case gdb_sys_getresuid16
:
1363 if (record_mem_at_reg (regcache
, tdep
->arg1
, tdep
->size_old_uid_t
)
1364 || record_mem_at_reg (regcache
, tdep
->arg2
,
1365 tdep
->size_old_uid_t
)
1366 || record_mem_at_reg (regcache
, tdep
->arg3
,
1367 tdep
->size_old_uid_t
))
1372 case gdb_sys_ni_syscall167
:
1376 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
1381 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &nfds
);
1382 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1383 tdep
->size_pollfd
* nfds
))
1388 case gdb_sys_nfsservctl
:
1389 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
1390 if (tmpulongest
== 7 || tmpulongest
== 8)
1394 if (tmpulongest
== 7)
1395 rsize
= tdep
->size_NFS_FHSIZE
;
1397 rsize
= tdep
->size_knfsd_fh
;
1398 if (record_mem_at_reg (regcache
, tdep
->arg3
, rsize
))
1403 case gdb_sys_setresgid16
:
1406 case gdb_sys_getresgid16
:
1407 if (record_mem_at_reg (regcache
, tdep
->arg1
, tdep
->size_old_gid_t
)
1408 || record_mem_at_reg (regcache
, tdep
->arg2
,
1409 tdep
->size_old_gid_t
)
1410 || record_mem_at_reg (regcache
, tdep
->arg3
,
1411 tdep
->size_old_gid_t
))
1416 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
1417 switch (tmpulongest
)
1420 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_int
))
1424 if (record_mem_at_reg (regcache
, tdep
->arg2
,
1425 tdep
->size_TASK_COMM_LEN
))
1431 case gdb_sys_rt_sigreturn
:
1434 case gdb_sys_rt_sigaction
:
1435 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_sigaction
))
1439 case gdb_sys_rt_sigprocmask
:
1440 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_sigset_t
))
1444 case gdb_sys_rt_sigpending
:
1445 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
1448 ULONGEST sigsetsize
;
1450 regcache_raw_read_unsigned (regcache
, tdep
->arg2
,&sigsetsize
);
1451 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1457 case gdb_sys_rt_sigtimedwait
:
1458 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_siginfo_t
))
1462 case gdb_sys_rt_sigqueueinfo
:
1463 case gdb_sys_rt_sigsuspend
:
1466 case gdb_sys_pread64
:
1467 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
1472 regcache_raw_read_unsigned (regcache
, tdep
->arg3
,&count
);
1473 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1479 case gdb_sys_pwrite64
:
1480 case gdb_sys_chown16
:
1483 case gdb_sys_getcwd
:
1484 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
1489 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &size
);
1490 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1496 case gdb_sys_capget
:
1497 if (record_mem_at_reg (regcache
, tdep
->arg2
,
1498 tdep
->size_cap_user_data_t
))
1502 case gdb_sys_capset
:
1505 case gdb_sys_sigaltstack
:
1506 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_stack_t
))
1510 case gdb_sys_sendfile
:
1511 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_off_t
))
1515 case gdb_sys_ni_syscall188
:
1516 case gdb_sys_ni_syscall189
:
1520 case gdb_sys_getrlimit
:
1521 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_rlimit
))
1528 case gdb_sys_truncate64
:
1529 case gdb_sys_ftruncate64
:
1532 case gdb_sys_stat64
:
1533 case gdb_sys_lstat64
:
1534 case gdb_sys_fstat64
:
1535 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_stat64
))
1539 case gdb_sys_lchown
:
1540 case gdb_sys_getuid
:
1541 case gdb_sys_getgid
:
1542 case gdb_sys_geteuid
:
1543 case gdb_sys_getegid
:
1544 case gdb_sys_setreuid
:
1545 case gdb_sys_setregid
:
1548 case gdb_sys_getgroups
:
1549 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
1552 ULONGEST gidsetsize
;
1554 regcache_raw_read_unsigned (regcache
, tdep
->arg1
,
1556 tmpint
= tdep
->size_gid_t
* (int) gidsetsize
;
1557 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
, tmpint
))
1562 case gdb_sys_setgroups
:
1563 case gdb_sys_fchown
:
1564 case gdb_sys_setresuid
:
1567 case gdb_sys_getresuid
:
1568 if (record_mem_at_reg (regcache
, tdep
->arg1
, tdep
->size_uid_t
)
1569 || record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_uid_t
)
1570 || record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_uid_t
))
1574 case gdb_sys_setresgid
:
1577 case gdb_sys_getresgid
:
1578 if (record_mem_at_reg (regcache
, tdep
->arg1
, tdep
->size_gid_t
)
1579 || record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_gid_t
)
1580 || record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_gid_t
))
1585 case gdb_sys_setuid
:
1586 case gdb_sys_setgid
:
1587 case gdb_sys_setfsuid
:
1588 case gdb_sys_setfsgid
:
1589 case gdb_sys_pivot_root
:
1592 case gdb_sys_mincore
:
1593 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_PAGE_SIZE
))
1597 case gdb_sys_madvise
:
1600 case gdb_sys_fcntl64
:
1601 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
1602 if (tmpulongest
== tdep
->fcntl_F_GETLK64
)
1604 if (record_mem_at_reg (regcache
, tdep
->arg3
,
1605 tdep
->size_flock64
))
1608 else if (tmpulongest
!= tdep
->fcntl_F_SETLK64
1609 && tmpulongest
!= tdep
->fcntl_F_SETLKW64
)
1615 case gdb_sys_ni_syscall222
:
1616 case gdb_sys_ni_syscall223
:
1617 case gdb_sys_gettid
:
1618 case gdb_sys_readahead
:
1619 case gdb_sys_setxattr
:
1620 case gdb_sys_lsetxattr
:
1621 case gdb_sys_fsetxattr
:
1624 case gdb_sys_getxattr
:
1625 case gdb_sys_lgetxattr
:
1626 case gdb_sys_fgetxattr
:
1627 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &tmpulongest
);
1632 regcache_raw_read_unsigned (regcache
, tdep
->arg4
, &size
);
1633 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1639 case gdb_sys_listxattr
:
1640 case gdb_sys_llistxattr
:
1641 case gdb_sys_flistxattr
:
1642 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
1647 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &size
);
1648 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1654 case gdb_sys_removexattr
:
1655 case gdb_sys_lremovexattr
:
1656 case gdb_sys_fremovexattr
:
1660 case gdb_sys_sendfile64
:
1661 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_loff_t
))
1666 case gdb_sys_sched_setaffinity
:
1669 case gdb_sys_sched_getaffinity
:
1670 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &tmpulongest
);
1675 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &len
);
1676 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1682 case gdb_sys_set_thread_area
:
1683 if (record_mem_at_reg (regcache
, tdep
->arg1
, tdep
->size_int
))
1687 case gdb_sys_get_thread_area
:
1688 if (record_mem_at_reg (regcache
, tdep
->arg1
, tdep
->size_user_desc
))
1692 case gdb_sys_io_setup
:
1693 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_long
))
1697 case gdb_sys_io_destroy
:
1700 case gdb_sys_io_getevents
:
1701 regcache_raw_read_unsigned (regcache
, tdep
->arg4
, &tmpulongest
);
1706 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &nr
);
1707 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1708 nr
* tdep
->size_io_event
))
1713 case gdb_sys_io_submit
:
1714 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &tmpulongest
);
1720 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &nr
);
1721 iocbp
= (gdb_byte
*) alloca (nr
* tdep
->size_pointer
);
1722 if (target_read_memory ((CORE_ADDR
) tmpulongest
, iocbp
,
1723 nr
* tdep
->size_pointer
))
1726 gdb_printf (gdb_stdlog
,
1727 "Process record: error reading memory "
1728 "at addr = 0x%s len = %u.\n",
1729 OUTPUT_REG (tmpulongest
, tdep
->arg2
),
1730 (int) (nr
* tdep
->size_pointer
));
1733 for (i
= 0; i
< nr
; i
++)
1736 = (CORE_ADDR
) extract_unsigned_integer (iocbp
,
1739 if (record_full_arch_list_add_mem (tmpaddr
, tdep
->size_iocb
))
1741 iocbp
+= tdep
->size_pointer
;
1746 case gdb_sys_io_cancel
:
1747 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_io_event
))
1751 case gdb_sys_fadvise64
:
1752 case gdb_sys_ni_syscall251
:
1755 case gdb_sys_exit_group
:
1756 if (yquery (_("The next instruction is syscall exit_group. "
1757 "It will make the program exit. "
1758 "Do you want to stop the program?")))
1762 case gdb_sys_lookup_dcookie
:
1763 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
1768 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &len
);
1769 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1775 case gdb_sys_epoll_create
:
1776 case gdb_sys_epoll_ctl
:
1779 case gdb_sys_epoll_wait
:
1780 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
1785 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &maxevents
);
1786 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1788 * tdep
->size_epoll_event
)))
1793 case gdb_sys_remap_file_pages
:
1794 case gdb_sys_set_tid_address
:
1797 case gdb_sys_timer_create
:
1798 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_int
))
1802 case gdb_sys_timer_settime
:
1803 if (record_mem_at_reg (regcache
, tdep
->arg4
, tdep
->size_itimerspec
))
1807 case gdb_sys_timer_gettime
:
1808 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_itimerspec
))
1812 case gdb_sys_timer_getoverrun
:
1813 case gdb_sys_timer_delete
:
1814 case gdb_sys_clock_settime
:
1817 case gdb_sys_clock_gettime
:
1818 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_timespec
))
1822 case gdb_sys_clock_getres
:
1823 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_timespec
))
1827 case gdb_sys_clock_nanosleep
:
1828 if (record_mem_at_reg (regcache
, tdep
->arg4
, tdep
->size_timespec
))
1832 case gdb_sys_statfs64
:
1833 case gdb_sys_fstatfs64
:
1834 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_statfs64
))
1838 case gdb_sys_tgkill
:
1839 case gdb_sys_utimes
:
1840 case gdb_sys_fadvise64_64
:
1841 case gdb_sys_ni_syscall273
:
1845 case gdb_sys_get_mempolicy
:
1846 if (record_mem_at_reg (regcache
, tdep
->arg1
, tdep
->size_int
))
1848 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
1853 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &maxnode
);
1854 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1855 maxnode
* tdep
->size_long
))
1860 case gdb_sys_set_mempolicy
:
1861 case gdb_sys_mq_open
:
1862 case gdb_sys_mq_unlink
:
1863 case gdb_sys_mq_timedsend
:
1866 case gdb_sys_mq_timedreceive
:
1867 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
1872 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &msg_len
);
1873 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1877 if (record_mem_at_reg (regcache
, tdep
->arg4
, tdep
->size_int
))
1881 case gdb_sys_mq_notify
:
1884 case gdb_sys_mq_getsetattr
:
1885 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_mq_attr
))
1889 case gdb_sys_kexec_load
:
1892 case gdb_sys_waitid
:
1893 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_siginfo_t
)
1894 || record_mem_at_reg (regcache
, tdep
->arg5
, tdep
->size_rusage
))
1898 case gdb_sys_ni_syscall285
:
1899 case gdb_sys_add_key
:
1900 case gdb_sys_request_key
:
1903 case gdb_sys_keyctl
:
1904 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
1905 if (tmpulongest
== 6 || tmpulongest
== 11)
1907 regcache_raw_read_unsigned (regcache
, tdep
->arg3
,
1913 regcache_raw_read_unsigned (regcache
, tdep
->arg4
, &buflen
);
1914 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1921 case gdb_sys_ioprio_set
:
1922 case gdb_sys_ioprio_get
:
1923 case gdb_sys_inotify_init
:
1924 case gdb_sys_inotify_add_watch
:
1925 case gdb_sys_inotify_rm_watch
:
1926 case gdb_sys_migrate_pages
:
1927 case gdb_sys_openat
:
1928 case gdb_sys_mkdirat
:
1929 case gdb_sys_mknodat
:
1930 case gdb_sys_fchownat
:
1931 case gdb_sys_futimesat
:
1934 case gdb_sys_fstatat64
:
1935 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_stat64
))
1939 case gdb_sys_unlinkat
:
1940 case gdb_sys_renameat
:
1941 case gdb_sys_linkat
:
1942 case gdb_sys_symlinkat
:
1945 case gdb_sys_readlinkat
:
1946 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &tmpulongest
);
1951 regcache_raw_read_unsigned (regcache
, tdep
->arg4
, &bufsiz
);
1952 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1958 case gdb_sys_fchmodat
:
1959 case gdb_sys_faccessat
:
1962 case gdb_sys_pselect6
:
1963 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_fd_set
)
1964 || record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_fd_set
)
1965 || record_mem_at_reg (regcache
, tdep
->arg4
, tdep
->size_fd_set
)
1966 || record_mem_at_reg (regcache
, tdep
->arg5
, tdep
->size_timespec
))
1971 regcache_raw_read_unsigned (regcache
, tdep
->arg1
, &tmpulongest
);
1976 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &nfds
);
1977 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
1978 tdep
->size_pollfd
* nfds
))
1981 if (record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_timespec
))
1985 case gdb_sys_unshare
:
1986 case gdb_sys_set_robust_list
:
1989 case gdb_sys_get_robust_list
:
1990 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_int
)
1991 || record_mem_at_reg (regcache
, tdep
->arg3
, tdep
->size_int
))
1995 case gdb_sys_splice
:
1996 if (record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_loff_t
)
1997 || record_mem_at_reg (regcache
, tdep
->arg4
, tdep
->size_loff_t
))
2001 case gdb_sys_sync_file_range
:
2003 case gdb_sys_vmsplice
:
2006 case gdb_sys_move_pages
:
2007 regcache_raw_read_unsigned (regcache
, tdep
->arg5
, &tmpulongest
);
2012 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &nr_pages
);
2013 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
,
2014 nr_pages
* tdep
->size_int
))
2019 case gdb_sys_getcpu
:
2020 if (record_mem_at_reg (regcache
, tdep
->arg1
, tdep
->size_int
)
2021 || record_mem_at_reg (regcache
, tdep
->arg2
, tdep
->size_int
)
2022 || record_mem_at_reg (regcache
, tdep
->arg3
,
2023 tdep
->size_ulong
* 2))
2027 case gdb_sys_epoll_pwait
:
2028 regcache_raw_read_unsigned (regcache
, tdep
->arg2
, &tmpulongest
);
2033 regcache_raw_read_unsigned (regcache
, tdep
->arg3
, &maxevents
);
2034 tmpint
= (int) maxevents
* tdep
->size_epoll_event
;
2035 if (record_full_arch_list_add_mem ((CORE_ADDR
) tmpulongest
, tmpint
))
2040 case gdb_sys_fallocate
:
2041 case gdb_sys_eventfd2
:
2042 case gdb_sys_epoll_create1
:
2046 case gdb_sys_inotify_init1
:
2050 gdb_printf (gdb_stderr
,
2051 _("Process record and replay target doesn't "
2052 "support syscall number %d\n"), syscall
);