/* Process record and replay target code for GNU/Linux.
- Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+ Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
This file is part of GDB.
#include "defs.h"
#include "target.h"
+#include "gdbtypes.h"
#include "regcache.h"
#include "record.h"
#include "linux-record.h"
#define RECORD_Q_XGETQSTAT (('5' << 8) + 5)
#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))))
+
+static int
+record_linux_sockaddr (struct regcache *regcache,
+ struct linux_record_tdep *tdep, ULONGEST addr,
+ ULONGEST len)
+{
+ gdb_byte *a;
+ int addrlen;
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+
+ if (!addr)
+ return 0;
+
+ a = alloca (tdep->size_int);
+
+ if (record_arch_list_add_mem ((CORE_ADDR) len, tdep->size_int))
+ return -1;
+
+ /* Get the addrlen. */
+ 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;
+ }
+ addrlen = (int) extract_unsigned_integer (a, tdep->size_int, byte_order);
+ if (addrlen <= 0 || addrlen > tdep->size_sockaddr)
+ addrlen = tdep->size_sockaddr;
+
+ if (record_arch_list_add_mem ((CORE_ADDR) addr, addrlen))
+ return -1;
+
+ return 0;
+}
+
+static int
+record_linux_msghdr (struct regcache *regcache,
+ struct linux_record_tdep *tdep, ULONGEST addr)
+{
+ gdb_byte *a;
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+ CORE_ADDR tmpaddr;
+ int tmpint;
+
+ if (!addr)
+ return 0;
+
+ if (record_arch_list_add_mem ((CORE_ADDR) addr, tdep->size_msghdr))
+ return -1;
+
+ a = alloca (tdep->size_msghdr);
+ 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;
+ }
+
+ /* msg_name msg_namelen */
+ addr = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
+ a += tdep->size_pointer;
+ if (record_arch_list_add_mem ((CORE_ADDR) addr,
+ (int) extract_unsigned_integer (a,
+ tdep->size_int,
+ byte_order)))
+ return -1;
+ a += tdep->size_int;
+
+ /* msg_iov msg_iovlen */
+ addr = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
+ a += tdep->size_pointer;
+ if (addr)
+ {
+ ULONGEST i;
+ ULONGEST len = extract_unsigned_integer (a, tdep->size_size_t,
+ byte_order);
+ gdb_byte *iov = 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_arch_list_add_mem (tmpaddr, tmpint))
+ return -1;
+ addr += tdep->size_iovec;
+ }
+ }
+ a += tdep->size_size_t;
+
+ /* msg_control msg_controllen */
+ addr = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
+ a += tdep->size_pointer;
+ tmpint = (int) extract_unsigned_integer (a, tdep->size_size_t, byte_order);
+ if (record_arch_list_add_mem ((CORE_ADDR) addr, tmpint))
+ return -1;
+
+ return 0;
+}
+
/* 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
Return -1 if something wrong. */
int
-record_linux_system_call (int num, struct regcache *regcache,
- struct linux_record_tdep *tdep)
+record_linux_system_call (enum gdb_syscall syscall,
+ struct regcache *regcache,
+ struct linux_record_tdep *tdep)
{
- uint32_t tmpu32;
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+ ULONGEST tmpulongest;
+ CORE_ADDR tmpaddr;
+ int tmpint;
- switch (num)
+ switch (syscall)
{
- /* sys_restart_syscall */
- case 0:
+ case gdb_sys_restart_syscall:
break;
- /* sys_exit */
- case 1:
+ 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;
+ 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:
+ case gdb_sys_fork:
break;
- /* sys_read */
- case 3:
+ case gdb_sys_read:
{
- 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;
+ ULONGEST addr, count;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &addr);
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &count);
+ if (record_arch_list_add_mem ((CORE_ADDR) addr, (int) 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:
+ case gdb_sys_write:
+ case gdb_sys_open:
+ case gdb_sys_close:
+ case gdb_sys_waitpid:
+ case gdb_sys_creat:
+ case gdb_sys_link:
+ case gdb_sys_unlink:
+ case gdb_sys_execve:
+ case gdb_sys_chdir:
+ case gdb_sys_time:
+ case gdb_sys_mknod:
+ case gdb_sys_chmod:
+ case gdb_sys_lchown16:
+ case gdb_sys_ni_syscall17:
+ break;
+
+ case gdb_sys_stat:
+ case gdb_sys_fstat:
+ case gdb_sys_lstat:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size__old_kernel_stat))
+ return -1;
+ break;
+
+ case gdb_sys_lseek:
+ case gdb_sys_getpid:
+ case gdb_sys_mount:
+ case gdb_sys_oldumount:
+ case gdb_sys_setuid16:
+ case gdb_sys_getuid16:
+ case gdb_sys_stime:
+ break;
+
+ 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_arch_list_add_mem ((CORE_ADDR) tmpulongest, 4))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_alarm:
+ case gdb_sys_pause:
+ case gdb_sys_utime:
+ case gdb_sys_ni_syscall31:
+ case gdb_sys_ni_syscall32:
+ case gdb_sys_access:
+ case gdb_sys_nice:
+ case gdb_sys_ni_syscall35:
+ case gdb_sys_sync:
+ case gdb_sys_kill:
+ case gdb_sys_rename:
+ case gdb_sys_mkdir:
+ case gdb_sys_rmdir:
+ case gdb_sys_dup:
+ case gdb_sys_pipe:
+ break;
+
+ case gdb_sys_times:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_tms))
+ return -1;
+ break;
+
+ case gdb_sys_ni_syscall44:
+ case gdb_sys_brk:
+ case gdb_sys_setgid16:
+ case gdb_sys_getgid16:
+ case gdb_sys_signal:
+ case gdb_sys_geteuid16:
+ case gdb_sys_getegid16:
+ case gdb_sys_acct:
+ case gdb_sys_umount:
+ case gdb_sys_ni_syscall53:
+ break;
+
+ case gdb_sys_ioctl:
/* 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);
- if (record_arch_list_add_mem (tmpu32, tdep->size_char))
- 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;
- }
+ 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. */
+ }
+ else if (tmpulongest == tdep->ioctl_TCGETS
+ || tmpulongest == tdep->ioctl_TCGETA
+ || tmpulongest == tdep->ioctl_TIOCGLCKTRMIOS)
+ {
+ regcache_raw_read_unsigned (regcache, tdep->arg3,
+ &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_int))
+ return -1;
+ }
+ else if (tmpulongest == tdep->ioctl_TIOCGWINSZ)
+ {
+ regcache_raw_read_unsigned (regcache, tdep->arg3,
+ &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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_arch_list_add_mem ((CORE_ADDR) tmpulongest, 1))
+ return -1;
+ }
+ else if (tmpulongest == tdep->ioctl_TIOCGSERIAL)
+ {
+ regcache_raw_read_unsigned (regcache, tdep->arg3,
+ &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_serial_struct))
+ return -1;
+ }
+ else if (tmpulongest == tdep->ioctl_TCGETS2)
+ {
+ regcache_raw_read_unsigned (regcache, tdep->arg3,
+ &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_termios2))
+ return -1;
+ }
+ else if (tmpulongest == tdep->ioctl_FIOQSIZE)
+ {
+ regcache_raw_read_unsigned (regcache, tdep->arg3,
+ &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_loff_t))
+ return -1;
+ }
+ else if (tmpulongest == tdep->ioctl_TIOCGICOUNT)
+ {
+ regcache_raw_read_unsigned (regcache, tdep->arg3,
+ &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_serial_icounter_struct))
+ return -1;
+ }
+ else if (tmpulongest == tdep->ioctl_TIOCGHAYESESP)
+ {
+ regcache_raw_read_unsigned (regcache, tdep->arg3,
+ &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ }
else
- {
- printf_unfiltered (_("Process record and replay target doesn't "
- "support ioctl request 0x%08x.\n"),
- tmpu32);
- 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;
- /* sys_fcntl */
- case 55:
+ case gdb_sys_fcntl:
/* XXX */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
sys_fcntl:
- if (tmpu32 == F_GETLK)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock))
- return -1;
- }
+ if (tmpulongest == tdep->fcntl_F_GETLK)
+ {
+ regcache_raw_read_unsigned (regcache, tdep->arg3,
+ &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_flock))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_ni_syscall56:
+ case gdb_sys_setpgid:
+ case gdb_sys_ni_syscall58:
+ break;
+
+ case gdb_sys_olduname:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_oldold_utsname))
+ return -1;
+ break;
+
+ case gdb_sys_umask:
+ case gdb_sys_chroot:
break;
- /* sys_ni_syscall */
- case 56:
- /* sys_setpgid */
- case 57:
- /* sys_ni_syscall */
- case 58:
+ case gdb_sys_ustat:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ustat))
+ return -1;
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;
+ case gdb_sys_dup2:
+ case gdb_sys_getppid:
+ case gdb_sys_getpgrp:
+ case gdb_sys_setsid:
break;
- /* sys_umask */
- case 60:
- /* sys_chroot */
- case 61:
+ case gdb_sys_sigaction:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_sigaction))
+ return -1;
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;
+ case gdb_sys_sgetmask:
+ case gdb_sys_ssetmask:
+ case gdb_sys_setreuid16:
+ case gdb_sys_setregid16:
+ case gdb_sys_sigsuspend:
break;
- /* sys_dup2 */
- case 63:
- /* sys_getppid */
- case 64:
- /* sys_getpgrp */
- case 65:
- /* sys_setsid */
- case 66:
+ case gdb_sys_sigpending:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_sigset_t))
+ return -1;
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;
+ case gdb_sys_sethostname:
+ case gdb_sys_setrlimit:
break;
- /* sys_sgetmask */
- case 68:
- /* sys_ssetmask */
- case 69:
- /* sys_setreuid16 */
- case 70:
- /* sys_setregid16 */
- case 71:
- /* sys_sigsuspend */
- case 72:
+ case gdb_sys_old_getrlimit:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
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;
+ case gdb_sys_getrusage:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rusage))
+ return -1;
break;
- /* sys_sethostname */
- case 74:
- /* sys_setrlimit */
- case 75:
+ case gdb_sys_gettimeofday:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timeval))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timezone))
+ return -1;
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;
+ case gdb_sys_settimeofday:
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;
+ case gdb_sys_getgroups16:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_gid_t))
+ 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;
+ case gdb_sys_setgroups16:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_gid_t))
+ return -1;
break;
- /* sys_settimeofday */
- case 79:
+ 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_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_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;
+ case gdb_sys_symlink:
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;
+ case gdb_sys_readlink:
+ {
+ ULONGEST len;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg2,
+ &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &len);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len))
+ return -1;
+ }
break;
- /* old_select */
- case 82:
+ case gdb_sys_uselib:
+ case gdb_sys_swapon:
+ break;
+
+ case gdb_sys_reboot:
{
- 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 = 0x%s len = %d.\n",
- paddr_nz (tmpu32),
- (int) 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;
- }
+ 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;
- /* sys_symlink */
- case 83:
+ case gdb_old_readdir:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_dirent))
+ return -1;
break;
- /* sys_readlink */
- case 85:
+ case gdb_old_mmap:
+ break;
+
+ case gdb_sys_munmap:
{
- 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;
+ ULONGEST len;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
+ if (record_memory_query)
+ {
+ int q;
+
+ target_terminal_ours ();
+ q = 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;
+ }
}
break;
- /* sys_uselib */
- case 86:
- /* sys_swapon */
- case 87:
+ case gdb_sys_truncate:
+ case gdb_sys_ftruncate:
+ case gdb_sys_fchmod:
+ case gdb_sys_fchown16:
+ case gdb_sys_getpriority:
+ case gdb_sys_setpriority:
+ case gdb_sys_ni_syscall98:
+ break;
+
+ case gdb_sys_statfs:
+ case gdb_sys_fstatfs:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs))
+ return -1;
+ break;
+
+ case gdb_sys_ioperm:
break;
- /* sys_reboot */
- case 88:
+ case gdb_sys_socket:
+ case gdb_sys_sendto:
+ case gdb_sys_sendmsg:
+ case gdb_sys_shutdown:
+ case gdb_sys_bind:
+ case gdb_sys_connect:
+ case gdb_sys_listen:
+ case gdb_sys_setsockopt:
+ break;
+
+ case gdb_sys_accept:
+ case gdb_sys_getsockname:
+ case gdb_sys_getpeername:
{
- 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;
+ 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;
}
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;
+ case gdb_sys_recvfrom:
+ {
+ 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;
+ }
+ case gdb_sys_recv:
+ {
+ ULONGEST size;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &size);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) size))
+ return -1;
+ }
break;
- /* old_mmap */
- case 90:
+ case gdb_sys_recvmsg:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_linux_msghdr (regcache, tdep, tmpulongest))
+ return -1;
+ break;
+
+ case gdb_sys_socketpair:
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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 = 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_arch_list_add_mem ((CORE_ADDR) optvalp, tmpint))
+ return -1;
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_int))
+ 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 = 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 = 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_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 = 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 = 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_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 = alloca (tdep->size_ulong * 2);
+ gdb_byte *av = 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_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_arch_list_add_mem (tmpaddr, tdep->size_int))
+ return -1;
+ }
+ }
+ }
+ break;
+ case RECORD_SYS_SENDMSG:
+ break;
+ case RECORD_SYS_RECVMSG:
+ {
+ gdb_byte *a = 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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerval))
+ return -1;
+ break;
+
+ case gdb_sys_getitimer:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerval))
+ return -1;
+ break;
+
+ case gdb_sys_newstat:
+ case gdb_sys_newlstat:
+ case gdb_sys_newfstat:
+ case gdb_sys_newfstatat:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_stat))
+ return -1;
+ break;
+
+ case gdb_sys_uname:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_utsname))
+ return -1;
+ break;
+
+ case gdb_sys_iopl:
+ case gdb_sys_vhangup:
+ case gdb_sys_ni_syscall112:
+ case gdb_sys_vm86old:
+ break;
+
+ case gdb_sys_wait4:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_int))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_sysinfo))
+ return -1;
+ break;
+
+ case gdb_sys_shmget:
+ case gdb_sys_semget:
+ case gdb_sys_semop:
+ case gdb_sys_msgget:
+ /* XXX maybe need do some record works with sys_shmdt. */
+ case gdb_sys_shmdt:
+ case gdb_sys_msgsnd:
+ case gdb_sys_semtimedop:
+ break;
+
+ case gdb_sys_shmat:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ulong))
+ return -1;
+ break;
+
+ case gdb_sys_shmctl:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_shmid_ds))
+ return -1;
break;
- /* sys_munmap */
- case 91:
+ /* XXX sys_semctl 525 still not supported. */
+ /* sys_semctl */
+
+ case gdb_sys_msgrcv:
{
- 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 = 0x%s len = %d. "
- "It will make record target get error. "
- "Do you want to stop the program?"),
- paddr_nz (tmpu32), len);
- target_terminal_inferior ();
- if (q)
- return 1;
+ ULONGEST msgp;
+
+ regcache_raw_read_signed (regcache, tdep->arg3, &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &msgp);
+ tmpint = (int) tmpulongest + tdep->size_long;
+ if (record_arch_list_add_mem ((CORE_ADDR) msgp, tmpint))
+ 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 = 0x%s len = %d.\n",
- paddr_nz (tmpu32),
- (int) 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 = 0x%s len = %d.\n",
- paddr_nz (tmpu32),
- (int) 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 = 0x%s len = %d.\n",
- paddr_nz (tmpu32),
- (int) 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 = 0x%s "
- "len = %d.\n",
- paddr_nz (a[2]),
- (int) 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 = 0x%s len = %d.\n",
- paddr_nz (tmpu32),
- (int) 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 = 0x%s "
- "len = %d.\n",
- paddr_nz (a[2]),
- (int) 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 = 0x%s len = %d.\n",
- paddr_nz (tmpu32),
- (int) 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 = 0x%s "
- "len = %d.\n",
- paddr_nz (a[4]),
- (int) 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 = 0x%s len = %d.\n",
- paddr_nz (tmpu32),
- (int) 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 = 0x%s "
- "len = %d.\n",
- paddr_nz (a[1]),
- (int) 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 = 0x%s "
- "len = %d.\n",
- paddr_nz (rec.
- msg_iov),
- (int) 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%08x\n"),
- tmpu32);
- 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);
+ case gdb_sys_msgctl:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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:
+ /* XXX maybe need do some record works with RECORD_SHMDT. */
+ case RECORD_SHMDT:
+ case RECORD_SHMGET:
+ break;
+ case RECORD_MSGRCV:
+ {
+ ULONGEST 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_arch_list_add_mem ((CORE_ADDR) ptr, tmpint))
+ return -1;
+ }
+ break;
+ case RECORD_MSGCTL:
+ regcache_raw_read_unsigned (regcache, tdep->arg5,
+ &tmpulongest);
+ if (record_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_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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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"),
+ pulongest (tmpulongest));
+ break;
+ }
+ break;
+
+ case gdb_sys_fsync:
+ case gdb_sys_sigreturn:
+ case gdb_sys_clone:
+ case gdb_sys_setdomainname:
+ break;
+
+ case gdb_sys_newuname:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &ptr);
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &bytecount);
+ if (record_arch_list_add_mem ((CORE_ADDR) ptr, (int) bytecount))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_adjtimex:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_sigset_t))
+ return -1;
+ break;
+
+ case gdb_sys_ni_syscall127:
+ case gdb_sys_init_module:
+ case gdb_sys_delete_module:
+ case gdb_sys_ni_syscall130:
+ break;
+
+ 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_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_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_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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_fs_quota_stat))
+ return -1;
+ break;
+ }
+ break;
+
+ case gdb_sys_getpgid:
+ case gdb_sys_fchdir:
+ case gdb_sys_bdflush:
+ break;
+
+ 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_arch_list_add_mem (tmpu32, 10))
- return -1;
- }
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 10))
+ return -1;
+ }
break;
- /* sys_personality */
- case 136:
- /* sys_ni_syscall */
- case 137:
- /* sys_setfsuid16 */
- case 138:
- /* sys_setfsgid16 */
- case 139:
+ case gdb_sys_personality:
+ case gdb_sys_ni_syscall137:
+ case gdb_sys_setfsuid16:
+ case gdb_sys_setfsgid16:
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;
+ case gdb_sys_llseek:
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_loff_t))
+ return -1;
break;
- /* sys_getdents */
- case 141:
+ case gdb_sys_getdents:
{
- 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;
+ ULONGEST count;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg2,
+ &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &count);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ case gdb_sys_select:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_fd_set))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_fd_set))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_fd_set))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timeval))
+ return -1;
break;
- /* sys_flock */
- case 143:
- /* sys_msync */
- case 144:
+ case gdb_sys_flock:
+ case gdb_sys_msync:
break;
- /* sys_readv */
- case 145:
+ case gdb_sys_readv:
{
- 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 = 0x%s len = %d.\n",
- paddr_nz (vec),
- (int) 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);
- }
- }
+ ULONGEST vec, vlen;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &vec);
+ if (vec)
+ {
+ gdb_byte *iov = 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_arch_list_add_mem (tmpaddr, tmpint))
+ return -1;
+ vec += tdep->size_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:
+ case gdb_sys_writev:
+ case gdb_sys_getsid:
+ case gdb_sys_fdatasync:
+ case gdb_sys_sysctl:
+ case gdb_sys_mlock:
+ case gdb_sys_munlock:
+ case gdb_sys_mlockall:
+ case gdb_sys_munlockall:
+ case gdb_sys_sched_setparam:
+ break;
+
+ case gdb_sys_sched_getparam:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ break;
+
+ case gdb_sys_sched_setscheduler:
+ case gdb_sys_sched_getscheduler:
+ case gdb_sys_sched_yield:
+ case gdb_sys_sched_get_priority_max:
+ case gdb_sys_sched_get_priority_min:
+ break;
+
+ case gdb_sys_sched_rr_get_interval:
+ case gdb_sys_nanosleep:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timespec))
+ return -1;
+ break;
+
+ case gdb_sys_mremap:
+ case gdb_sys_setresuid16:
+ break;
+
+ case gdb_sys_getresuid16:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_uid_t))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_uid_t))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_uid_t))
+ return -1;
+ break;
+
+ case gdb_sys_vm86:
+ case gdb_sys_ni_syscall167:
+ break;
+
+ case gdb_sys_poll:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST nfds;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_pollfd * nfds))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_nfsservctl:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (tmpulongest == 7 || tmpulongest == 8)
+ {
+ 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_arch_list_add_mem ((CORE_ADDR) tmpulongest, rsize))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_setresgid16:
+ break;
+
+ case gdb_sys_getresgid16:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_gid_t))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_gid_t))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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_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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_sigaction))
+ return -1;
+ break;
+
+ case gdb_sys_rt_sigprocmask:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_sigset_t))
+ return -1;
+ break;
+
+ case gdb_sys_rt_sigpending:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST sigsetsize;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg2,&sigsetsize);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ (int) sigsetsize))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_rt_sigtimedwait:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_siginfo_t))
+ return -1;
+ break;
+
+ case gdb_sys_rt_sigqueueinfo:
+ case gdb_sys_rt_sigsuspend:
+ break;
+
+ case gdb_sys_pread64:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST count;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg3,&count);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) count))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_pwrite64:
+ case gdb_sys_chown16:
+ break;
+
+ case gdb_sys_getcwd:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST size;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &size);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) size))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_capget:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stack_t))
+ return -1;
+ break;
+
+ case gdb_sys_sendfile:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_off_t))
+ return -1;
+ break;
+
+ case gdb_sys_ni_syscall188:
+ case gdb_sys_ni_syscall189:
+ case gdb_sys_vfork:
+ break;
+
+ case gdb_sys_getrlimit:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
+ break;
+
+ case gdb_sys_mmap2:
+ break;
+
+ case gdb_sys_truncate64:
+ case gdb_sys_ftruncate64:
+ break;
+
+ case gdb_sys_stat64:
+ case gdb_sys_lstat64:
+ case gdb_sys_fstat64:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
+ break;
+
+ case gdb_sys_lchown:
+ case gdb_sys_getuid:
+ case gdb_sys_getgid:
+ case gdb_sys_geteuid:
+ case gdb_sys_getegid:
+ case gdb_sys_setreuid:
+ case gdb_sys_setregid:
+ break;
+
+ case gdb_sys_getgroups:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST gidsetsize;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &gidsetsize);
+ tmpint = tdep->size_gid_t * (int) gidsetsize;
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_setgroups:
+ case gdb_sys_fchown:
+ case gdb_sys_setresuid:
+ break;
+
+ case gdb_sys_getresuid:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_uid_t))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_uid_t))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gid_t))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gid_t))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gid_t))
+ return -1;
+ break;
+
+ case gdb_sys_chown:
+ case gdb_sys_setuid:
+ case gdb_sys_setgid:
+ case gdb_sys_setfsuid:
+ case gdb_sys_setfsgid:
+ case gdb_sys_pivot_root:
+ break;
+
+ case gdb_sys_mincore:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_PAGE_SIZE))
+ return -1;
+ break;
+
+ case gdb_sys_madvise:
+ break;
+
+ case gdb_sys_getdents64:
{
- 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;
+ ULONGEST count;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg2,
+ &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &count);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_dirent64 * count))
+ return -1;
}
break;
- /* sys_fcntl64 */
- case 221:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- switch (tmpu32)
- {
- case F_GETLK64:
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock64))
- return -1;
- break;
- case F_SETLK64:
- case F_SETLKW64:
- break;
- default:
- goto sys_fcntl;
- break;
- }
- 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 = 0x%s len = %d.\n",
- paddr_nz (tmpu32), 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:
+ 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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_flock64))
+ return -1;
+ }
+ else if (tmpulongest != tdep->fcntl_F_SETLK64
+ && tmpulongest != tdep->fcntl_F_SETLKW64)
+ {
+ goto sys_fcntl;
+ }
+ break;
+
+ case gdb_sys_ni_syscall222:
+ case gdb_sys_ni_syscall223:
+ case gdb_sys_gettid:
+ case gdb_sys_readahead:
+ case gdb_sys_setxattr:
+ case gdb_sys_lsetxattr:
+ case gdb_sys_fsetxattr:
+ break;
+
+ case gdb_sys_getxattr:
+ case gdb_sys_lgetxattr:
+ case gdb_sys_fgetxattr:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST size;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &size);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) size))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_listxattr:
+ case gdb_sys_llistxattr:
+ case gdb_sys_flistxattr:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST size;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &size);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) size))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_removexattr:
+ case gdb_sys_lremovexattr:
+ case gdb_sys_fremovexattr:
+ case gdb_sys_tkill:
+ break;
+
+ case gdb_sys_sendfile64:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_loff_t))
+ return -1;
+ break;
+
+ case gdb_sys_futex:
+ case gdb_sys_sched_setaffinity:
+ break;
+
+ case gdb_sys_sched_getaffinity:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST len;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_set_thread_area:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ break;
+
+ case gdb_sys_get_thread_area:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_user_desc))
+ return -1;
+ break;
+
+ case gdb_sys_io_setup:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_long))
+ return -1;
+ break;
+
+ case gdb_sys_io_destroy:
+ break;
+
+ case gdb_sys_io_getevents:
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST nr;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &nr);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ nr * tdep->size_io_event))
+ 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 = 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_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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_io_event))
+ return -1;
+ break;
+
+ case gdb_sys_fadvise64:
+ case gdb_sys_ni_syscall251:
+ 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;
+ 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;
- }
+ case gdb_sys_lookup_dcookie:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST len;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &len);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_epoll_create:
+ case gdb_sys_epoll_ctl:
+ break;
+
+ case gdb_sys_epoll_wait:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST maxevents;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ maxevents * tdep->size_epoll_event))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_remap_file_pages:
+ case gdb_sys_set_tid_address:
+ break;
+
+ case gdb_sys_timer_create:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ break;
+
+ case gdb_sys_timer_settime:
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerspec))
+ return -1;
+ break;
+
+ case gdb_sys_timer_gettime:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerspec))
+ return -1;
+ break;
+
+ case gdb_sys_timer_getoverrun:
+ case gdb_sys_timer_delete:
+ case gdb_sys_clock_settime:
+ break;
+
+ case gdb_sys_clock_gettime:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timespec))
+ return -1;
+ break;
+
+ case gdb_sys_clock_getres:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timespec))
+ return -1;
+ break;
+
+ case gdb_sys_clock_nanosleep:
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timespec))
+ return -1;
+ break;
+
+ case gdb_sys_statfs64:
+ case gdb_sys_fstatfs64:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs64))
+ return -1;
+ break;
+
+ case gdb_sys_tgkill:
+ case gdb_sys_utimes:
+ case gdb_sys_fadvise64_64:
+ case gdb_sys_ni_syscall273:
+ case gdb_sys_mbind:
+ break;
+
+ case gdb_sys_get_mempolicy:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST maxnode;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &maxnode);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ maxnode * tdep->size_long))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_set_mempolicy:
+ case gdb_sys_mq_open:
+ case gdb_sys_mq_unlink:
+ case gdb_sys_mq_timedsend:
+ break;
+
+ case gdb_sys_mq_timedreceive:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST msg_len;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &msg_len);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ (int) msg_len))
+ return -1;
+ }
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_mq_attr))
+ return -1;
+ break;
+
+ case gdb_sys_kexec_load:
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;
- }
+ case gdb_sys_waitid:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_siginfo))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rusage))
+ return -1;
+ break;
+
+ case gdb_sys_ni_syscall285:
+ case gdb_sys_add_key:
+ case gdb_sys_request_key:
+ break;
+
+ 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_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ (int) buflen))
+ return -1;
+ }
+ }
+ break;
+
+ case gdb_sys_ioprio_set:
+ case gdb_sys_ioprio_get:
+ case gdb_sys_inotify_init:
+ case gdb_sys_inotify_add_watch:
+ case gdb_sys_inotify_rm_watch:
+ case gdb_sys_migrate_pages:
+ case gdb_sys_openat:
+ case gdb_sys_mkdirat:
+ case gdb_sys_mknodat:
+ case gdb_sys_fchownat:
+ case gdb_sys_futimesat:
+ break;
+
+ case gdb_sys_fstatat64:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
+ break;
+
+ case gdb_sys_unlinkat:
+ case gdb_sys_renameat:
+ case gdb_sys_linkat:
+ case gdb_sys_symlinkat:
+ break;
+
+ case gdb_sys_readlinkat:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST bufsiz;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &bufsiz);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) bufsiz))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_fchmodat:
+ case gdb_sys_faccessat:
+ break;
+
+ case gdb_sys_pselect6:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_fd_set))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_fd_set))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_fd_set))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timespec))
+ return -1;
+ break;
+
+ case gdb_sys_ppoll:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST nfds;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_pollfd * nfds))
+ return -1;
+ }
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timespec))
+ return -1;
+ break;
+
+ case gdb_sys_unshare:
+ case gdb_sys_set_robust_list:
+ break;
+
+ case gdb_sys_get_robust_list:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ break;
+
+ case gdb_sys_splice:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_loff_t))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_loff_t))
+ return -1;
+ break;
+
+ case gdb_sys_sync_file_range:
+ case gdb_sys_tee:
+ case gdb_sys_vmsplice:
+ break;
+
+ case gdb_sys_move_pages:
+ regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST nr_pages;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &nr_pages);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ nr_pages * tdep->size_int))
+ return -1;
+ }
+ break;
+
+ case gdb_sys_getcpu:
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ulong * 2))
+ return -1;
+ break;
+
+ case gdb_sys_epoll_pwait:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST maxevents;
+
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents);
+ tmpint = (int) maxevents * tdep->size_epoll_event;
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint))
+ return -1;
+ }
break;
default:
printf_unfiltered (_("Process record and replay target doesn't "
- "support syscall number 0x%08x\n"),
- tmpu32);
+ "support syscall number %d\n"), syscall);
return -1;
break;
}