| /* Process record and replay target code for GNU/Linux. |
| |
| Copyright (C) 2008, 2009 Free Software Foundation, Inc. |
| |
| This file is part of GDB. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 3 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| |
| #include "defs.h" |
| #include "target.h" |
| #include "regcache.h" |
| #include "record.h" |
| #include "linux-record.h" |
| |
| /* These macros are the values of the first argument of system call |
| "sys_ptrace". The values of these macros were obtained from Linux |
| Kernel source. */ |
| |
| #define RECORD_PTRACE_PEEKTEXT 1 |
| #define RECORD_PTRACE_PEEKDATA 2 |
| #define RECORD_PTRACE_PEEKUSR 3 |
| |
| /* These macros are the values of the first argument of system call |
| "sys_socketcall". The values of these macros were obtained from |
| Linux Kernel source. */ |
| |
| #define RECORD_SYS_SOCKET 1 |
| #define RECORD_SYS_BIND 2 |
| #define RECORD_SYS_CONNECT 3 |
| #define RECORD_SYS_LISTEN 4 |
| #define RECORD_SYS_ACCEPT 5 |
| #define RECORD_SYS_GETSOCKNAME 6 |
| #define RECORD_SYS_GETPEERNAME 7 |
| #define RECORD_SYS_SOCKETPAIR 8 |
| #define RECORD_SYS_SEND 9 |
| #define RECORD_SYS_RECV 10 |
| #define RECORD_SYS_SENDTO 11 |
| #define RECORD_SYS_RECVFROM 12 |
| #define RECORD_SYS_SHUTDOWN 13 |
| #define RECORD_SYS_SETSOCKOPT 14 |
| #define RECORD_SYS_GETSOCKOPT 15 |
| #define RECORD_SYS_SENDMSG 16 |
| #define RECORD_SYS_RECVMSG 17 |
| |
| /* These macros are the values of the first argument of system call |
| "sys_ipc". The values of these macros were obtained from Linux |
| Kernel source. */ |
| |
| #define RECORD_SEMOP 1 |
| #define RECORD_SEMGET 2 |
| #define RECORD_SEMCTL 3 |
| #define RECORD_SEMTIMEDOP 4 |
| #define RECORD_MSGSND 11 |
| #define RECORD_MSGRCV 12 |
| #define RECORD_MSGGET 13 |
| #define RECORD_MSGCTL 14 |
| #define RECORD_SHMAT 21 |
| #define RECORD_SHMDT 22 |
| #define RECORD_SHMGET 23 |
| #define RECORD_SHMCTL 24 |
| |
| /* These macros are the values of the first argument of system call |
| "sys_quotactl". The values of these macros were obtained from Linux |
| Kernel source. */ |
| |
| #define RECORD_Q_GETFMT 0x800004 |
| #define RECORD_Q_GETINFO 0x800005 |
| #define RECORD_Q_GETQUOTA 0x800007 |
| #define RECORD_Q_XGETQSTAT (('5' << 8) + 5) |
| #define RECORD_Q_XGETQUOTA (('3' << 8) + 3) |
| |
| /* When the architecture process record get a Linux syscall |
| instruction, it will get a Linux syscall number of this |
| architecture and convert it to the Linux syscall number "num" which |
| is internal to GDB. Most Linux syscalls across architectures in |
| Linux would be similar and mostly differ by sizes of types and |
| structures. This sizes are put to "tdep". |
| |
| Record the values of the registers and memory that will be changed |
| in current system call. |
| |
| Return -1 if something wrong. */ |
| |
| int |
| record_linux_system_call (int num, struct regcache *regcache, |
| struct linux_record_tdep *tdep) |
| { |
| struct gdbarch *gdbarch = get_regcache_arch (regcache); |
| uint32_t tmpu32; |
| |
| switch (num) |
| { |
| /* sys_restart_syscall */ |
| case 0: |
| break; |
| |
| /* sys_exit */ |
| case 1: |
| { |
| int q; |
| target_terminal_ours (); |
| q = |
| yquery (_ ("The next instruction is syscall exit. " |
| "It will make the program exit. " |
| "Do you want to stop the program?")); |
| target_terminal_inferior (); |
| if (q) |
| return 1; |
| } |
| break; |
| |
| /* sys_fork */ |
| case 2: |
| break; |
| |
| /* sys_read */ |
| case 3: |
| { |
| uint32_t addr, count; |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr); |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); |
| if (record_arch_list_add_mem (addr, count)) |
| return -1; |
| } |
| break; |
| |
| /* sys_write */ |
| case 4: |
| /* sys_open */ |
| case 5: |
| /* sys_close */ |
| case 6: |
| /* sys_waitpid */ |
| case 7: |
| /* sys_creat */ |
| case 8: |
| /* sys_link */ |
| case 9: |
| /* sys_unlink */ |
| case 10: |
| /* sys_execve */ |
| case 11: |
| /* sys_chdir */ |
| case 12: |
| /* sys_time */ |
| case 13: |
| /* sys_mknod */ |
| case 14: |
| /* sys_chmod */ |
| case 15: |
| /* sys_lchown16 */ |
| case 16: |
| /* sys_ni_syscall */ |
| case 17: |
| break; |
| |
| /* sys_stat */ |
| case 18: |
| /* sys_fstat */ |
| case 28: |
| /* sys_lstat */ |
| case 84: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size__old_kernel_stat)) |
| return -1; |
| break; |
| |
| /* sys_lseek */ |
| case 19: |
| /* sys_getpid */ |
| case 20: |
| /* sys_mount */ |
| case 21: |
| /* sys_oldumount */ |
| case 22: |
| /* sys_setuid16 */ |
| case 23: |
| /* sys_getuid16 */ |
| case 24: |
| /* sys_stime */ |
| case 25: |
| break; |
| |
| /* sys_ptrace */ |
| case 26: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (tmpu32 == RECORD_PTRACE_PEEKTEXT |
| || tmpu32 == RECORD_PTRACE_PEEKDATA |
| || tmpu32 == RECORD_PTRACE_PEEKUSR) |
| { |
| regcache_raw_read (regcache, tdep->arg4, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, 4)) |
| return -1; |
| } |
| break; |
| |
| /* sys_alarm */ |
| case 27: |
| /* sys_pause */ |
| case 29: |
| /* sys_utime */ |
| case 30: |
| /* sys_ni_syscall */ |
| case 31: |
| /* sys_ni_syscall */ |
| case 32: |
| /* sys_access */ |
| case 33: |
| /* sys_nice */ |
| case 34: |
| /* sys_ni_syscall */ |
| case 35: |
| /* sys_sync */ |
| case 36: |
| /* sys_kill */ |
| case 37: |
| /* sys_rename */ |
| case 38: |
| /* sys_mkdir */ |
| case 39: |
| /* sys_rmdir */ |
| case 40: |
| /* sys_dup */ |
| case 41: |
| /* sys_pipe */ |
| case 42: |
| break; |
| |
| /* sys_times */ |
| case 43: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_tms)) |
| return -1; |
| break; |
| |
| /* sys_ni_syscall */ |
| case 44: |
| /* sys_brk */ |
| case 45: |
| /* sys_setgid16 */ |
| case 46: |
| /* sys_getgid16 */ |
| case 47: |
| /* sys_signal */ |
| case 48: |
| /* sys_geteuid16 */ |
| case 49: |
| /* sys_getegid16 */ |
| case 50: |
| /* sys_acct */ |
| case 51: |
| /* sys_umount */ |
| case 52: |
| /* sys_ni_syscall */ |
| case 53: |
| break; |
| |
| /* sys_ioctl */ |
| case 54: |
| /* XXX Need to add a lot of support of other ioctl requests. */ |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (tmpu32 == tdep->ioctl_FIOCLEX || tmpu32 == tdep->ioctl_FIONCLEX |
| || tmpu32 == tdep->ioctl_FIONBIO || tmpu32 == tdep->ioctl_FIOASYNC |
| || tmpu32 == tdep->ioctl_TCSETS || tmpu32 == tdep->ioctl_TCSETSW |
| || tmpu32 == tdep->ioctl_TCSETSF || tmpu32 == tdep->ioctl_TCSETA |
| || tmpu32 == tdep->ioctl_TCSETAW || tmpu32 == tdep->ioctl_TCSETAF |
| || tmpu32 == tdep->ioctl_TCSBRK || tmpu32 == tdep->ioctl_TCXONC |
| || tmpu32 == tdep->ioctl_TCFLSH || tmpu32 == tdep->ioctl_TIOCEXCL |
| || tmpu32 == tdep->ioctl_TIOCNXCL |
| || tmpu32 == tdep->ioctl_TIOCSCTTY |
| || tmpu32 == tdep->ioctl_TIOCSPGRP || tmpu32 == tdep->ioctl_TIOCSTI |
| || tmpu32 == tdep->ioctl_TIOCSWINSZ |
| || tmpu32 == tdep->ioctl_TIOCMBIS || tmpu32 == tdep->ioctl_TIOCMBIC |
| || tmpu32 == tdep->ioctl_TIOCMSET |
| || tmpu32 == tdep->ioctl_TIOCSSOFTCAR |
| || tmpu32 == tdep->ioctl_TIOCCONS |
| || tmpu32 == tdep->ioctl_TIOCSSERIAL |
| || tmpu32 == tdep->ioctl_TIOCPKT || tmpu32 == tdep->ioctl_TIOCNOTTY |
| || tmpu32 == tdep->ioctl_TIOCSETD || tmpu32 == tdep->ioctl_TCSBRKP |
| || tmpu32 == tdep->ioctl_TIOCTTYGSTRUCT |
| || tmpu32 == tdep->ioctl_TIOCSBRK || tmpu32 == tdep->ioctl_TIOCCBRK |
| || tmpu32 == tdep->ioctl_TCSETS2 || tmpu32 == tdep->ioctl_TCSETSW2 |
| || tmpu32 == tdep->ioctl_TCSETSF2 |
| || tmpu32 == tdep->ioctl_TIOCSPTLCK |
| || tmpu32 == tdep->ioctl_TIOCSERCONFIG |
| || tmpu32 == tdep->ioctl_TIOCSERGWILD |
| || tmpu32 == tdep->ioctl_TIOCSERSWILD |
| || tmpu32 == tdep->ioctl_TIOCSLCKTRMIOS |
| || tmpu32 == tdep->ioctl_TIOCSERGETMULTI |
| || tmpu32 == tdep->ioctl_TIOCSERSETMULTI |
| || tmpu32 == tdep->ioctl_TIOCMIWAIT |
| || tmpu32 == tdep->ioctl_TIOCSHAYESESP) |
| { |
| /* Nothing to do. */ |
| } |
| else if (tmpu32 == tdep->ioctl_TCGETS || tmpu32 == tdep->ioctl_TCGETA |
| || tmpu32 == tdep->ioctl_TIOCGLCKTRMIOS) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_termios)) |
| return -1; |
| } |
| else if (tmpu32 == tdep->ioctl_TIOCGPGRP |
| || tmpu32 == tdep->ioctl_TIOCGSID) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t)) |
| return -1; |
| } |
| else if (tmpu32 == tdep->ioctl_TIOCOUTQ |
| || tmpu32 == tdep->ioctl_TIOCMGET |
| || tmpu32 == tdep->ioctl_TIOCGSOFTCAR |
| || tmpu32 == tdep->ioctl_FIONREAD |
| || tmpu32 == tdep->ioctl_TIOCINQ |
| || tmpu32 == tdep->ioctl_TIOCGETD |
| || tmpu32 == tdep->ioctl_TIOCGPTN |
| || tmpu32 == tdep->ioctl_TIOCSERGETLSR) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_int)) |
| return -1; |
| } |
| else if (tmpu32 == tdep->ioctl_TIOCGWINSZ) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_winsize)) |
| return -1; |
| } |
| else if (tmpu32 == tdep->ioctl_TIOCLINUX) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| /* This syscall affect a char size memory. */ |
| if (record_arch_list_add_mem (tmpu32, 1)) |
| return -1; |
| } |
| else if (tmpu32 == tdep->ioctl_TIOCGSERIAL) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct)) |
| return -1; |
| } |
| else if (tmpu32 == tdep->ioctl_TCGETS2) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_termios2)) |
| return -1; |
| } |
| else if (tmpu32 == tdep->ioctl_FIOQSIZE) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) |
| return -1; |
| } |
| else if (tmpu32 == tdep->ioctl_TIOCGICOUNT) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem |
| (tmpu32, tdep->size_serial_icounter_struct)) |
| return -1; |
| } |
| else if (tmpu32 == tdep->ioctl_TIOCGHAYESESP) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config)) |
| return -1; |
| } |
| else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT) |
| { |
| printf_unfiltered (_("Process record and replay target doesn't " |
| "support ioctl request TIOCSERGSTRUCT\n")); |
| return 1; |
| } |
| else |
| { |
| printf_unfiltered (_("Process record and replay target doesn't " |
| "support ioctl request 0x%s.\n"), |
| phex_nz (tmpu32, 4)); |
| return 1; |
| } |
| break; |
| |
| /* sys_fcntl */ |
| case 55: |
| /* XXX */ |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| sys_fcntl: |
| if (tmpu32 == tdep->fcntl_F_GETLK) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_flock)) |
| return -1; |
| } |
| break; |
| |
| /* sys_ni_syscall */ |
| case 56: |
| /* sys_setpgid */ |
| case 57: |
| /* sys_ni_syscall */ |
| case 58: |
| break; |
| |
| /* sys_olduname */ |
| case 59: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_oldold_utsname)) |
| return -1; |
| break; |
| |
| /* sys_umask */ |
| case 60: |
| /* sys_chroot */ |
| case 61: |
| break; |
| |
| /* sys_ustat */ |
| case 62: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_ustat)) |
| return -1; |
| break; |
| |
| /* sys_dup2 */ |
| case 63: |
| /* sys_getppid */ |
| case 64: |
| /* sys_getpgrp */ |
| case 65: |
| /* sys_setsid */ |
| case 66: |
| break; |
| |
| /* sys_sigaction */ |
| case 67: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigaction)) |
| return -1; |
| break; |
| |
| /* sys_sgetmask */ |
| case 68: |
| /* sys_ssetmask */ |
| case 69: |
| /* sys_setreuid16 */ |
| case 70: |
| /* sys_setregid16 */ |
| case 71: |
| /* sys_sigsuspend */ |
| case 72: |
| break; |
| |
| /* sys_sigpending */ |
| case 73: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t)) |
| return -1; |
| break; |
| |
| /* sys_sethostname */ |
| case 74: |
| /* sys_setrlimit */ |
| case 75: |
| break; |
| |
| /* sys_old_getrlimit */ |
| case 76: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit)) |
| return -1; |
| break; |
| |
| /* sys_getrusage */ |
| case 77: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) |
| return -1; |
| break; |
| |
| /* sys_gettimeofday */ |
| case 78: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_timeval)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_timezone)) |
| return -1; |
| break; |
| |
| /* sys_settimeofday */ |
| case 79: |
| break; |
| |
| /* sys_getgroups16 */ |
| case 80: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) |
| return -1; |
| break; |
| |
| /* sys_setgroups16 */ |
| case 81: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) |
| return -1; |
| break; |
| |
| /* old_select */ |
| case 82: |
| { |
| struct sel_arg_struct |
| { |
| CORE_ADDR n; |
| CORE_ADDR inp; |
| CORE_ADDR outp; |
| CORE_ADDR exp; |
| CORE_ADDR tvp; |
| } sel; |
| |
| regcache_raw_read (regcache, tdep->arg1, |
| (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel))) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error reading memory " |
| "at addr = %s len = %lu.\n", |
| paddress (gdbarch, tmpu32), |
| (unsigned long)sizeof (sel)); |
| return -1; |
| } |
| if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set)) |
| return -1; |
| if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set)) |
| return -1; |
| if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set)) |
| return -1; |
| if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval)) |
| return -1; |
| } |
| } |
| break; |
| |
| /* sys_symlink */ |
| case 83: |
| break; |
| |
| /* sys_readlink */ |
| case 85: |
| { |
| uint32_t len; |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & tmpu32); |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len); |
| if (record_arch_list_add_mem (tmpu32, len)) |
| return -1; |
| } |
| break; |
| |
| /* sys_uselib */ |
| case 86: |
| /* sys_swapon */ |
| case 87: |
| break; |
| |
| /* sys_reboot */ |
| case 88: |
| { |
| int q; |
| target_terminal_ours (); |
| q = |
| yquery (_("The next instruction is syscall reboot. " |
| "It will restart the computer. " |
| "Do you want to stop the program?")); |
| target_terminal_inferior (); |
| if (q) |
| return 1; |
| } |
| break; |
| |
| /* old_readdir */ |
| case 89: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_dirent)) |
| return -1; |
| break; |
| |
| /* old_mmap */ |
| case 90: |
| break; |
| |
| /* sys_munmap */ |
| case 91: |
| { |
| int q; |
| uint32_t len; |
| |
| regcache_raw_read (regcache, tdep->arg1, |
| (gdb_byte *) & tmpu32); |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len); |
| target_terminal_ours (); |
| q = |
| yquery (_("The next instruction is syscall munmap. " |
| "It will free the memory addr = %s len = %u. " |
| "It will make record target get error. " |
| "Do you want to stop the program?"), |
| paddress (gdbarch, tmpu32), (int)len); |
| target_terminal_inferior (); |
| if (q) |
| return 1; |
| } |
| break; |
| |
| /* sys_truncate */ |
| case 92: |
| /* sys_ftruncate */ |
| case 93: |
| /* sys_fchmod */ |
| case 94: |
| /* sys_fchown16 */ |
| case 95: |
| /* sys_getpriority */ |
| case 96: |
| /* sys_setpriority */ |
| case 97: |
| /* sys_ni_syscall */ |
| case 98: |
| break; |
| |
| /* sys_statfs */ |
| case 99: |
| /* sys_fstatfs */ |
| case 100: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_statfs)) |
| return -1; |
| break; |
| |
| /* sys_ioperm */ |
| case 101: |
| break; |
| |
| /* sys_socketcall */ |
| case 102: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| switch (tmpu32) |
| { |
| case RECORD_SYS_SOCKET: |
| case RECORD_SYS_BIND: |
| case RECORD_SYS_CONNECT: |
| case RECORD_SYS_LISTEN: |
| break; |
| case RECORD_SYS_ACCEPT: |
| case RECORD_SYS_GETSOCKNAME: |
| case RECORD_SYS_GETPEERNAME: |
| { |
| uint32_t a[3]; |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error reading " |
| "memory at addr = %s len = %lu.\n", |
| paddress (gdbarch, tmpu32), |
| (unsigned long)sizeof (a)); |
| return -1; |
| } |
| if (record_arch_list_add_mem (a[1], tdep->size_sockaddr)) |
| return -1; |
| if (record_arch_list_add_mem (a[2], tdep->size_int)) |
| return -1; |
| } |
| } |
| break; |
| |
| case RECORD_SYS_SOCKETPAIR: |
| { |
| uint32_t a[4]; |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error reading " |
| "memory at addr = %s len = %lu.\n", |
| paddress (gdbarch, tmpu32), |
| (unsigned long)sizeof (a)); |
| return -1; |
| } |
| if (record_arch_list_add_mem (a[3], tdep->size_int)) |
| return -1; |
| } |
| } |
| break; |
| case RECORD_SYS_SEND: |
| case RECORD_SYS_SENDTO: |
| break; |
| case RECORD_SYS_RECV: |
| { |
| uint32_t a[3]; |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error reading " |
| "memory at addr = %s len = %lu.\n", |
| paddress (gdbarch, tmpu32), |
| (unsigned long)sizeof (a)); |
| return -1; |
| } |
| if (a[2]) |
| { |
| if (target_read_memory |
| (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error reading " |
| "memory at addr = %s " |
| "len = %lu.\n", |
| paddress (gdbarch, a[2]), |
| (unsigned long)sizeof (a[2])); |
| return -1; |
| } |
| if (record_arch_list_add_mem (a[1], a[2])) |
| return -1; |
| } |
| } |
| } |
| break; |
| case RECORD_SYS_RECVFROM: |
| { |
| uint32_t a[6]; |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error reading " |
| "memory at addr = %s len = %lu.\n", |
| paddress (gdbarch, tmpu32), |
| (unsigned long)sizeof (a)); |
| return -1; |
| } |
| if (a[2]) |
| { |
| if (target_read_memory |
| (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error reading " |
| "memory at addr = %s " |
| "len = %lu.\n", |
| paddress (gdbarch, a[2]), |
| (unsigned long)sizeof (a[2])); |
| return -1; |
| } |
| if (record_arch_list_add_mem (a[1], a[2])) |
| return -1; |
| if (record_arch_list_add_mem (a[4], tdep->size_sockaddr)) |
| return -1; |
| if (record_arch_list_add_mem (a[5], tdep->size_int)) |
| return -1; |
| } |
| } |
| } |
| break; |
| case RECORD_SYS_SHUTDOWN: |
| case RECORD_SYS_SETSOCKOPT: |
| break; |
| case RECORD_SYS_GETSOCKOPT: |
| { |
| uint32_t a[5]; |
| uint32_t av; |
| |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error reading " |
| "memory at addr = %s len = %lu.\n", |
| paddress (gdbarch, tmpu32), |
| (unsigned long)sizeof (a)); |
| return -1; |
| } |
| if (a[4]) |
| { |
| if (target_read_memory |
| (a[4], (gdb_byte *) & av, sizeof (av))) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error reading " |
| "memory at addr = %s " |
| "len = %lu.\n", |
| paddress (gdbarch, a[4]), |
| (unsigned long)sizeof (av)); |
| return -1; |
| } |
| if (record_arch_list_add_mem (a[3], av)) |
| return -1; |
| if (record_arch_list_add_mem (a[4], tdep->size_int)) |
| return -1; |
| } |
| } |
| } |
| break; |
| case RECORD_SYS_SENDMSG: |
| break; |
| case RECORD_SYS_RECVMSG: |
| { |
| uint32_t a[2], i; |
| struct record_msghdr |
| { |
| uint32_t msg_name; |
| uint32_t msg_namelen; |
| uint32_t msg_iov; |
| uint32_t msg_iovlen; |
| uint32_t msg_control; |
| uint32_t msg_controllen; |
| uint32_t msg_flags; |
| } rec; |
| struct record_iovec |
| { |
| uint32_t iov_base; |
| uint32_t iov_len; |
| } iov; |
| |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error reading " |
| "memory at addr = %s len = %lu.\n", |
| paddress (gdbarch, tmpu32), |
| (unsigned long)sizeof (a)); |
| return -1; |
| } |
| if (record_arch_list_add_mem (a[1], tdep->size_msghdr)) |
| return -1; |
| if (a[1]) |
| { |
| if (target_read_memory |
| (a[1], (gdb_byte *) & rec, sizeof (rec))) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error reading " |
| "memory at addr = %s " |
| "len = %lu.\n", |
| paddress (gdbarch, a[1]), |
| (unsigned long)sizeof (rec)); |
| return -1; |
| } |
| if (record_arch_list_add_mem |
| (rec.msg_name, rec.msg_namelen)) |
| return -1; |
| if (record_arch_list_add_mem |
| (rec.msg_control, rec.msg_controllen)) |
| return -1; |
| if (rec.msg_iov) |
| { |
| for (i = 0; i < rec.msg_iovlen; i++) |
| { |
| if (target_read_memory |
| (rec.msg_iov, (gdb_byte *) & iov, |
| sizeof (iov))) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error " |
| "reading memory at " |
| "addr = %s " |
| "len = %lu.\n", |
| paddress (gdbarch, |
| rec.msg_iov), |
| (unsigned long)sizeof (iov)); |
| return -1; |
| } |
| if (record_arch_list_add_mem |
| (iov.iov_base, iov.iov_len)) |
| return -1; |
| rec.msg_iov += sizeof (struct record_iovec); |
| } |
| } |
| } |
| } |
| } |
| break; |
| default: |
| printf_unfiltered (_("Process record and replay target " |
| "doesn't support socketcall call 0x%s\n"), |
| phex_nz (tmpu32, 4)); |
| return -1; |
| break; |
| } |
| break; |
| |
| /* sys_syslog */ |
| case 103: |
| break; |
| |
| /* sys_setitimer */ |
| case 104: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval)) |
| return -1; |
| break; |
| |
| /* sys_getitimer */ |
| case 105: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval)) |
| return -1; |
| break; |
| |
| /* sys_newstat */ |
| case 106: |
| /* sys_newlstat */ |
| case 107: |
| /* sys_newfstat */ |
| case 108: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_stat)) |
| return -1; |
| break; |
| |
| /* sys_uname */ |
| case 109: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_old_utsname)) |
| return -1; |
| break; |
| |
| /* sys_iopl */ |
| case 110: |
| /* sys_vhangup */ |
| case 111: |
| /* sys_ni_syscall */ |
| case 112: |
| /* sys_vm86old */ |
| case 113: |
| break; |
| |
| /* sys_wait4 */ |
| case 114: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_int)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) |
| return -1; |
| break; |
| |
| /* sys_swapoff */ |
| case 115: |
| break; |
| |
| /* sys_sysinfo */ |
| case 116: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_sysinfo)) |
| return -1; |
| break; |
| |
| /* sys_ipc */ |
| case 117: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| switch (tmpu32) |
| { |
| case RECORD_MSGRCV: |
| { |
| int32_t second; |
| uint32_t ptr; |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & second); |
| regcache_raw_read (regcache, tdep->arg5, |
| (gdb_byte *) & ptr); |
| if (record_arch_list_add_mem (ptr, second + tdep->size_long)) |
| return -1; |
| } |
| break; |
| case RECORD_MSGCTL: |
| regcache_raw_read (regcache, tdep->arg5, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_msqid_ds)) |
| return -1; |
| break; |
| case RECORD_SHMAT: |
| regcache_raw_read (regcache, tdep->arg4, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_ulong)) |
| return -1; |
| break; |
| case RECORD_SHMCTL: |
| regcache_raw_read (regcache, tdep->arg5, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_shmid_ds)) |
| return -1; |
| break; |
| } |
| break; |
| |
| /* sys_fsync */ |
| case 118: |
| /* sys_sigreturn */ |
| case 119: |
| /* sys_clone */ |
| case 120: |
| /* sys_setdomainname */ |
| case 121: |
| break; |
| |
| /* sys_newuname */ |
| case 122: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_new_utsname)) |
| return -1; |
| break; |
| |
| /* sys_modify_ldt */ |
| case 123: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (tmpu32 == 0 || tmpu32 == 2) |
| { |
| uint32_t ptr, bytecount; |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & ptr); |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & bytecount); |
| if (record_arch_list_add_mem (ptr, bytecount)) |
| return -1; |
| } |
| break; |
| |
| /* sys_adjtimex */ |
| case 124: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_timex)) |
| return -1; |
| break; |
| |
| /* sys_mprotect */ |
| case 125: |
| break; |
| |
| /* sys_sigprocmask */ |
| case 126: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t)) |
| return -1; |
| break; |
| |
| /* sys_ni_syscall */ |
| case 127: |
| /* sys_init_module */ |
| case 128: |
| /* sys_delete_module */ |
| case 129: |
| /* sys_ni_syscall */ |
| case 130: |
| break; |
| |
| /* sys_quotactl */ |
| case 131: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| switch (tmpu32) |
| { |
| case RECORD_Q_GETFMT: |
| regcache_raw_read (regcache, tdep->arg4, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, 4)) |
| return -1; |
| break; |
| case RECORD_Q_GETINFO: |
| regcache_raw_read (regcache, tdep->arg4, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_mem_dqinfo)) |
| return -1; |
| break; |
| case RECORD_Q_GETQUOTA: |
| regcache_raw_read (regcache, tdep->arg4, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_if_dqblk)) |
| return -1; |
| break; |
| case RECORD_Q_XGETQSTAT: |
| case RECORD_Q_XGETQUOTA: |
| regcache_raw_read (regcache, tdep->arg4, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_fs_quota_stat)) |
| return -1; |
| break; |
| } |
| break; |
| |
| /* sys_getpgid */ |
| case 132: |
| /* sys_fchdir */ |
| case 133: |
| /* sys_bdflush */ |
| case 134: |
| break; |
| |
| /* sys_sysfs */ |
| case 135: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (tmpu32 == 2) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| /*XXX the size of memory is not very clear. */ |
| if (record_arch_list_add_mem (tmpu32, 10)) |
| return -1; |
| } |
| break; |
| |
| /* sys_personality */ |
| case 136: |
| /* sys_ni_syscall */ |
| case 137: |
| /* sys_setfsuid16 */ |
| case 138: |
| /* sys_setfsgid16 */ |
| case 139: |
| break; |
| |
| /* sys_llseek */ |
| case 140: |
| regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) |
| return -1; |
| break; |
| |
| /* sys_getdents */ |
| case 141: |
| { |
| uint32_t count; |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & tmpu32); |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_dirent * count)) |
| return -1; |
| } |
| break; |
| |
| /* sys_select */ |
| case 142: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_timeval)) |
| return -1; |
| break; |
| |
| /* sys_flock */ |
| case 143: |
| /* sys_msync */ |
| case 144: |
| break; |
| |
| /* sys_readv */ |
| case 145: |
| { |
| uint32_t vec; |
| uint32_t vlen; |
| struct record_iovec |
| { |
| uint32_t iov_base; |
| uint32_t iov_len; |
| } iov; |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec); |
| if (vec) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & vlen); |
| for (tmpu32 = 0; tmpu32 < vlen; tmpu32++) |
| { |
| if (target_read_memory |
| (vec, (gdb_byte *) & iov, sizeof (struct record_iovec))) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error reading " |
| "memory at addr = %s len = %lu.\n", |
| paddress (gdbarch, vec), |
| (unsigned long)sizeof (struct record_iovec)); |
| return -1; |
| } |
| if (record_arch_list_add_mem (iov.iov_base, iov.iov_len)) |
| return -1; |
| vec += sizeof (struct record_iovec); |
| } |
| } |
| } |
| break; |
| |
| /* sys_writev */ |
| case 146: |
| /* sys_getsid */ |
| case 147: |
| /* sys_fdatasync */ |
| case 148: |
| /* sys_sysctl */ |
| case 149: |
| /* sys_mlock */ |
| case 150: |
| /* sys_munlock */ |
| case 151: |
| /* sys_mlockall */ |
| case 152: |
| /* sys_munlockall */ |
| case 153: |
| /* sys_sched_setparam */ |
| case 154: |
| break; |
| |
| /* sys_sched_getparam */ |
| case 155: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_int)) |
| return -1; |
| break; |
| |
| /* sys_sched_setscheduler */ |
| case 156: |
| /* sys_sched_getscheduler */ |
| case 157: |
| /* sys_sched_yield */ |
| case 158: |
| /* sys_sched_get_priority_max */ |
| case 159: |
| /* sys_sched_get_priority_min */ |
| case 160: |
| break; |
| |
| /* sys_sched_rr_get_interval */ |
| case 161: |
| /* sys_nanosleep */ |
| case 162: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) |
| return -1; |
| break; |
| |
| /* sys_mremap */ |
| case 163: |
| /* sys_setresuid16 */ |
| case 164: |
| break; |
| |
| /* sys_getresuid16 */ |
| case 165: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) |
| return -1; |
| break; |
| |
| /* sys_vm86 */ |
| case 166: |
| /* sys_ni_syscall */ |
| case 167: |
| break; |
| |
| /* sys_poll */ |
| case 168: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| uint32_t nfds; |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & nfds); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds)) |
| return -1; |
| } |
| break; |
| |
| /* sys_nfsservctl */ |
| case 169: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (tmpu32 == 7 || tmpu32 == 8) |
| { |
| uint32_t rsize; |
| if (tmpu32 == 7) |
| rsize = tdep->size_NFS_FHSIZE; |
| else |
| rsize = tdep->size_knfsd_fh; |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, rsize)) |
| return -1; |
| } |
| break; |
| |
| /* sys_setresgid16 */ |
| case 170: |
| break; |
| |
| /* sys_getresgid16 */ |
| case 171: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) |
| return -1; |
| break; |
| |
| /* sys_prctl */ |
| case 172: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| switch (tmpu32) |
| { |
| case 2: |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_int)) |
| return -1; |
| break; |
| case 16: |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_TASK_COMM_LEN)) |
| return -1; |
| break; |
| } |
| break; |
| |
| /* sys_rt_sigreturn */ |
| case 173: |
| break; |
| |
| /* sys_rt_sigaction */ |
| case 174: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_sigaction)) |
| return -1; |
| break; |
| |
| /* sys_rt_sigprocmask */ |
| case 175: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_sigset_t)) |
| return -1; |
| break; |
| |
| /* sys_rt_sigpending */ |
| case 176: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| uint32_t sigsetsize; |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & sigsetsize); |
| if (record_arch_list_add_mem (tmpu32, sigsetsize)) |
| return -1; |
| } |
| break; |
| |
| /* sys_rt_sigtimedwait */ |
| case 177: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo_t)) |
| return -1; |
| break; |
| |
| /* sys_rt_sigqueueinfo */ |
| case 178: |
| /* sys_rt_sigsuspend */ |
| case 179: |
| break; |
| |
| /* sys_pread64 */ |
| case 180: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| uint32_t count; |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & count); |
| if (record_arch_list_add_mem (tmpu32, count)) |
| return -1; |
| } |
| break; |
| |
| /* sys_pwrite64 */ |
| case 181: |
| /* sys_chown16 */ |
| case 182: |
| break; |
| |
| /* sys_getcwd */ |
| case 183: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| uint32_t size; |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & size); |
| if (record_arch_list_add_mem (tmpu32, size)) |
| return -1; |
| } |
| break; |
| |
| /* sys_capget */ |
| case 184: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_cap_user_data_t)) |
| return -1; |
| break; |
| |
| /* sys_capset */ |
| case 185: |
| break; |
| |
| /* sys_sigaltstack */ |
| case 186: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_stack_t)) |
| return -1; |
| break; |
| |
| /* sys_sendfile */ |
| case 187: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_off_t)) |
| return -1; |
| break; |
| |
| /* sys_ni_syscall */ |
| case 188: |
| /* sys_ni_syscall */ |
| case 189: |
| /* sys_vfork */ |
| case 190: |
| break; |
| |
| /* sys_getrlimit */ |
| case 191: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit)) |
| return -1; |
| break; |
| |
| /* sys_mmap2 */ |
| case 192: |
| break; |
| |
| /* sys_truncate64 */ |
| case 193: |
| /* sys_ftruncate64 */ |
| case 194: |
| break; |
| |
| /* sys_stat64 */ |
| case 195: |
| /* sys_lstat64 */ |
| case 196: |
| /* sys_fstat64 */ |
| case 197: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_stat64)) |
| return -1; |
| break; |
| |
| /* sys_lchown */ |
| case 198: |
| /* sys_getuid */ |
| case 199: |
| /* sys_getgid */ |
| case 200: |
| /* sys_geteuid */ |
| case 201: |
| /* sys_getegid */ |
| case 202: |
| /* sys_setreuid */ |
| case 203: |
| /* sys_setregid */ |
| case 204: |
| break; |
| |
| /* sys_getgroups */ |
| case 205: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| int gidsetsize; |
| regcache_raw_read (regcache, tdep->arg1, |
| (gdb_byte *) & gidsetsize); |
| if (record_arch_list_add_mem |
| (tmpu32, tdep->size_gid_t * gidsetsize)) |
| return -1; |
| } |
| break; |
| |
| /* sys_setgroups */ |
| case 206: |
| /* sys_fchown */ |
| case 207: |
| /* sys_setresuid */ |
| case 208: |
| break; |
| |
| /* sys_getresuid */ |
| case 209: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) |
| return -1; |
| break; |
| |
| /* sys_setresgid */ |
| case 210: |
| break; |
| |
| /* sys_getresgid */ |
| case 211: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) |
| return -1; |
| break; |
| |
| /* sys_chown */ |
| case 212: |
| /* sys_setuid */ |
| case 213: |
| /* sys_setgid */ |
| case 214: |
| /* sys_setfsuid */ |
| case 215: |
| /* sys_setfsgid */ |
| case 216: |
| /* sys_pivot_root */ |
| case 217: |
| break; |
| |
| /* sys_mincore */ |
| case 218: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_PAGE_SIZE)) |
| return -1; |
| break; |
| |
| /* sys_madvise */ |
| case 219: |
| break; |
| |
| /* sys_getdents64 */ |
| case 220: |
| { |
| uint32_t count; |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & tmpu32); |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count)) |
| return -1; |
| } |
| break; |
| |
| /* sys_fcntl64 */ |
| case 221: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (tmpu32 == tdep->fcntl_F_GETLK64) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_flock64)) |
| return -1; |
| } |
| else if (tmpu32 != tdep->fcntl_F_SETLK64 |
| && tmpu32 != tdep->fcntl_F_SETLKW64) |
| { |
| goto sys_fcntl; |
| } |
| break; |
| |
| /* sys_ni_syscall */ |
| case 222: |
| /* sys_ni_syscall */ |
| case 223: |
| /* sys_gettid */ |
| case 224: |
| /* sys_readahead */ |
| case 225: |
| /* sys_setxattr */ |
| case 226: |
| /* sys_lsetxattr */ |
| case 227: |
| /* sys_fsetxattr */ |
| case 228: |
| break; |
| |
| /* sys_getxattr */ |
| case 229: |
| /* sys_lgetxattr */ |
| case 230: |
| /* sys_fgetxattr */ |
| case 231: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| uint32_t size; |
| regcache_raw_read (regcache, tdep->arg4, |
| (gdb_byte *) & size); |
| if (record_arch_list_add_mem (tmpu32, size)) |
| return -1; |
| } |
| break; |
| |
| /* sys_listxattr */ |
| case 232: |
| /* sys_llistxattr */ |
| case 233: |
| /* sys_flistxattr */ |
| case 234: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| uint32_t size; |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & size); |
| if (record_arch_list_add_mem (tmpu32, size)) |
| return -1; |
| } |
| break; |
| |
| /* sys_removexattr */ |
| case 235: |
| /* sys_lremovexattr */ |
| case 236: |
| /* sys_fremovexattr */ |
| case 237: |
| /* sys_tkill */ |
| case 238: |
| break; |
| |
| /* sys_sendfile64 */ |
| case 239: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) |
| return -1; |
| break; |
| |
| /* sys_futex */ |
| case 240: |
| /* sys_sched_setaffinity */ |
| case 241: |
| break; |
| |
| /* sys_sched_getaffinity */ |
| case 242: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| uint32_t len; |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len); |
| if (record_arch_list_add_mem (tmpu32, len)) |
| return -1; |
| } |
| break; |
| |
| /* sys_set_thread_area */ |
| case 243: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_int)) |
| return -1; |
| break; |
| |
| /* sys_get_thread_area */ |
| case 244: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_user_desc)) |
| return -1; |
| break; |
| |
| /* sys_io_setup */ |
| case 245: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_long)) |
| return -1; |
| break; |
| |
| /* sys_io_destroy */ |
| case 246: |
| break; |
| |
| /* sys_io_getevents */ |
| case 247: |
| regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| int32_t nr; |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & nr); |
| if (record_arch_list_add_mem (tmpu32, nr * tdep->size_io_event)) |
| return -1; |
| } |
| break; |
| |
| /* sys_io_submit */ |
| case 248: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| int32_t i, nr; |
| uint32_t *iocbp; |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr); |
| iocbp = (uint32_t *) alloca (nr * tdep->size_int); |
| if (target_read_memory |
| (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int)) |
| { |
| if (record_debug) |
| fprintf_unfiltered (gdb_stdlog, |
| "Process record: error reading memory " |
| "at addr = %s len = %u.\n", |
| paddress (gdbarch, tmpu32), |
| (int)(nr * tdep->size_int)); |
| return -1; |
| } |
| for (i = 0; i < nr; i++) |
| { |
| if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb)) |
| return -1; |
| } |
| } |
| break; |
| |
| /* sys_io_cancel */ |
| case 249: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_io_event)) |
| return -1; |
| break; |
| |
| /* sys_fadvise64 */ |
| case 250: |
| /* sys_ni_syscall */ |
| case 251: |
| break; |
| |
| /* sys_exit_group */ |
| case 252: |
| { |
| int q; |
| target_terminal_ours (); |
| q = |
| yquery (_("The next instruction is syscall exit_group. " |
| "It will make the program exit. " |
| "Do you want to stop the program?")); |
| target_terminal_inferior (); |
| if (q) |
| return 1; |
| } |
| break; |
| |
| /* sys_lookup_dcookie */ |
| case 253: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| uint32_t len; |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len); |
| if (record_arch_list_add_mem (tmpu32, len)) |
| return -1; |
| } |
| break; |
| |
| /* sys_epoll_create */ |
| case 254: |
| /* sys_epoll_ctl */ |
| case 255: |
| break; |
| |
| /* sys_epoll_wait */ |
| case 256: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| int32_t maxevents; |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & maxevents); |
| if (record_arch_list_add_mem |
| (tmpu32, maxevents * tdep->size_epoll_event)) |
| return -1; |
| } |
| break; |
| |
| /* sys_remap_file_pages */ |
| case 257: |
| /* sys_set_tid_address */ |
| case 258: |
| break; |
| |
| /* sys_timer_create */ |
| case 259: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_int)) |
| return -1; |
| break; |
| |
| /* sys_timer_settime */ |
| case 260: |
| regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec)) |
| return -1; |
| break; |
| |
| /* sys_timer_gettime */ |
| case 261: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec)) |
| return -1; |
| break; |
| |
| /* sys_timer_getoverrun */ |
| case 262: |
| /* sys_timer_delete */ |
| case 263: |
| /* sys_clock_settime */ |
| case 264: |
| break; |
| |
| /* sys_clock_gettime */ |
| case 265: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) |
| return -1; |
| break; |
| |
| /* sys_clock_getres */ |
| case 266: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) |
| return -1; |
| break; |
| |
| /* sys_clock_nanosleep */ |
| case 267: |
| regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) |
| return -1; |
| break; |
| |
| /* sys_statfs64 */ |
| case 268: |
| /* sys_fstatfs64 */ |
| case 269: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_statfs64)) |
| return -1; |
| break; |
| |
| /* sys_tgkill */ |
| case 270: |
| /* sys_utimes */ |
| case 271: |
| /* sys_fadvise64_64 */ |
| case 272: |
| /* sys_ni_syscall */ |
| case 273: |
| /* sys_mbind */ |
| case 274: |
| break; |
| |
| /* sys_get_mempolicy */ |
| case 275: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_int)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| uint32_t maxnode; |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & maxnode); |
| if (record_arch_list_add_mem (tmpu32, maxnode * tdep->size_long)) |
| return -1; |
| } |
| break; |
| |
| /* sys_set_mempolicy */ |
| case 276: |
| /* sys_mq_open */ |
| case 277: |
| /* sys_mq_unlink */ |
| case 278: |
| /* sys_mq_timedsend */ |
| case 279: |
| break; |
| |
| /* sys_mq_timedreceive */ |
| case 280: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| uint32_t msg_len; |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & msg_len); |
| if (record_arch_list_add_mem (tmpu32, msg_len)) |
| return -1; |
| } |
| regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_int)) |
| return -1; |
| break; |
| |
| /* sys_mq_notify */ |
| case 281: |
| break; |
| |
| /* sys_mq_getsetattr */ |
| case 282: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_mq_attr)) |
| return -1; |
| break; |
| |
| /* sys_kexec_load */ |
| case 283: |
| break; |
| |
| /* sys_waitid */ |
| case 284: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) |
| return -1; |
| break; |
| |
| /* sys_ni_syscall */ |
| case 285: |
| /* sys_add_key */ |
| case 286: |
| /* sys_request_key */ |
| case 287: |
| break; |
| |
| /* sys_keyctl */ |
| case 288: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (tmpu32 == 6 || tmpu32 == 11) |
| { |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| uint32_t buflen; |
| regcache_raw_read (regcache, tdep->arg4, |
| (gdb_byte *) & buflen); |
| if (record_arch_list_add_mem (tmpu32, buflen)) |
| return -1; |
| } |
| } |
| break; |
| |
| /* sys_ioprio_set */ |
| case 289: |
| /* sys_ioprio_get */ |
| case 290: |
| /* sys_inotify_init */ |
| case 291: |
| /* sys_inotify_add_watch */ |
| case 292: |
| /* sys_inotify_rm_watch */ |
| case 293: |
| /* sys_migrate_pages */ |
| case 294: |
| /* sys_openat */ |
| case 295: |
| /* sys_mkdirat */ |
| case 296: |
| /* sys_mknodat */ |
| case 297: |
| /* sys_fchownat */ |
| case 298: |
| /* sys_futimesat */ |
| case 299: |
| break; |
| |
| /* sys_fstatat64 */ |
| case 300: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_stat64)) |
| return -1; |
| break; |
| |
| /* sys_unlinkat */ |
| case 301: |
| /* sys_renameat */ |
| case 302: |
| /* sys_linkat */ |
| case 303: |
| /* sys_symlinkat */ |
| case 304: |
| break; |
| |
| /* sys_readlinkat */ |
| case 305: |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| int32_t bufsiz; |
| regcache_raw_read (regcache, tdep->arg4, |
| (gdb_byte *) & bufsiz); |
| if (record_arch_list_add_mem (tmpu32, bufsiz)) |
| return -1; |
| } |
| break; |
| |
| /* sys_fchmodat */ |
| case 306: |
| /* sys_faccessat */ |
| case 307: |
| break; |
| |
| /* sys_pselect6 */ |
| case 308: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) |
| return -1; |
| break; |
| |
| /* sys_ppoll */ |
| case 309: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| uint32_t nfds; |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & nfds); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds)) |
| return -1; |
| } |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) |
| return -1; |
| break; |
| |
| /* sys_unshare */ |
| case 310: |
| /* sys_set_robust_list */ |
| case 311: |
| break; |
| |
| /* sys_get_robust_list */ |
| case 312: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_int)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_int)) |
| return -1; |
| break; |
| |
| /* sys_splice */ |
| case 313: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) |
| return -1; |
| break; |
| |
| /* sys_sync_file_range */ |
| case 314: |
| /* sys_tee */ |
| case 315: |
| /* sys_vmsplice */ |
| case 316: |
| break; |
| |
| /* sys_move_pages */ |
| case 317: |
| regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| uint32_t nr_pages; |
| regcache_raw_read (regcache, tdep->arg2, |
| (gdb_byte *) & nr_pages); |
| if (record_arch_list_add_mem (tmpu32, nr_pages * tdep->size_int)) |
| return -1; |
| } |
| break; |
| |
| /* sys_getcpu */ |
| case 318: |
| regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_int)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_int)) |
| return -1; |
| regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); |
| if (record_arch_list_add_mem (tmpu32, tdep->size_ulong * 2)) |
| return -1; |
| break; |
| |
| /* sys_epoll_pwait */ |
| case 319: |
| regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); |
| if (tmpu32) |
| { |
| int32_t maxevents; |
| regcache_raw_read (regcache, tdep->arg3, |
| (gdb_byte *) & maxevents); |
| if (record_arch_list_add_mem |
| (tmpu32, maxevents * tdep->size_epoll_event)) |
| return -1; |
| } |
| break; |
| |
| default: |
| printf_unfiltered (_("Process record and replay target doesn't " |
| "support syscall number %u\n"), |
| (int)tmpu32); |
| return -1; |
| break; |
| } |
| |
| return 0; |
| } |