X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Flinux-record.c;h=11bb990fcae897fa329534601d2138f4b6239b25;hb=7190276c52b9d86a52aae73d3a0f8b56e7a1f4f1;hp=8832ef4ee51048648852fe84d8d256079b2f5d4c;hpb=933c5a623f247c63b642988a2984f5ce9b558d27;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/linux-record.c b/gdb/linux-record.c index 8832ef4ee5..11bb990fca 100644 --- a/gdb/linux-record.c +++ b/gdb/linux-record.c @@ -1,6 +1,6 @@ /* Process record and replay target code for GNU/Linux. - Copyright (C) 2008-2015 Free Software Foundation, Inc. + Copyright (C) 2008-2019 Free Software Foundation, Inc. This file is part of GDB. @@ -24,6 +24,7 @@ #include "record.h" #include "record-full.h" #include "linux-record.h" +#include "gdbarch.h" /* These macros are the values of the first argument of system call "sys_ptrace". The values of these macros were obtained from Linux @@ -83,16 +84,28 @@ #define RECORD_Q_XGETQUOTA (('3' << 8) + 3) #define OUTPUT_REG(val, num) phex_nz ((val), \ - TYPE_LENGTH (gdbarch_register_type (get_regcache_arch (regcache), (num)))) + TYPE_LENGTH (gdbarch_register_type (regcache->arch (), (num)))) + +/* Record a memory area of length LEN pointed to by register + REGNUM. */ + +static int +record_mem_at_reg (struct regcache *regcache, int regnum, int len) +{ + ULONGEST addr; + + regcache_raw_read_unsigned (regcache, regnum, &addr); + return record_full_arch_list_add_mem ((CORE_ADDR) addr, len); +} static int record_linux_sockaddr (struct regcache *regcache, - struct linux_record_tdep *tdep, ULONGEST addr, - ULONGEST len) + struct linux_record_tdep *tdep, ULONGEST addr, + ULONGEST len) { gdb_byte *a; int addrlen; - struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch *gdbarch = regcache->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); if (!addr) @@ -107,12 +120,12 @@ record_linux_sockaddr (struct regcache *regcache, if (target_read_memory ((CORE_ADDR) len, a, tdep->size_int)) { if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = 0x%s len = %d.\n", - phex_nz (len, tdep->size_pointer), - tdep->size_int); - return -1; + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + phex_nz (len, tdep->size_pointer), + tdep->size_int); + return -1; } addrlen = (int) extract_unsigned_integer (a, tdep->size_int, byte_order); if (addrlen <= 0 || addrlen > tdep->size_sockaddr) @@ -126,10 +139,10 @@ record_linux_sockaddr (struct regcache *regcache, static int record_linux_msghdr (struct regcache *regcache, - struct linux_record_tdep *tdep, ULONGEST addr) + struct linux_record_tdep *tdep, ULONGEST addr) { gdb_byte *a; - struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch *gdbarch = regcache->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); CORE_ADDR tmpaddr; int tmpint; @@ -144,13 +157,13 @@ record_linux_msghdr (struct regcache *regcache, if (target_read_memory ((CORE_ADDR) addr, a, tdep->size_msghdr)) { if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = 0x%s " - "len = %d.\n", - phex_nz (addr, tdep->size_pointer), - tdep->size_msghdr); - return -1; + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s " + "len = %d.\n", + phex_nz (addr, tdep->size_pointer), + tdep->size_msghdr); + return -1; } /* msg_name msg_namelen */ @@ -173,33 +186,33 @@ record_linux_msghdr (struct regcache *regcache, { ULONGEST i; ULONGEST len = extract_unsigned_integer (a, tdep->size_size_t, - byte_order); + byte_order); gdb_byte *iov = (gdb_byte *) alloca (tdep->size_iovec); for (i = 0; i < len; i++) - { - if (target_read_memory ((CORE_ADDR) addr, iov, tdep->size_iovec)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error " - "reading memory at " - "addr = 0x%s " - "len = %d.\n", - phex_nz (addr,tdep->size_pointer), - tdep->size_iovec); - return -1; - } - tmpaddr = (CORE_ADDR) extract_unsigned_integer (iov, - tdep->size_pointer, - byte_order); - tmpint = (int) extract_unsigned_integer (iov + tdep->size_pointer, - tdep->size_size_t, - byte_order); - if (record_full_arch_list_add_mem (tmpaddr, tmpint)) - return -1; - addr += tdep->size_iovec; - } + { + if (target_read_memory ((CORE_ADDR) addr, iov, tdep->size_iovec)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error " + "reading memory at " + "addr = 0x%s " + "len = %d.\n", + phex_nz (addr,tdep->size_pointer), + tdep->size_iovec); + return -1; + } + tmpaddr = (CORE_ADDR) extract_unsigned_integer (iov, + tdep->size_pointer, + byte_order); + tmpint = (int) extract_unsigned_integer (iov + tdep->size_pointer, + tdep->size_size_t, + byte_order); + if (record_full_arch_list_add_mem (tmpaddr, tmpint)) + return -1; + addr += tdep->size_iovec; + } } a += tdep->size_size_t; @@ -226,11 +239,11 @@ record_linux_msghdr (struct regcache *regcache, Return -1 if something wrong. */ int -record_linux_system_call (enum gdb_syscall syscall, +record_linux_system_call (enum gdb_syscall syscall, struct regcache *regcache, - struct linux_record_tdep *tdep) + struct linux_record_tdep *tdep) { - struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch *gdbarch = regcache->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); ULONGEST tmpulongest; CORE_ADDR tmpaddr; @@ -242,43 +255,51 @@ record_linux_system_call (enum gdb_syscall syscall, break; case gdb_sys_exit: - { - 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; - } + if (yquery (_("The next instruction is syscall exit. " + "It will make the program exit. " + "Do you want to stop the program?"))) + return 1; break; case gdb_sys_fork: break; case gdb_sys_read: - { - ULONGEST addr, count; - - regcache_raw_read_unsigned (regcache, tdep->arg2, &addr); - regcache_raw_read_unsigned (regcache, tdep->arg3, &count); - if (record_full_arch_list_add_mem ((CORE_ADDR) addr, (int) count)) - return -1; - } + case gdb_sys_readlink: + case gdb_sys_recv: + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_mem_at_reg (regcache, tdep->arg2, (int) tmpulongest)) + return -1; break; case gdb_sys_write: case gdb_sys_open: case gdb_sys_close: + break; + case gdb_sys_waitpid: + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_int)) + return -1; + break; + case gdb_sys_creat: case gdb_sys_link: case gdb_sys_unlink: case gdb_sys_execve: case gdb_sys_chdir: + break; + case gdb_sys_time: + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_time_t)) + return -1; + break; + case gdb_sys_mknod: case gdb_sys_chmod: case gdb_sys_lchown16: @@ -288,10 +309,9 @@ record_linux_system_call (enum gdb_syscall syscall, case gdb_sys_stat: case gdb_sys_fstat: case gdb_sys_lstat: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size__old_kernel_stat)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, + tdep->size__old_kernel_stat)) + return -1; break; case gdb_sys_lseek: @@ -306,14 +326,12 @@ record_linux_system_call (enum gdb_syscall syscall, case gdb_sys_ptrace: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); if (tmpulongest == RECORD_PTRACE_PEEKTEXT - || tmpulongest == RECORD_PTRACE_PEEKDATA - || tmpulongest == RECORD_PTRACE_PEEKUSR) - { - regcache_raw_read_unsigned (regcache, tdep->arg4, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, 4)) - return -1; - } + || tmpulongest == RECORD_PTRACE_PEEKDATA + || tmpulongest == RECORD_PTRACE_PEEKUSR) + { + if (record_mem_at_reg (regcache, tdep->arg4, 4)) + return -1; + } break; case gdb_sys_alarm: @@ -330,14 +348,17 @@ record_linux_system_call (enum gdb_syscall syscall, case gdb_sys_mkdir: case gdb_sys_rmdir: case gdb_sys_dup: + break; + case gdb_sys_pipe: + case gdb_sys_pipe2: + if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int * 2)) + return -1; break; case gdb_sys_times: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_tms)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_tms)) + return -1; break; case gdb_sys_ni_syscall44: @@ -356,155 +377,132 @@ record_linux_system_call (enum gdb_syscall syscall, /* XXX Need to add a lot of support of other ioctl requests. */ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); if (tmpulongest == tdep->ioctl_FIOCLEX - || tmpulongest == tdep->ioctl_FIONCLEX - || tmpulongest == tdep->ioctl_FIONBIO - || tmpulongest == tdep->ioctl_FIOASYNC - || tmpulongest == tdep->ioctl_TCSETS - || tmpulongest == tdep->ioctl_TCSETSW - || tmpulongest == tdep->ioctl_TCSETSF - || tmpulongest == tdep->ioctl_TCSETA - || tmpulongest == tdep->ioctl_TCSETAW - || tmpulongest == tdep->ioctl_TCSETAF - || tmpulongest == tdep->ioctl_TCSBRK - || tmpulongest == tdep->ioctl_TCXONC - || tmpulongest == tdep->ioctl_TCFLSH - || tmpulongest == tdep->ioctl_TIOCEXCL - || tmpulongest == tdep->ioctl_TIOCNXCL - || tmpulongest == tdep->ioctl_TIOCSCTTY - || tmpulongest == tdep->ioctl_TIOCSPGRP - || tmpulongest == tdep->ioctl_TIOCSTI - || tmpulongest == tdep->ioctl_TIOCSWINSZ - || tmpulongest == tdep->ioctl_TIOCMBIS - || tmpulongest == tdep->ioctl_TIOCMBIC - || tmpulongest == tdep->ioctl_TIOCMSET - || tmpulongest == tdep->ioctl_TIOCSSOFTCAR - || tmpulongest == tdep->ioctl_TIOCCONS - || tmpulongest == tdep->ioctl_TIOCSSERIAL - || tmpulongest == tdep->ioctl_TIOCPKT - || tmpulongest == tdep->ioctl_TIOCNOTTY - || tmpulongest == tdep->ioctl_TIOCSETD - || tmpulongest == tdep->ioctl_TCSBRKP - || tmpulongest == tdep->ioctl_TIOCTTYGSTRUCT - || tmpulongest == tdep->ioctl_TIOCSBRK - || tmpulongest == tdep->ioctl_TIOCCBRK - || tmpulongest == tdep->ioctl_TCSETS2 - || tmpulongest == tdep->ioctl_TCSETSW2 - || tmpulongest == tdep->ioctl_TCSETSF2 - || tmpulongest == tdep->ioctl_TIOCSPTLCK - || tmpulongest == tdep->ioctl_TIOCSERCONFIG - || tmpulongest == tdep->ioctl_TIOCSERGWILD - || tmpulongest == tdep->ioctl_TIOCSERSWILD - || tmpulongest == tdep->ioctl_TIOCSLCKTRMIOS - || tmpulongest == tdep->ioctl_TIOCSERGETMULTI - || tmpulongest == tdep->ioctl_TIOCSERSETMULTI - || tmpulongest == tdep->ioctl_TIOCMIWAIT - || tmpulongest == tdep->ioctl_TIOCSHAYESESP) - { - /* Nothing to do. */ - } + || tmpulongest == tdep->ioctl_FIONCLEX + || tmpulongest == tdep->ioctl_FIONBIO + || tmpulongest == tdep->ioctl_FIOASYNC + || tmpulongest == tdep->ioctl_TCSETS + || tmpulongest == tdep->ioctl_TCSETSW + || tmpulongest == tdep->ioctl_TCSETSF + || tmpulongest == tdep->ioctl_TCSETA + || tmpulongest == tdep->ioctl_TCSETAW + || tmpulongest == tdep->ioctl_TCSETAF + || tmpulongest == tdep->ioctl_TCSBRK + || tmpulongest == tdep->ioctl_TCXONC + || tmpulongest == tdep->ioctl_TCFLSH + || tmpulongest == tdep->ioctl_TIOCEXCL + || tmpulongest == tdep->ioctl_TIOCNXCL + || tmpulongest == tdep->ioctl_TIOCSCTTY + || tmpulongest == tdep->ioctl_TIOCSPGRP + || tmpulongest == tdep->ioctl_TIOCSTI + || tmpulongest == tdep->ioctl_TIOCSWINSZ + || tmpulongest == tdep->ioctl_TIOCMBIS + || tmpulongest == tdep->ioctl_TIOCMBIC + || tmpulongest == tdep->ioctl_TIOCMSET + || tmpulongest == tdep->ioctl_TIOCSSOFTCAR + || tmpulongest == tdep->ioctl_TIOCCONS + || tmpulongest == tdep->ioctl_TIOCSSERIAL + || tmpulongest == tdep->ioctl_TIOCPKT + || tmpulongest == tdep->ioctl_TIOCNOTTY + || tmpulongest == tdep->ioctl_TIOCSETD + || tmpulongest == tdep->ioctl_TCSBRKP + || tmpulongest == tdep->ioctl_TIOCTTYGSTRUCT + || tmpulongest == tdep->ioctl_TIOCSBRK + || tmpulongest == tdep->ioctl_TIOCCBRK + || tmpulongest == tdep->ioctl_TCSETS2 + || tmpulongest == tdep->ioctl_TCSETSW2 + || tmpulongest == tdep->ioctl_TCSETSF2 + || tmpulongest == tdep->ioctl_TIOCSPTLCK + || tmpulongest == tdep->ioctl_TIOCSERCONFIG + || tmpulongest == tdep->ioctl_TIOCSERGWILD + || tmpulongest == tdep->ioctl_TIOCSERSWILD + || tmpulongest == tdep->ioctl_TIOCSLCKTRMIOS + || tmpulongest == tdep->ioctl_TIOCSERGETMULTI + || tmpulongest == tdep->ioctl_TIOCSERSETMULTI + || tmpulongest == tdep->ioctl_TIOCMIWAIT + || tmpulongest == tdep->ioctl_TIOCSHAYESESP) + { + /* Nothing to do. */ + } else if (tmpulongest == tdep->ioctl_TCGETS - || tmpulongest == tdep->ioctl_TCGETA - || tmpulongest == tdep->ioctl_TIOCGLCKTRMIOS) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_termios)) - return -1; - } + || tmpulongest == tdep->ioctl_TCGETA + || tmpulongest == tdep->ioctl_TIOCGLCKTRMIOS) + { + if (record_mem_at_reg (regcache, tdep->arg3, + tdep->size_termios)) + return -1; + } else if (tmpulongest == tdep->ioctl_TIOCGPGRP - || tmpulongest == tdep->ioctl_TIOCGSID) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_pid_t)) - return -1; - } + || tmpulongest == tdep->ioctl_TIOCGSID) + { + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_pid_t)) + return -1; + } else if (tmpulongest == tdep->ioctl_TIOCOUTQ - || tmpulongest == tdep->ioctl_TIOCMGET - || tmpulongest == tdep->ioctl_TIOCGSOFTCAR - || tmpulongest == tdep->ioctl_FIONREAD - || tmpulongest == tdep->ioctl_TIOCINQ - || tmpulongest == tdep->ioctl_TIOCGETD - || tmpulongest == tdep->ioctl_TIOCGPTN - || tmpulongest == tdep->ioctl_TIOCSERGETLSR) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_int)) - return -1; - } + || tmpulongest == tdep->ioctl_TIOCMGET + || tmpulongest == tdep->ioctl_TIOCGSOFTCAR + || tmpulongest == tdep->ioctl_FIONREAD + || tmpulongest == tdep->ioctl_TIOCINQ + || tmpulongest == tdep->ioctl_TIOCGETD + || tmpulongest == tdep->ioctl_TIOCGPTN + || tmpulongest == tdep->ioctl_TIOCSERGETLSR) + { + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_int)) + return -1; + } else if (tmpulongest == tdep->ioctl_TIOCGWINSZ) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_winsize)) - return -1; - } + { + if (record_mem_at_reg (regcache, tdep->arg3, + tdep->size_winsize)) + return -1; + } else if (tmpulongest == tdep->ioctl_TIOCLINUX) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); + { /* This syscall affects a char-size memory. */ - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, 1)) - return -1; - } + if (record_mem_at_reg (regcache, tdep->arg3, 1)) + return -1; + } else if (tmpulongest == tdep->ioctl_TIOCGSERIAL) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_serial_struct)) - return -1; - } + { + if (record_mem_at_reg (regcache, tdep->arg3, + tdep->size_serial_struct)) + return -1; + } else if (tmpulongest == tdep->ioctl_TCGETS2) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_termios2)) - return -1; - } + { + if (record_mem_at_reg (regcache, tdep->arg3, + tdep->size_termios2)) + return -1; + } else if (tmpulongest == tdep->ioctl_FIOQSIZE) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_loff_t)) - return -1; - } + { + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_loff_t)) + return -1; + } else if (tmpulongest == tdep->ioctl_TIOCGICOUNT) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_serial_icounter_struct)) - return -1; - } + { + if (record_mem_at_reg (regcache, tdep->arg3, + tdep->size_serial_icounter_struct)) + return -1; + } else if (tmpulongest == tdep->ioctl_TIOCGHAYESESP) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_hayes_esp_config)) - return -1; - } + { + if (record_mem_at_reg (regcache, tdep->arg3, + tdep->size_hayes_esp_config)) + return -1; + } else if (tmpulongest == tdep->ioctl_TIOCSERGSTRUCT) - { - printf_unfiltered (_("Process record and replay target doesn't " - "support ioctl request TIOCSERGSTRUCT\n")); - return 1; - } + { + 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"), - OUTPUT_REG (tmpulongest, tdep->arg2)); - return 1; - } + { + printf_unfiltered (_("Process record and replay target doesn't " + "support ioctl request 0x%s.\n"), + OUTPUT_REG (tmpulongest, tdep->arg2)); + return 1; + } break; case gdb_sys_fcntl: @@ -512,13 +510,10 @@ record_linux_system_call (enum gdb_syscall syscall, regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); sys_fcntl: if (tmpulongest == tdep->fcntl_F_GETLK) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_flock)) - return -1; - } + { + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_flock)) + return -1; + } break; case gdb_sys_ni_syscall56: @@ -527,10 +522,9 @@ record_linux_system_call (enum gdb_syscall syscall, break; case gdb_sys_olduname: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_oldold_utsname)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, + tdep->size_oldold_utsname)) + return -1; break; case gdb_sys_umask: @@ -538,10 +532,8 @@ record_linux_system_call (enum gdb_syscall syscall, break; case gdb_sys_ustat: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_ustat)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_ustat)) + return -1; break; case gdb_sys_dup2: @@ -551,10 +543,9 @@ record_linux_system_call (enum gdb_syscall syscall, break; case gdb_sys_sigaction: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_sigaction)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, + tdep->size_old_sigaction)) + return -1; break; case gdb_sys_sgetmask: @@ -565,10 +556,9 @@ record_linux_system_call (enum gdb_syscall syscall, break; case gdb_sys_sigpending: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_sigset_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, + tdep->size_old_sigset_t)) + return -1; break; case gdb_sys_sethostname: @@ -576,28 +566,19 @@ record_linux_system_call (enum gdb_syscall syscall, break; case gdb_sys_old_getrlimit: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_rlimit)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_rlimit)) + return -1; break; case gdb_sys_getrusage: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_rusage)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_rusage)) + return -1; break; case gdb_sys_gettimeofday: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_timeval)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_timezone)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_timeval) + || record_mem_at_reg (regcache, tdep->arg2, tdep->size_timezone)) + return -1; break; case gdb_sys_settimeofday: @@ -605,94 +586,83 @@ record_linux_system_call (enum gdb_syscall syscall, case gdb_sys_getgroups16: regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_gid_t)) - return -1; + if (tmpulongest) + { + ULONGEST gidsetsize; + + regcache_raw_read_unsigned (regcache, tdep->arg1, + &gidsetsize); + tmpint = tdep->size_old_gid_t * (int) gidsetsize; + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint)) + return -1; + } break; case gdb_sys_setgroups16: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_gid_t)) - return -1; break; case gdb_old_select: { - struct sel_arg_struct - { - CORE_ADDR n; - CORE_ADDR inp; - CORE_ADDR outp; - CORE_ADDR exp; - CORE_ADDR tvp; - } sel; - - regcache_raw_read_unsigned (regcache, tdep->arg1, - &tmpulongest); - if (tmpulongest) - { - if (target_read_memory (tmpulongest, (gdb_byte *) &sel, - sizeof(sel))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading memory " - "at addr = 0x%s len = %lu.\n", - OUTPUT_REG (tmpulongest, tdep->arg1), - (unsigned long) sizeof (sel)); - return -1; - } - if (record_full_arch_list_add_mem (sel.inp, tdep->size_fd_set)) - return -1; - if (record_full_arch_list_add_mem (sel.outp, tdep->size_fd_set)) - return -1; - if (record_full_arch_list_add_mem (sel.exp, tdep->size_fd_set)) - return -1; - if (record_full_arch_list_add_mem (sel.tvp, tdep->size_timeval)) - return -1; - } + unsigned long sz_sel_arg = tdep->size_long + tdep->size_pointer * 4; + gdb_byte *a = (gdb_byte *) alloca (sz_sel_arg); + CORE_ADDR inp, outp, exp, tvp; + + regcache_raw_read_unsigned (regcache, tdep->arg1, + &tmpulongest); + if (tmpulongest) + { + if (target_read_memory (tmpulongest, a, sz_sel_arg)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading memory " + "at addr = 0x%s len = %lu.\n", + OUTPUT_REG (tmpulongest, tdep->arg1), + sz_sel_arg); + return -1; + } + /* Skip n. */ + a += tdep->size_long; + inp = extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a += tdep->size_pointer; + outp = extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a += tdep->size_pointer; + exp = extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a += tdep->size_pointer; + tvp = extract_unsigned_integer (a, tdep->size_pointer, byte_order); + if (inp) + if (record_full_arch_list_add_mem (inp, tdep->size_fd_set)) + return -1; + if (outp) + if (record_full_arch_list_add_mem (outp, tdep->size_fd_set)) + return -1; + if (exp) + if (record_full_arch_list_add_mem (exp, tdep->size_fd_set)) + return -1; + if (tvp) + if (record_full_arch_list_add_mem (tvp, tdep->size_timeval)) + return -1; + } } break; case gdb_sys_symlink: break; - case gdb_sys_readlink: - { - ULONGEST len; - - regcache_raw_read_unsigned (regcache, tdep->arg2, - &tmpulongest); - regcache_raw_read_unsigned (regcache, tdep->arg3, &len); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len)) - return -1; - } - break; - case gdb_sys_uselib: case gdb_sys_swapon: break; case gdb_sys_reboot: - { - 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; - } + if (yquery (_("The next instruction is syscall reboot. " + "It will restart the computer. " + "Do you want to stop the program?"))) + return 1; break; case gdb_old_readdir: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_dirent)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_old_dirent)) + return -1; break; case gdb_old_mmap: @@ -700,26 +670,21 @@ record_linux_system_call (enum gdb_syscall syscall, case gdb_sys_munmap: { - ULONGEST len; - - regcache_raw_read_unsigned (regcache, tdep->arg1, - &tmpulongest); - regcache_raw_read_unsigned (regcache, tdep->arg2, &len); - if (record_full_memory_query) - { - int q; - - target_terminal_ours (); - q = yquery (_("\ + ULONGEST len; + + regcache_raw_read_unsigned (regcache, tdep->arg1, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg2, &len); + if (record_full_memory_query) + { + if (yquery (_("\ The next instruction is syscall munmap.\n\ It will free the memory addr = 0x%s len = %u.\n\ It will make record target cannot record some memory change.\n\ Do you want to stop the program?"), - OUTPUT_REG (tmpulongest, tdep->arg1), (int) len); - target_terminal_inferior (); - if (q) - return 1; - } + OUTPUT_REG (tmpulongest, tdep->arg1), (int) len)) + return 1; + } } break; @@ -734,10 +699,8 @@ Do you want to stop the program?"), case gdb_sys_statfs: case gdb_sys_fstatfs: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_statfs)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_statfs)) + return -1; break; case gdb_sys_ioperm: @@ -757,347 +720,333 @@ Do you want to stop the program?"), case gdb_sys_getsockname: case gdb_sys_getpeername: { - ULONGEST len; + ULONGEST len; - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - regcache_raw_read_unsigned (regcache, tdep->arg3, &len); - if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) + return -1; } break; case gdb_sys_recvfrom: { - ULONGEST len; + ULONGEST len; - regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); - regcache_raw_read_unsigned (regcache, tdep->arg5, &len); - if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) - return -1; - } - break; - - case gdb_sys_recv: - { - ULONGEST size; - - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - regcache_raw_read_unsigned (regcache, tdep->arg3, &size); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - (int) size)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg5, &len); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) + return -1; } break; case gdb_sys_recvmsg: regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); if (record_linux_msghdr (regcache, tdep, tmpulongest)) - return -1; + return -1; break; case gdb_sys_socketpair: - regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_int)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_int)) + return -1; break; case gdb_sys_getsockopt: regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); if (tmpulongest) - { - ULONGEST optvalp; - gdb_byte *optlenp = (gdb_byte *) alloca (tdep->size_int); - - if (target_read_memory ((CORE_ADDR) tmpulongest, optlenp, - tdep->size_int)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = 0x%s " - "len = %d.\n", - OUTPUT_REG (tmpulongest, tdep->arg5), - tdep->size_int); - return -1; - } - regcache_raw_read_unsigned (regcache, tdep->arg4, &optvalp); - tmpint = (int) extract_signed_integer (optlenp, tdep->size_int, - byte_order); - if (record_full_arch_list_add_mem ((CORE_ADDR) optvalp, tmpint)) - return -1; - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + { + ULONGEST optvalp; + gdb_byte *optlenp = (gdb_byte *) alloca (tdep->size_int); + + if (target_read_memory ((CORE_ADDR) tmpulongest, optlenp, + tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s " + "len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg5), + tdep->size_int); + return -1; + } + regcache_raw_read_unsigned (regcache, tdep->arg4, &optvalp); + tmpint = (int) extract_signed_integer (optlenp, tdep->size_int, + byte_order); + if (record_full_arch_list_add_mem ((CORE_ADDR) optvalp, tmpint)) + return -1; + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int)) - return -1; - } + return -1; + } break; case gdb_sys_socketcall: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); switch (tmpulongest) - { - 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: - { - regcache_raw_read_unsigned (regcache, tdep->arg2, - &tmpulongest); - if (tmpulongest) - { - gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2); - ULONGEST len; - - tmpulongest += tdep->size_ulong; - if (target_read_memory ((CORE_ADDR) tmpulongest, a, - tdep->size_ulong * 2)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = 0x%s len = %d.\n", - OUTPUT_REG (tmpulongest, tdep->arg2), - tdep->size_ulong * 2); - return -1; - } - tmpulongest = extract_unsigned_integer (a, - tdep->size_ulong, - byte_order); - len = extract_unsigned_integer (a + tdep->size_ulong, - tdep->size_ulong, byte_order); - if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) - return -1; - } - } - break; - - case RECORD_SYS_SOCKETPAIR: - { - gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong); - - regcache_raw_read_unsigned (regcache, tdep->arg2, - &tmpulongest); - if (tmpulongest) - { - tmpulongest += tdep->size_ulong * 3; - if (target_read_memory ((CORE_ADDR) tmpulongest, a, - tdep->size_ulong)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = 0x%s len = %d.\n", - OUTPUT_REG (tmpulongest, tdep->arg2), - tdep->size_ulong); - return -1; - } - tmpaddr - = (CORE_ADDR) extract_unsigned_integer (a, tdep->size_ulong, - byte_order); - if (record_full_arch_list_add_mem (tmpaddr, tdep->size_int)) - return -1; - } - } - break; - case RECORD_SYS_SEND: - case RECORD_SYS_SENDTO: - break; - case RECORD_SYS_RECVFROM: - regcache_raw_read_unsigned (regcache, tdep->arg2, - &tmpulongest); - if (tmpulongest) - { - gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2); - ULONGEST len; - - tmpulongest += tdep->size_ulong * 4; - if (target_read_memory ((CORE_ADDR) tmpulongest, a, - tdep->size_ulong * 2)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = 0x%s len = %d.\n", - OUTPUT_REG (tmpulongest, tdep->arg2), - tdep->size_ulong * 2); - return -1; - } - tmpulongest = extract_unsigned_integer (a, tdep->size_ulong, - byte_order); - len = extract_unsigned_integer (a + tdep->size_ulong, - tdep->size_ulong, byte_order); - if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) - return -1; - } - case RECORD_SYS_RECV: - regcache_raw_read_unsigned (regcache, tdep->arg2, - &tmpulongest); - if (tmpulongest) - { - gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2); - - tmpulongest += tdep->size_ulong; - if (target_read_memory ((CORE_ADDR) tmpulongest, a, - tdep->size_ulong)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = 0x%s len = %d.\n", - OUTPUT_REG (tmpulongest, tdep->arg2), - tdep->size_ulong); - return -1; - } - tmpulongest = extract_unsigned_integer (a, tdep->size_ulong, - byte_order); - if (tmpulongest) - { - a += tdep->size_ulong; - tmpint = (int) extract_unsigned_integer (a, tdep->size_ulong, - byte_order); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + { + 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: + { + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2); + ULONGEST len; + + tmpulongest += tdep->size_ulong; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + tdep->size_ulong * 2); + return -1; + } + tmpulongest = extract_unsigned_integer (a, + tdep->size_ulong, + byte_order); + len = extract_unsigned_integer (a + tdep->size_ulong, + tdep->size_ulong, byte_order); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) + return -1; + } + } + break; + + case RECORD_SYS_SOCKETPAIR: + { + gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong); + + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest += tdep->size_ulong * 3; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + tdep->size_ulong); + return -1; + } + tmpaddr + = (CORE_ADDR) extract_unsigned_integer (a, tdep->size_ulong, + byte_order); + if (record_full_arch_list_add_mem (tmpaddr, tdep->size_int)) + return -1; + } + } + break; + case RECORD_SYS_SEND: + case RECORD_SYS_SENDTO: + break; + case RECORD_SYS_RECVFROM: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2); + ULONGEST len; + + tmpulongest += tdep->size_ulong * 4; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + tdep->size_ulong * 2); + return -1; + } + tmpulongest = extract_unsigned_integer (a, tdep->size_ulong, + byte_order); + len = extract_unsigned_integer (a + tdep->size_ulong, + tdep->size_ulong, byte_order); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) + return -1; + } + break; + case RECORD_SYS_RECV: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2); + + tmpulongest += tdep->size_ulong; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + tdep->size_ulong); + return -1; + } + tmpulongest = extract_unsigned_integer (a, tdep->size_ulong, + byte_order); + if (tmpulongest) + { + a += tdep->size_ulong; + tmpint = (int) extract_unsigned_integer (a, tdep->size_ulong, + byte_order); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint)) - return -1; - } - } - break; - case RECORD_SYS_SHUTDOWN: - case RECORD_SYS_SETSOCKOPT: - break; - case RECORD_SYS_GETSOCKOPT: - { - gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2); - gdb_byte *av = (gdb_byte *) alloca (tdep->size_int); - - regcache_raw_read_unsigned (regcache, tdep->arg2, - &tmpulongest); - if (tmpulongest) - { - tmpulongest += tdep->size_ulong * 3; - if (target_read_memory ((CORE_ADDR) tmpulongest, a, - tdep->size_ulong * 2)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = 0x%s len = %d.\n", - OUTPUT_REG (tmpulongest, tdep->arg2), - tdep->size_ulong * 2); - return -1; - } - tmpulongest = extract_unsigned_integer (a + tdep->size_ulong, - tdep->size_ulong, - byte_order); - if (tmpulongest) - { - if (target_read_memory ((CORE_ADDR) tmpulongest, av, - tdep->size_int)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = 0x%s " - "len = %d.\n", - phex_nz (tmpulongest, - tdep->size_ulong), - tdep->size_int); - return -1; - } - tmpaddr - = (CORE_ADDR) extract_unsigned_integer (a, - tdep->size_ulong, - byte_order); - tmpint = (int) extract_unsigned_integer (av, - tdep->size_int, - byte_order); - if (record_full_arch_list_add_mem (tmpaddr, tmpint)) - return -1; - a += tdep->size_ulong; - tmpaddr - = (CORE_ADDR) extract_unsigned_integer (a, - tdep->size_ulong, - byte_order); - if (record_full_arch_list_add_mem (tmpaddr, + return -1; + } + } + break; + case RECORD_SYS_SHUTDOWN: + case RECORD_SYS_SETSOCKOPT: + break; + case RECORD_SYS_GETSOCKOPT: + { + gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2); + gdb_byte *av = (gdb_byte *) alloca (tdep->size_int); + + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest += tdep->size_ulong * 3; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + tdep->size_ulong * 2); + return -1; + } + tmpulongest = extract_unsigned_integer (a + tdep->size_ulong, + tdep->size_ulong, + byte_order); + if (tmpulongest) + { + if (target_read_memory ((CORE_ADDR) tmpulongest, av, + tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s " + "len = %d.\n", + phex_nz (tmpulongest, + tdep->size_ulong), + tdep->size_int); + return -1; + } + tmpaddr + = (CORE_ADDR) extract_unsigned_integer (a, + tdep->size_ulong, + byte_order); + tmpint = (int) extract_unsigned_integer (av, + tdep->size_int, + byte_order); + if (record_full_arch_list_add_mem (tmpaddr, tmpint)) + return -1; + a += tdep->size_ulong; + tmpaddr + = (CORE_ADDR) extract_unsigned_integer (a, + tdep->size_ulong, + byte_order); + if (record_full_arch_list_add_mem (tmpaddr, tdep->size_int)) - return -1; - } - } - } - break; - case RECORD_SYS_SENDMSG: - break; - case RECORD_SYS_RECVMSG: - { - gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong); - - regcache_raw_read_unsigned (regcache, tdep->arg2, - &tmpulongest); - if (tmpulongest) - { - tmpulongest += tdep->size_ulong; - if (target_read_memory ((CORE_ADDR) tmpulongest, a, - tdep->size_ulong)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = 0x%s len = %d.\n", - OUTPUT_REG (tmpulongest, tdep->arg2), - tdep->size_ulong); - return -1; - } - tmpulongest = extract_unsigned_integer (a, tdep->size_ulong, - byte_order); - if (record_linux_msghdr (regcache, tdep, tmpulongest)) - return -1; - } - } - break; - default: - printf_unfiltered (_("Process record and replay target " - "doesn't support socketcall call 0x%s\n"), - OUTPUT_REG (tmpulongest, tdep->arg1)); - return -1; - break; - } + return -1; + } + } + } + break; + case RECORD_SYS_SENDMSG: + break; + case RECORD_SYS_RECVMSG: + { + gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong); + + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest += tdep->size_ulong; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + tdep->size_ulong); + return -1; + } + tmpulongest = extract_unsigned_integer (a, tdep->size_ulong, + byte_order); + if (record_linux_msghdr (regcache, tdep, tmpulongest)) + return -1; + } + } + break; + default: + printf_unfiltered (_("Process record and replay target " + "doesn't support socketcall call 0x%s\n"), + OUTPUT_REG (tmpulongest, tdep->arg1)); + return -1; + break; + } break; case gdb_sys_syslog: break; case gdb_sys_setitimer: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_itimerval)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_itimerval)) + return -1; break; case gdb_sys_getitimer: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_itimerval)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_itimerval)) + return -1; break; case gdb_sys_newstat: case gdb_sys_newlstat: case gdb_sys_newfstat: + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_stat)) + return -1; + break; + case gdb_sys_newfstatat: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_stat)) - return -1; + return -1; break; case gdb_sys_uname: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_utsname)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, + tdep->size_old_utsname)) + return -1; break; case gdb_sys_iopl: @@ -1107,24 +1056,17 @@ Do you want to stop the program?"), break; case gdb_sys_wait4: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_int)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_rusage)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_int) + || record_mem_at_reg (regcache, tdep->arg4, tdep->size_rusage)) + return -1; break; case gdb_sys_swapoff: break; case gdb_sys_sysinfo: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_sysinfo)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_sysinfo)) + return -1; break; case gdb_sys_shmget: @@ -1138,17 +1080,13 @@ Do you want to stop the program?"), break; case gdb_sys_shmat: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_ulong)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_ulong)) + return -1; break; case gdb_sys_shmctl: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_shmid_ds)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_shmid_ds)) + return -1; break; /* XXX sys_semctl 525 still not supported. */ @@ -1156,78 +1094,65 @@ Do you want to stop the program?"), case gdb_sys_msgrcv: { - ULONGEST msgp; - LONGEST l; - - regcache_raw_read_signed (regcache, tdep->arg3, &l); - regcache_raw_read_unsigned (regcache, tdep->arg2, &msgp); - tmpint = l + tdep->size_long; - if (record_full_arch_list_add_mem ((CORE_ADDR) msgp, tmpint)) - return -1; + LONGEST l; + + regcache_raw_read_signed (regcache, tdep->arg3, &l); + tmpint = l + tdep->size_long; + if (record_mem_at_reg (regcache, tdep->arg2, tmpint)) + return -1; } break; case gdb_sys_msgctl: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_msqid_ds)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_msqid_ds)) + return -1; break; case gdb_sys_ipc: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); tmpulongest &= 0xffff; switch (tmpulongest) - { - case RECORD_SEMOP: - case RECORD_SEMGET: - case RECORD_SEMTIMEDOP: - case RECORD_MSGSND: - case RECORD_MSGGET: + { + case RECORD_SEMOP: + case RECORD_SEMGET: + case RECORD_SEMTIMEDOP: + case RECORD_MSGSND: + case RECORD_MSGGET: /* XXX maybe need do some record works with RECORD_SHMDT. */ - case RECORD_SHMDT: - case RECORD_SHMGET: - break; - case RECORD_MSGRCV: - { - LONGEST second; - ULONGEST ptr; - - regcache_raw_read_signed (regcache, tdep->arg3, &second); - regcache_raw_read_unsigned (regcache, tdep->arg5, &ptr); - tmpint = (int) second + tdep->size_long; - if (record_full_arch_list_add_mem ((CORE_ADDR) ptr, tmpint)) - return -1; - } - break; - case RECORD_MSGCTL: - regcache_raw_read_unsigned (regcache, tdep->arg5, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_msqid_ds)) - return -1; - break; - case RECORD_SHMAT: - regcache_raw_read_unsigned (regcache, tdep->arg4, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_ulong)) - return -1; - break; - case RECORD_SHMCTL: - regcache_raw_read_unsigned (regcache, tdep->arg5, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_shmid_ds)) - return -1; - break; - default: + case RECORD_SHMDT: + case RECORD_SHMGET: + break; + case RECORD_MSGRCV: + { + LONGEST second; + + regcache_raw_read_signed (regcache, tdep->arg3, &second); + tmpint = (int) second + tdep->size_long; + if (record_mem_at_reg (regcache, tdep->arg5, tmpint)) + return -1; + } + break; + case RECORD_MSGCTL: + if (record_mem_at_reg (regcache, tdep->arg5, + tdep->size_msqid_ds)) + return -1; + break; + case RECORD_SHMAT: + if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_ulong)) + return -1; + break; + case RECORD_SHMCTL: + if (record_mem_at_reg (regcache, tdep->arg5, + tdep->size_shmid_ds)) + return -1; + break; + default: /* XXX RECORD_SEMCTL still not supported. */ - printf_unfiltered (_("Process record and replay target doesn't " - "support ipc number %s\n"), + printf_unfiltered (_("Process record and replay target doesn't " + "support ipc number %s\n"), pulongest (tmpulongest)); - break; - } + break; + } break; case gdb_sys_fsync: @@ -1237,40 +1162,35 @@ Do you want to stop the program?"), break; case gdb_sys_newuname: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_new_utsname)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, + tdep->size_new_utsname)) + return -1; break; case gdb_sys_modify_ldt: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); if (tmpulongest == 0 || tmpulongest == 2) - { - ULONGEST ptr, bytecount; + { + ULONGEST bytecount; - regcache_raw_read_unsigned (regcache, tdep->arg2, &ptr); - regcache_raw_read_unsigned (regcache, tdep->arg3, &bytecount); - if (record_full_arch_list_add_mem ((CORE_ADDR) ptr, (int) bytecount)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &bytecount); + if (record_mem_at_reg (regcache, tdep->arg2, (int) bytecount)) + return -1; + } break; case gdb_sys_adjtimex: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_timex)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_timex)) + return -1; break; case gdb_sys_mprotect: break; case gdb_sys_sigprocmask: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_sigset_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, + tdep->size_old_sigset_t)) + return -1; break; case gdb_sys_ni_syscall127: @@ -1282,37 +1202,29 @@ Do you want to stop the program?"), case gdb_sys_quotactl: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); switch (tmpulongest) - { - case RECORD_Q_GETFMT: - regcache_raw_read_unsigned (regcache, tdep->arg4, - &tmpulongest); - /* __u32 */ - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, 4)) - return -1; - break; - case RECORD_Q_GETINFO: - regcache_raw_read_unsigned (regcache, tdep->arg4, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_mem_dqinfo)) - return -1; - break; - case RECORD_Q_GETQUOTA: - regcache_raw_read_unsigned (regcache, tdep->arg4, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_if_dqblk)) - return -1; - break; - case RECORD_Q_XGETQSTAT: - case RECORD_Q_XGETQUOTA: - regcache_raw_read_unsigned (regcache, tdep->arg4, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_fs_quota_stat)) - return -1; - break; - } + { + case RECORD_Q_GETFMT: + /* __u32 */ + if (record_mem_at_reg (regcache, tdep->arg4, 4)) + return -1; + break; + case RECORD_Q_GETINFO: + if (record_mem_at_reg (regcache, tdep->arg4, + tdep->size_mem_dqinfo)) + return -1; + break; + case RECORD_Q_GETQUOTA: + if (record_mem_at_reg (regcache, tdep->arg4, + tdep->size_if_dqblk)) + return -1; + break; + case RECORD_Q_XGETQSTAT: + case RECORD_Q_XGETQUOTA: + if (record_mem_at_reg (regcache, tdep->arg4, + tdep->size_fs_quota_stat)) + return -1; + break; + } break; case gdb_sys_getpgid: @@ -1323,13 +1235,11 @@ Do you want to stop the program?"), case gdb_sys_sysfs: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); if (tmpulongest == 2) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); + { /*XXX the size of memory is not very clear. */ - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, 10)) - return -1; - } + if (record_mem_at_reg (regcache, tdep->arg3, 10)) + return -1; + } break; case gdb_sys_personality: @@ -1339,42 +1249,23 @@ Do you want to stop the program?"), break; case gdb_sys_llseek: - regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_loff_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_loff_t)) + return -1; break; case gdb_sys_getdents: case gdb_sys_getdents64: - { - ULONGEST count; - - regcache_raw_read_unsigned (regcache, tdep->arg2, - &tmpulongest); - regcache_raw_read_unsigned (regcache, tdep->arg3, &count); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, count)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_mem_at_reg (regcache, tdep->arg2, tmpulongest)) + return -1; break; case gdb_sys_select: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_fd_set)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_fd_set)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_fd_set)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_timeval)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_fd_set) + || record_mem_at_reg (regcache, tdep->arg3, tdep->size_fd_set) + || record_mem_at_reg (regcache, tdep->arg4, tdep->size_fd_set) + || record_mem_at_reg (regcache, tdep->arg5, tdep->size_timeval)) + return -1; break; case gdb_sys_flock: @@ -1383,40 +1274,40 @@ Do you want to stop the program?"), case gdb_sys_readv: { - ULONGEST vec, vlen; - - regcache_raw_read_unsigned (regcache, tdep->arg2, &vec); - if (vec) - { - gdb_byte *iov = (gdb_byte *) alloca (tdep->size_iovec); - - regcache_raw_read_unsigned (regcache, tdep->arg3, &vlen); - for (tmpulongest = 0; tmpulongest < vlen; tmpulongest++) - { - if (target_read_memory ((CORE_ADDR) vec, iov, - tdep->size_iovec)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = 0x%s len = %d.\n", - OUTPUT_REG (vec, tdep->arg2), - tdep->size_iovec); - return -1; - } - tmpaddr - = (CORE_ADDR) extract_unsigned_integer (iov, - tdep->size_pointer, - byte_order); - tmpint - = (int) extract_unsigned_integer (iov + tdep->size_pointer, - tdep->size_size_t, - byte_order); - if (record_full_arch_list_add_mem (tmpaddr, tmpint)) - return -1; - vec += tdep->size_iovec; - } - } + ULONGEST vec, vlen; + + regcache_raw_read_unsigned (regcache, tdep->arg2, &vec); + if (vec) + { + gdb_byte *iov = (gdb_byte *) alloca (tdep->size_iovec); + + regcache_raw_read_unsigned (regcache, tdep->arg3, &vlen); + for (tmpulongest = 0; tmpulongest < vlen; tmpulongest++) + { + if (target_read_memory ((CORE_ADDR) vec, iov, + tdep->size_iovec)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (vec, tdep->arg2), + tdep->size_iovec); + return -1; + } + tmpaddr + = (CORE_ADDR) extract_unsigned_integer (iov, + tdep->size_pointer, + byte_order); + tmpint + = (int) extract_unsigned_integer (iov + tdep->size_pointer, + tdep->size_size_t, + byte_order); + if (record_full_arch_list_add_mem (tmpaddr, tmpint)) + return -1; + vec += tdep->size_iovec; + } + } } break; @@ -1432,10 +1323,8 @@ Do you want to stop the program?"), break; case gdb_sys_sched_getparam: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_int)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_int)) + return -1; break; case gdb_sys_sched_setscheduler: @@ -1447,10 +1336,8 @@ Do you want to stop the program?"), case gdb_sys_sched_rr_get_interval: case gdb_sys_nanosleep: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_timespec)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_timespec)) + return -1; break; case gdb_sys_mremap: @@ -1458,18 +1345,12 @@ Do you want to stop the program?"), break; case gdb_sys_getresuid16: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_uid_t)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_uid_t)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_uid_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_old_uid_t) + || record_mem_at_reg (regcache, tdep->arg2, + tdep->size_old_uid_t) + || record_mem_at_reg (regcache, tdep->arg3, + tdep->size_old_uid_t)) + return -1; break; case gdb_sys_vm86: @@ -1479,107 +1360,88 @@ Do you want to stop the program?"), case gdb_sys_poll: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); if (tmpulongest) - { - ULONGEST nfds; + { + ULONGEST nfds; - regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_pollfd * nfds)) - return -1; - } + return -1; + } break; case gdb_sys_nfsservctl: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); if (tmpulongest == 7 || tmpulongest == 8) - { - int rsize; + { + int rsize; - if (tmpulongest == 7) - rsize = tdep->size_NFS_FHSIZE; - else - rsize = tdep->size_knfsd_fh; - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, rsize)) - return -1; - } + if (tmpulongest == 7) + rsize = tdep->size_NFS_FHSIZE; + else + rsize = tdep->size_knfsd_fh; + if (record_mem_at_reg (regcache, tdep->arg3, rsize)) + return -1; + } break; case gdb_sys_setresgid16: break; case gdb_sys_getresgid16: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_gid_t)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_gid_t)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_gid_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_old_gid_t) + || record_mem_at_reg (regcache, tdep->arg2, + tdep->size_old_gid_t) + || record_mem_at_reg (regcache, tdep->arg3, + tdep->size_old_gid_t)) + return -1; break; case gdb_sys_prctl: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); switch (tmpulongest) - { - case 2: - regcache_raw_read_unsigned (regcache, tdep->arg2, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_int)) - return -1; - break; - case 16: - regcache_raw_read_unsigned (regcache, tdep->arg2, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_TASK_COMM_LEN)) - return -1; - break; - } + { + case 2: + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_int)) + return -1; + break; + case 16: + if (record_mem_at_reg (regcache, tdep->arg2, + tdep->size_TASK_COMM_LEN)) + return -1; + break; + } break; case gdb_sys_rt_sigreturn: break; case gdb_sys_rt_sigaction: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_sigaction)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_sigaction)) + return -1; break; case gdb_sys_rt_sigprocmask: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_sigset_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_sigset_t)) + return -1; break; case gdb_sys_rt_sigpending: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); if (tmpulongest) - { - ULONGEST sigsetsize; + { + ULONGEST sigsetsize; - regcache_raw_read_unsigned (regcache, tdep->arg2,&sigsetsize); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg2,&sigsetsize); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) sigsetsize)) - return -1; - } + return -1; + } break; case gdb_sys_rt_sigtimedwait: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_siginfo_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_siginfo_t)) + return -1; break; case gdb_sys_rt_sigqueueinfo: @@ -1589,14 +1451,14 @@ Do you want to stop the program?"), case gdb_sys_pread64: regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); if (tmpulongest) - { - ULONGEST count; + { + ULONGEST count; - regcache_raw_read_unsigned (regcache, tdep->arg3,&count); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg3,&count); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) count)) - return -1; - } + return -1; + } break; case gdb_sys_pwrite64: @@ -1606,38 +1468,33 @@ Do you want to stop the program?"), case gdb_sys_getcwd: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); if (tmpulongest) - { - ULONGEST size; + { + ULONGEST size; - regcache_raw_read_unsigned (regcache, tdep->arg2, &size); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg2, &size); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) size)) - return -1; - } + return -1; + } break; case gdb_sys_capget: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_cap_user_data_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, + tdep->size_cap_user_data_t)) + return -1; break; case gdb_sys_capset: break; case gdb_sys_sigaltstack: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_stack_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_stack_t)) + return -1; break; case gdb_sys_sendfile: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_off_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_off_t)) + return -1; break; case gdb_sys_ni_syscall188: @@ -1646,10 +1503,8 @@ Do you want to stop the program?"), break; case gdb_sys_getrlimit: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_rlimit)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_rlimit)) + return -1; break; case gdb_sys_mmap2: @@ -1662,10 +1517,8 @@ Do you want to stop the program?"), case gdb_sys_stat64: case gdb_sys_lstat64: case gdb_sys_fstat64: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_stat64)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_stat64)) + return -1; break; case gdb_sys_lchown: @@ -1680,15 +1533,15 @@ Do you want to stop the program?"), case gdb_sys_getgroups: regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); if (tmpulongest) - { - ULONGEST gidsetsize; + { + ULONGEST gidsetsize; - regcache_raw_read_unsigned (regcache, tdep->arg1, - &gidsetsize); - tmpint = tdep->size_gid_t * (int) gidsetsize; - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, + &gidsetsize); + tmpint = tdep->size_gid_t * (int) gidsetsize; + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint)) + return -1; + } break; case gdb_sys_setgroups: @@ -1697,36 +1550,20 @@ Do you want to stop the program?"), break; case gdb_sys_getresuid: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_uid_t)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_uid_t)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_uid_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_uid_t) + || record_mem_at_reg (regcache, tdep->arg2, tdep->size_uid_t) + || record_mem_at_reg (regcache, tdep->arg3, tdep->size_uid_t)) + return -1; break; case gdb_sys_setresgid: break; case gdb_sys_getresgid: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_gid_t)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_gid_t)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_gid_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_gid_t) + || record_mem_at_reg (regcache, tdep->arg2, tdep->size_gid_t) + || record_mem_at_reg (regcache, tdep->arg3, tdep->size_gid_t)) + return -1; break; case gdb_sys_chown: @@ -1738,10 +1575,8 @@ Do you want to stop the program?"), break; case gdb_sys_mincore: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_PAGE_SIZE)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_PAGE_SIZE)) + return -1; break; case gdb_sys_madvise: @@ -1750,18 +1585,16 @@ Do you want to stop the program?"), case gdb_sys_fcntl64: regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); if (tmpulongest == tdep->fcntl_F_GETLK64) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_flock64)) - return -1; - } + { + if (record_mem_at_reg (regcache, tdep->arg3, + tdep->size_flock64)) + return -1; + } else if (tmpulongest != tdep->fcntl_F_SETLK64 - && tmpulongest != tdep->fcntl_F_SETLKW64) - { - goto sys_fcntl; - } + && tmpulongest != tdep->fcntl_F_SETLKW64) + { + goto sys_fcntl; + } break; case gdb_sys_ni_syscall222: @@ -1778,14 +1611,14 @@ Do you want to stop the program?"), case gdb_sys_fgetxattr: regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); if (tmpulongest) - { - ULONGEST size; + { + ULONGEST size; - regcache_raw_read_unsigned (regcache, tdep->arg4, &size); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg4, &size); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) size)) - return -1; - } + return -1; + } break; case gdb_sys_listxattr: @@ -1793,14 +1626,14 @@ Do you want to stop the program?"), case gdb_sys_flistxattr: regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); if (tmpulongest) - { - ULONGEST size; + { + ULONGEST size; - regcache_raw_read_unsigned (regcache, tdep->arg3, &size); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg3, &size); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) size)) - return -1; - } + return -1; + } break; case gdb_sys_removexattr: @@ -1810,10 +1643,8 @@ Do you want to stop the program?"), break; case gdb_sys_sendfile64: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_loff_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_loff_t)) + return -1; break; case gdb_sys_futex: @@ -1823,35 +1654,29 @@ Do you want to stop the program?"), case gdb_sys_sched_getaffinity: regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); if (tmpulongest) - { - ULONGEST len; + { + ULONGEST len; - regcache_raw_read_unsigned (regcache, tdep->arg2, &len); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg2, &len); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len)) - return -1; - } + return -1; + } break; case gdb_sys_set_thread_area: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_int)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int)) + return -1; break; case gdb_sys_get_thread_area: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_user_desc)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_user_desc)) + return -1; break; case gdb_sys_io_setup: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_long)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_long)) + return -1; break; case gdb_sys_io_destroy: @@ -1860,54 +1685,52 @@ Do you want to stop the program?"), case gdb_sys_io_getevents: regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); if (tmpulongest) - { - ULONGEST nr; + { + ULONGEST nr; - regcache_raw_read_unsigned (regcache, tdep->arg3, &nr); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg3, &nr); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, nr * tdep->size_io_event)) - return -1; - } + return -1; + } break; case gdb_sys_io_submit: regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); if (tmpulongest) - { - ULONGEST nr, i; - gdb_byte *iocbp; - - regcache_raw_read_unsigned (regcache, tdep->arg2, &nr); - iocbp = (gdb_byte *) alloca (nr * tdep->size_pointer); - if (target_read_memory ((CORE_ADDR) tmpulongest, iocbp, - nr * tdep->size_pointer)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading memory " - "at addr = 0x%s len = %u.\n", - OUTPUT_REG (tmpulongest, tdep->arg2), - (int) (nr * tdep->size_pointer)); - return -1; - } - for (i = 0; i < nr; i++) - { - tmpaddr - = (CORE_ADDR) extract_unsigned_integer (iocbp, - tdep->size_pointer, - byte_order); - if (record_full_arch_list_add_mem (tmpaddr, tdep->size_iocb)) - return -1; - iocbp += tdep->size_pointer; - } - } + { + ULONGEST nr, i; + gdb_byte *iocbp; + + regcache_raw_read_unsigned (regcache, tdep->arg2, &nr); + iocbp = (gdb_byte *) alloca (nr * tdep->size_pointer); + if (target_read_memory ((CORE_ADDR) tmpulongest, iocbp, + nr * tdep->size_pointer)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading memory " + "at addr = 0x%s len = %u.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + (int) (nr * tdep->size_pointer)); + return -1; + } + for (i = 0; i < nr; i++) + { + tmpaddr + = (CORE_ADDR) extract_unsigned_integer (iocbp, + tdep->size_pointer, + byte_order); + if (record_full_arch_list_add_mem (tmpaddr, tdep->size_iocb)) + return -1; + iocbp += tdep->size_pointer; + } + } break; case gdb_sys_io_cancel: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_io_event)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_io_event)) + return -1; break; case gdb_sys_fadvise64: @@ -1915,30 +1738,23 @@ Do you want to stop the program?"), break; case gdb_sys_exit_group: - { - 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; - } + if (yquery (_("The next instruction is syscall exit_group. " + "It will make the program exit. " + "Do you want to stop the program?"))) + return 1; break; case gdb_sys_lookup_dcookie: regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); if (tmpulongest) - { - ULONGEST len; + { + ULONGEST len; - regcache_raw_read_unsigned (regcache, tdep->arg3, &len); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len)) - return -1; - } + return -1; + } break; case gdb_sys_epoll_create: @@ -1948,15 +1764,15 @@ Do you want to stop the program?"), case gdb_sys_epoll_wait: regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); if (tmpulongest) - { - ULONGEST maxevents; + { + ULONGEST maxevents; - regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, (maxevents * tdep->size_epoll_event))) - return -1; - } + return -1; + } break; case gdb_sys_remap_file_pages: @@ -1964,24 +1780,18 @@ Do you want to stop the program?"), break; case gdb_sys_timer_create: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_int)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_int)) + return -1; break; case gdb_sys_timer_settime: - regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_itimerspec)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_itimerspec)) + return -1; break; case gdb_sys_timer_gettime: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_itimerspec)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_itimerspec)) + return -1; break; case gdb_sys_timer_getoverrun: @@ -1990,32 +1800,24 @@ Do you want to stop the program?"), break; case gdb_sys_clock_gettime: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_timespec)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_timespec)) + return -1; break; case gdb_sys_clock_getres: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_timespec)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_timespec)) + return -1; break; case gdb_sys_clock_nanosleep: - regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_timespec)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_timespec)) + return -1; break; case gdb_sys_statfs64: case gdb_sys_fstatfs64: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_statfs64)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_statfs64)) + return -1; break; case gdb_sys_tgkill: @@ -2026,20 +1828,18 @@ Do you want to stop the program?"), break; case gdb_sys_get_mempolicy: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_int)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int)) + return -1; regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); if (tmpulongest) - { - ULONGEST maxnode; + { + ULONGEST maxnode; - regcache_raw_read_unsigned (regcache, tdep->arg3, &maxnode); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxnode); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, maxnode * tdep->size_long)) - return -1; - } + return -1; + } break; case gdb_sys_set_mempolicy: @@ -2051,42 +1851,33 @@ Do you want to stop the program?"), case gdb_sys_mq_timedreceive: regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); if (tmpulongest) - { - ULONGEST msg_len; + { + ULONGEST msg_len; - regcache_raw_read_unsigned (regcache, tdep->arg3, &msg_len); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg3, &msg_len); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) msg_len)) - return -1; - } - regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_int)) - return -1; + return -1; + } + if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_int)) + return -1; break; case gdb_sys_mq_notify: break; case gdb_sys_mq_getsetattr: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_mq_attr)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_mq_attr)) + return -1; break; case gdb_sys_kexec_load: break; case gdb_sys_waitid: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_siginfo_t)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_rusage)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_siginfo_t) + || record_mem_at_reg (regcache, tdep->arg5, tdep->size_rusage)) + return -1; break; case gdb_sys_ni_syscall285: @@ -2097,19 +1888,19 @@ Do you want to stop the program?"), case gdb_sys_keyctl: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); if (tmpulongest == 6 || tmpulongest == 11) - { - regcache_raw_read_unsigned (regcache, tdep->arg3, - &tmpulongest); - if (tmpulongest) - { - ULONGEST buflen; - - regcache_raw_read_unsigned (regcache, tdep->arg4, &buflen); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (tmpulongest) + { + ULONGEST buflen; + + regcache_raw_read_unsigned (regcache, tdep->arg4, &buflen); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) buflen)) - return -1; - } - } + return -1; + } + } break; case gdb_sys_ioprio_set: @@ -2126,10 +1917,8 @@ Do you want to stop the program?"), break; case gdb_sys_fstatat64: - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_stat64)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_stat64)) + return -1; break; case gdb_sys_unlinkat: @@ -2141,14 +1930,14 @@ Do you want to stop the program?"), case gdb_sys_readlinkat: regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); if (tmpulongest) - { - ULONGEST bufsiz; + { + ULONGEST bufsiz; - regcache_raw_read_unsigned (regcache, tdep->arg4, &bufsiz); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg4, &bufsiz); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) bufsiz)) - return -1; - } + return -1; + } break; case gdb_sys_fchmodat: @@ -2156,39 +1945,26 @@ Do you want to stop the program?"), break; case gdb_sys_pselect6: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_fd_set)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_fd_set)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_fd_set)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_timespec)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_fd_set) + || record_mem_at_reg (regcache, tdep->arg3, tdep->size_fd_set) + || record_mem_at_reg (regcache, tdep->arg4, tdep->size_fd_set) + || record_mem_at_reg (regcache, tdep->arg5, tdep->size_timespec)) + return -1; break; case gdb_sys_ppoll: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); if (tmpulongest) - { - ULONGEST nfds; + { + ULONGEST nfds; - regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_pollfd * nfds)) - return -1; - } - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_timespec)) - return -1; + return -1; + } + if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_timespec)) + return -1; break; case gdb_sys_unshare: @@ -2196,25 +1972,15 @@ Do you want to stop the program?"), break; case gdb_sys_get_robust_list: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_int)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_int)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_int) + || record_mem_at_reg (regcache, tdep->arg3, tdep->size_int)) + return -1; break; case gdb_sys_splice: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_loff_t)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_loff_t)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_loff_t) + || record_mem_at_reg (regcache, tdep->arg4, tdep->size_loff_t)) + return -1; break; case gdb_sys_sync_file_range: @@ -2225,47 +1991,49 @@ Do you want to stop the program?"), case gdb_sys_move_pages: regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); if (tmpulongest) - { - ULONGEST nr_pages; + { + ULONGEST nr_pages; - regcache_raw_read_unsigned (regcache, tdep->arg2, &nr_pages); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, + regcache_raw_read_unsigned (regcache, tdep->arg2, &nr_pages); + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, nr_pages * tdep->size_int)) - return -1; - } + return -1; + } break; case gdb_sys_getcpu: - regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_int)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_int)) - return -1; - regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_ulong * 2)) - return -1; + if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int) + || record_mem_at_reg (regcache, tdep->arg2, tdep->size_int) + || record_mem_at_reg (regcache, tdep->arg3, + tdep->size_ulong * 2)) + return -1; break; case gdb_sys_epoll_pwait: regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); if (tmpulongest) - { - ULONGEST maxevents; + { + ULONGEST maxevents; + + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents); + tmpint = (int) maxevents * tdep->size_epoll_event; + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint)) + return -1; + } + break; + + case gdb_sys_fallocate: + case gdb_sys_eventfd2: + case gdb_sys_epoll_create1: + case gdb_sys_dup3: + break; - regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents); - tmpint = (int) maxevents * tdep->size_epoll_event; - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint)) - return -1; - } + case gdb_sys_inotify_init1: break; default: printf_unfiltered (_("Process record and replay target doesn't " - "support syscall number %d\n"), syscall); + "support syscall number %d\n"), syscall); return -1; break; }