* [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3
@ 2009-07-07 2:40 Hui Zhu
2009-07-13 2:26 ` Michael Snyder
0 siblings, 1 reply; 8+ messages in thread
From: Hui Zhu @ 2009-07-07 2:40 UTC (permalink / raw)
To: gdb-patches ml, Michael Snyder
[-- Attachment #1: Type: text/plain, Size: 118153 bytes --]
The old linux-record.c just support 32 bits system call and some other
problem. This patch fix them all.
2009-07-07 Hui Zhu <teawater@gmail.com>
Add process record Linux system call 64 bits support.
* linux-record.h (linux_record_tdep): Add size_pointer,
size_size_t, size_iovec and arg6.
* i386-linux-tdep.c (i386_linux_init_abi): Ditto.
(i386_linux_intx80_sysenter_record): Add a check for system
call number.
* linux-record.c (record_linux_system_call): Make this
function support 64 bits.
---
i386-linux-tdep.c | 13
linux-record.c | 2558 ++++++++++++++++++++++++++++++------------------------
linux-record.h | 5
3 files changed, 1468 insertions(+), 1108 deletions(-)
--- a/i386-linux-tdep.c
+++ b/i386-linux-tdep.c
@@ -371,8 +371,15 @@ i386_linux_intx80_sysenter_record (struc
regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32);
+ if (tmpu32 > 499)
+ {
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support syscall number %u\n"), tmpu32);
+ return -1;
+ }
+
ret = record_linux_system_call (tmpu32, regcache,
- &i386_linux_record_tdep);
+ &i386_linux_record_tdep);
if (ret)
return ret;
@@ -481,6 +488,7 @@ i386_linux_init_abi (struct gdbarch_info
/* Initialize the i386_linux_record_tdep. */
/* These values are the size of the type that will be used in a system
call. They are obtained from Linux Kernel source. */
+ i386_linux_record_tdep.size_pointer = 4;
i386_linux_record_tdep.size__old_kernel_stat = 32;
i386_linux_record_tdep.size_tms = 16;
i386_linux_record_tdep.size_loff_t = 8;
@@ -546,6 +554,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_serial_struct = 60;
i386_linux_record_tdep.size_serial_icounter_struct = 80;
i386_linux_record_tdep.size_hayes_esp_config = 12;
+ i386_linux_record_tdep.size_size_t = 4;
+ i386_linux_record_tdep.size_iovec = 8;
/* These values are the second argument of system call "sys_ioctl".
They are obtained from Linux Kernel source. */
@@ -627,6 +637,7 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.arg3 = I386_EDX_REGNUM;
i386_linux_record_tdep.arg4 = I386_ESI_REGNUM;
i386_linux_record_tdep.arg5 = I386_EDI_REGNUM;
+ i386_linux_record_tdep.arg6 = I386_EBP_REGNUM;
tdep->i386_intx80_record = i386_linux_intx80_sysenter_record;
tdep->i386_sysenter_record = i386_linux_intx80_sysenter_record;
--- a/linux-record.c
+++ b/linux-record.c
@@ -19,6 +19,7 @@
#include "defs.h"
#include "target.h"
+#include "gdbtypes.h"
#include "regcache.h"
#include "record.h"
#include "linux-record.h"
@@ -80,6 +81,132 @@
#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);
+
+ 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;
+ }
+ if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+ (iov, tdep->size_pointer,
+ byte_order),
+ (int)extract_unsigned_integer
+ (iov + tdep->size_pointer,
+ tdep->size_size_t,
+ byte_order)))
+ 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;
+ if (record_arch_list_add_mem ((CORE_ADDR)addr,
+ (int)extract_unsigned_integer
+ (a, tdep->size_size_t, byte_order)))
+ 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
@@ -94,10 +221,11 @@
int
record_linux_system_call (int num, struct regcache *regcache,
- struct linux_record_tdep *tdep)
+ struct linux_record_tdep *tdep)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
- uint32_t tmpu32;
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+ ULONGEST tmpulongest;
switch (num)
{
@@ -108,15 +236,15 @@ record_linux_system_call (int num, struc
/* sys_exit */
case 1:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_ ("The next instruction is syscall exit. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
@@ -127,11 +255,11 @@ record_linux_system_call (int num, struc
/* sys_read */
case 3:
{
- uint32_t addr, count;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (addr, count))
- return -1;
+ 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;
@@ -171,9 +299,10 @@ record_linux_system_call (int num, struc
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;
+ 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;
/* sys_lseek */
@@ -194,16 +323,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_alarm */
@@ -240,9 +369,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_tms))
+ return -1;
break;
/* sys_ni_syscall */
@@ -270,149 +399,172 @@ record_linux_system_call (int num, struc
/* sys_ioctl */
case 54:
/* XXX Need to add a lot of support of other ioctl requests. */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (tmpu32 == tdep->ioctl_FIOCLEX || tmpu32 == tdep->ioctl_FIONCLEX
- || tmpu32 == tdep->ioctl_FIONBIO || tmpu32 == tdep->ioctl_FIOASYNC
- || tmpu32 == tdep->ioctl_TCSETS || tmpu32 == tdep->ioctl_TCSETSW
- || tmpu32 == tdep->ioctl_TCSETSF || tmpu32 == tdep->ioctl_TCSETA
- || tmpu32 == tdep->ioctl_TCSETAW || tmpu32 == tdep->ioctl_TCSETAF
- || tmpu32 == tdep->ioctl_TCSBRK || tmpu32 == tdep->ioctl_TCXONC
- || tmpu32 == tdep->ioctl_TCFLSH || tmpu32 == tdep->ioctl_TIOCEXCL
- || tmpu32 == tdep->ioctl_TIOCNXCL
- || tmpu32 == tdep->ioctl_TIOCSCTTY
- || tmpu32 == tdep->ioctl_TIOCSPGRP || tmpu32 == tdep->ioctl_TIOCSTI
- || tmpu32 == tdep->ioctl_TIOCSWINSZ
- || tmpu32 == tdep->ioctl_TIOCMBIS || tmpu32 == tdep->ioctl_TIOCMBIC
- || tmpu32 == tdep->ioctl_TIOCMSET
- || tmpu32 == tdep->ioctl_TIOCSSOFTCAR
- || tmpu32 == tdep->ioctl_TIOCCONS
- || tmpu32 == tdep->ioctl_TIOCSSERIAL
- || tmpu32 == tdep->ioctl_TIOCPKT || tmpu32 == tdep->ioctl_TIOCNOTTY
- || tmpu32 == tdep->ioctl_TIOCSETD || tmpu32 == tdep->ioctl_TCSBRKP
- || tmpu32 == tdep->ioctl_TIOCTTYGSTRUCT
- || tmpu32 == tdep->ioctl_TIOCSBRK || tmpu32 == tdep->ioctl_TIOCCBRK
- || tmpu32 == tdep->ioctl_TCSETS2 || tmpu32 == tdep->ioctl_TCSETSW2
- || tmpu32 == tdep->ioctl_TCSETSF2
- || tmpu32 == tdep->ioctl_TIOCSPTLCK
- || tmpu32 == tdep->ioctl_TIOCSERCONFIG
- || tmpu32 == tdep->ioctl_TIOCSERGWILD
- || tmpu32 == tdep->ioctl_TIOCSERSWILD
- || tmpu32 == tdep->ioctl_TIOCSLCKTRMIOS
- || tmpu32 == tdep->ioctl_TIOCSERGETMULTI
- || tmpu32 == tdep->ioctl_TIOCSERSETMULTI
- || tmpu32 == tdep->ioctl_TIOCMIWAIT
- || tmpu32 == tdep->ioctl_TIOCSHAYESESP)
- {
- /* Nothing to do. */
- }
- else if (tmpu32 == tdep->ioctl_TCGETS || tmpu32 == tdep->ioctl_TCGETA
- || tmpu32 == tdep->ioctl_TIOCGLCKTRMIOS)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGPGRP
- || tmpu32 == tdep->ioctl_TIOCGSID)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCOUTQ
- || tmpu32 == tdep->ioctl_TIOCMGET
- || tmpu32 == tdep->ioctl_TIOCGSOFTCAR
- || tmpu32 == tdep->ioctl_FIONREAD
- || tmpu32 == tdep->ioctl_TIOCINQ
- || tmpu32 == tdep->ioctl_TIOCGETD
- || tmpu32 == tdep->ioctl_TIOCGPTN
- || tmpu32 == tdep->ioctl_TIOCSERGETLSR)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_int))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGWINSZ)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_winsize))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCLINUX)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
+ 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 affect a char size memory. */
- if (record_arch_list_add_mem (tmpu32, 1))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGSERIAL)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TCGETS2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios2))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_FIOQSIZE)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGICOUNT)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem
- (tmpu32, tdep->size_serial_icounter_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGHAYESESP)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT)
- {
- printf_unfiltered (_("Process record and replay target doesn't "
- "support ioctl request TIOCSERGSTRUCT\n"));
- return 1;
- }
+ 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%s.\n"),
- phex_nz (tmpu32, 4));
- 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:
/* XXX */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
sys_fcntl:
- if (tmpu32 == tdep->fcntl_F_GETLK)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock))
- return -1;
- }
+ 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;
/* sys_ni_syscall */
@@ -425,9 +577,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_oldold_utsname))
+ return -1;
break;
/* sys_umask */
@@ -438,9 +591,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_ustat))
+ return -1;
break;
/* sys_dup2 */
@@ -455,9 +609,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sgetmask */
@@ -474,9 +629,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sethostname */
@@ -487,26 +643,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_getrusage */
case 77:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_rusage))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_rusage))
+ return -1;
break;
/* sys_gettimeofday */
case 78:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timeval))
- return -1;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timezone))
- return -1;
+ 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_settimeofday */
@@ -515,53 +675,56 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_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;
+ 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;
/* old_select */
case 82:
{
- struct sel_arg_struct
- {
- CORE_ADDR n;
- CORE_ADDR inp;
- CORE_ADDR outp;
- CORE_ADDR exp;
- CORE_ADDR tvp;
- } sel;
+ struct sel_arg_struct
+ {
+ CORE_ADDR n;
+ CORE_ADDR inp;
+ CORE_ADDR outp;
+ CORE_ADDR exp;
+ CORE_ADDR tvp;
+ } sel;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (sel));
- return -1;
- }
- if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval))
- return -1;
- }
+ 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;
@@ -572,12 +735,12 @@ record_linux_system_call (int num, struc
/* sys_readlink */
case 85:
{
- uint32_t len;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len);
- if (record_arch_list_add_mem (tmpu32, len))
- return -1;
+ 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;
@@ -590,23 +753,24 @@ record_linux_system_call (int num, struc
/* sys_reboot */
case 88:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall reboot. "
- "It will restart the computer. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ int q;
+ target_terminal_ours ();
+ q =
+ yquery (_("The next instruction is syscall reboot. "
+ "It will restart the computer. "
+ "Do you want to stop the program?"));
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
/* old_readdir */
case 89:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_dirent))
+ return -1;
break;
/* old_mmap */
@@ -616,22 +780,22 @@ record_linux_system_call (int num, struc
/* sys_munmap */
case 91:
{
- int q;
- uint32_t len;
+ int q;
+ ULONGEST len;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len);
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall munmap. "
- "It will free the memory addr = %s len = %u. "
- "It will make record target get error. "
- "Do you want to stop the program?"),
- paddress (gdbarch, tmpu32), (int)len);
- target_terminal_inferior ();
- if (q)
- return 1;
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
+ target_terminal_ours ();
+ q =
+ yquery (_("The next instruction is syscall munmap. "
+ "It will free the memory addr = 0x%s len = %u. "
+ "It will make record target get error. "
+ "Do you want to stop the program?"),
+ OUTPUT_REG (tmpulongest, tdep->arg1), (int)len);
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
@@ -655,292 +819,347 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_statfs))
+ return -1;
break;
/* sys_ioperm */
case 101:
break;
+ /* sys_socket */
+ case 500:
+ /* sys_sendto */
+ case 503:
+ /* sys_sendmsg */
+ case 505:
+ /* sys_shutdown */
+ case 507:
+ /* sys_bind */
+ case 508:
+ /* sys_connect */
+ case 501:
+ /* sys_listen */
+ case 509:
+ /* sys_setsockopt */
+ case 513:
+ break;
+
+ /* sys_accept */
+ case 502:
+ /* sys_getsockname */
+ case 510:
+ /* sys_getpeername */
+ case 511:
+ {
+ 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;
+
+ /* sys_recvfrom */
+ case 504:
+ {
+ 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;
+ }
+ /* sys_recv */
+ case 515:
+ {
+ 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;
+
+ /* sys_recvmsg */
+ case 506:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_linux_msghdr (regcache, tdep, tmpulongest))
+ return -1;
+ break;
+
+ /* sys_socketpair */
+ case 512:
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int))
+ return -1;
+ break;
+
+ /* sys_getsockopt */
+ case 514:
+ 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);
+ if (record_arch_list_add_mem ((CORE_ADDR)optvalp,
+ (int)extract_signed_integer
+ (optlenp, tdep->size_int,
+ byte_order)))
+ return -1;
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_int))
+ return -1;
+ }
+ break;
+
/* sys_socketcall */
case 102:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- switch (tmpu32)
- {
- case RECORD_SYS_SOCKET:
- case RECORD_SYS_BIND:
- case RECORD_SYS_CONNECT:
- case RECORD_SYS_LISTEN:
- break;
- case RECORD_SYS_ACCEPT:
- case RECORD_SYS_GETSOCKNAME:
- case RECORD_SYS_GETPEERNAME:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[2], tdep->size_int))
- return -1;
- }
- }
- break;
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
- case RECORD_SYS_SOCKETPAIR:
- {
- uint32_t a[4];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], tdep->size_int))
- return -1;
- }
- }
- break;
- case RECORD_SYS_SEND:
- case RECORD_SYS_SENDTO:
- break;
- case RECORD_SYS_RECV:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_RECVFROM:
- {
- uint32_t a[6];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[5], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SHUTDOWN:
- case RECORD_SYS_SETSOCKOPT:
- break;
- case RECORD_SYS_GETSOCKOPT:
- {
- uint32_t a[5];
- uint32_t av;
+ 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;
+ }
+ if (record_linux_sockaddr (regcache, tdep,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ extract_unsigned_integer
+ (a + tdep->size_ulong,
+ tdep->size_ulong, byte_order)))
+ return -1;
+ }
+ }
+ break;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[4])
- {
- if (target_read_memory
- (a[4], (gdb_byte *) & av, sizeof (av)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[4]),
- (unsigned long)sizeof (av));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], av))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SENDMSG:
- break;
- case RECORD_SYS_RECVMSG:
- {
- uint32_t a[2], i;
- struct record_msghdr
- {
- uint32_t msg_name;
- uint32_t msg_namelen;
- uint32_t msg_iov;
- uint32_t msg_iovlen;
- uint32_t msg_control;
- uint32_t msg_controllen;
- uint32_t msg_flags;
- } rec;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
+ 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;
+ }
+ if (record_arch_list_add_mem
((CORE_ADDR)extract_unsigned_integer
+ (a,
+ tdep->size_ulong,
+ byte_order),
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_msghdr))
- return -1;
- if (a[1])
- {
- if (target_read_memory
- (a[1], (gdb_byte *) & rec, sizeof (rec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[1]),
- (unsigned long)sizeof (rec));
- return -1;
- }
- if (record_arch_list_add_mem
- (rec.msg_name, rec.msg_namelen))
- return -1;
- if (record_arch_list_add_mem
- (rec.msg_control, rec.msg_controllen))
- return -1;
- if (rec.msg_iov)
- {
- for (i = 0; i < rec.msg_iovlen; i++)
- {
- if (target_read_memory
- (rec.msg_iov, (gdb_byte *) & iov,
- sizeof (iov)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error "
- "reading memory at "
- "addr = %s "
- "len = %lu.\n",
- paddress (gdbarch,
- rec.msg_iov),
- (unsigned long)sizeof (iov));
- return -1;
- }
- if (record_arch_list_add_mem
- (iov.iov_base, iov.iov_len))
- return -1;
- rec.msg_iov += sizeof (struct record_iovec);
- }
- }
- }
- }
- }
- break;
- default:
- printf_unfiltered (_("Process record and replay target "
- "doesn't support socketcall call 0x%s\n"),
- phex_nz (tmpu32, 4));
- return -1;
- break;
- }
+ 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;
+ }
+ if (record_linux_sockaddr (regcache, tdep,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ extract_unsigned_integer
+ (a + tdep->size_ulong,
+ tdep->size_ulong, byte_order)))
+ 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;
+ if (record_arch_list_add_mem
+ ((CORE_ADDR)tmpulongest,
+ (int)extract_unsigned_integer(a, tdep->size_ulong,
+ byte_order)))
+ 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;
+ }
+ if (record_arch_list_add_mem
+ ((CORE_ADDR)extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ (int)extract_unsigned_integer (av, tdep->size_int,
+ byte_order)))
+ return -1;
+ a += tdep->size_ulong;
+ if (record_arch_list_add_mem
+ ((CORE_ADDR)extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ 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,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order)))
+ 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;
/* sys_syslog */
@@ -949,16 +1168,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_itimerval))
+ return -1;
break;
/* sys_newstat */
@@ -967,16 +1188,19 @@ record_linux_system_call (int num, struc
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;
+ /* sys_newfstatat */
+ case 540:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_old_utsname))
+ return -1;
break;
/* sys_iopl */
@@ -991,12 +1215,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_swapoff */
@@ -1005,47 +1231,121 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_sysinfo))
+ return -1;
+ break;
+
+ /* sys_shmget */
+ case 520:
+ /* sys_semget */
+ case 523:
+ /* sys_semop */
+ case 524:
+ /* sys_msgget */
+ case 528:
+ /* sys_shmdt */
+ /* XXX maybe need do some record works wiht sys_shmdt. */
+ case 527:
+ /* sys_msgsnd */
+ case 529:
+ /* sys_semtimedop */
+ case 532:
+ break;
+
+ /* sys_shmat */
+ case 521:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_ulong))
+ return -1;
+ break;
+
+ /* sys_shmctl */
+ case 522:
+ 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_semctl */
+ /* XXX sys_semctl 525 still not support. */
+
+ /* sys_msgrcv */
+ case 530:
+ {
+ ULONGEST msgp;
+ regcache_raw_read_signed (regcache, tdep->arg3, &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &msgp);
+ if (record_arch_list_add_mem ((CORE_ADDR)msgp,
+ (int)tmpulongest + tdep->size_long))
+ return -1;
+ }
+ break;
+
+ /* sys_msgctl */
+ case 531:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_msqid_ds))
+ 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;
- }
+ 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 wiht 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);
+ if (record_arch_list_add_mem ((CORE_ADDR)ptr,
+ (int)second + tdep->size_long))
+ 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 support. */
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support ipc number %d\n"), (int)tmpulongest);
+ break;
+ }
break;
/* sys_fsync */
@@ -1060,30 +1360,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_timex))
+ return -1;
break;
/* sys_mprotect */
@@ -1092,9 +1392,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -1109,35 +1410,39 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_getpgid */
@@ -1150,15 +1455,15 @@ record_linux_system_call (int num, struc
/* sys_sysfs */
case 135:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (tmpu32 == 2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- /*XXX the size of memory is not very clear. */
- if (record_arch_list_add_mem (tmpu32, 10))
- return -1;
- }
+ 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 ((CORE_ADDR)tmpulongest, 10))
+ return -1;
+ }
break;
/* sys_personality */
@@ -1173,37 +1478,43 @@ record_linux_system_call (int num, struc
/* 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;
+ 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:
{
- 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;
+ 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 */
@@ -1215,36 +1526,37 @@ record_linux_system_call (int num, struc
/* sys_readv */
case 145:
{
- uint32_t vec;
- uint32_t vlen;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec);
- if (vec)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & vlen);
- for (tmpu32 = 0; tmpu32 < vlen; tmpu32++)
- {
- if (target_read_memory
- (vec, (gdb_byte *) & iov, sizeof (struct record_iovec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, vec),
- (unsigned long)sizeof (struct record_iovec));
- return -1;
- }
- if (record_arch_list_add_mem (iov.iov_base, iov.iov_len))
- return -1;
- vec += sizeof (struct record_iovec);
- }
- }
+ 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;
+ }
+ if (record_arch_list_add_mem
+ ((CORE_ADDR)extract_unsigned_integer
+ (iov, tdep->size_pointer, byte_order),
+ (int)extract_unsigned_integer
+ (iov + tdep->size_pointer, tdep->size_size_t,
+ byte_order)))
+ return -1;
+ vec += tdep->size_iovec;
+ }
+ }
}
break;
@@ -1270,9 +1582,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int))
+ return -1;
break;
/* sys_sched_setscheduler */
@@ -1291,9 +1603,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_timespec))
+ return -1;
break;
/* sys_mremap */
@@ -1304,15 +1617,17 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_vm86 */
@@ -1323,32 +1638,32 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
- }
+ 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;
/* sys_setresgid16 */
@@ -1357,35 +1672,37 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
- }
+ 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;
/* sys_rt_sigreturn */
@@ -1394,36 +1711,39 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_siginfo_t))
+ return -1;
break;
/* sys_rt_sigqueueinfo */
@@ -1434,15 +1754,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_pwrite64 */
@@ -1453,22 +1772,22 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* sys_capset */
@@ -1477,16 +1796,17 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_off_t))
+ return -1;
break;
/* sys_ni_syscall */
@@ -1499,9 +1819,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_mmap2 */
@@ -1520,9 +1841,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_lchown */
@@ -1543,16 +1865,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST gidsetsize;
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &gidsetsize);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_gid_t * (int)gidsetsize))
+ return -1;
+ }
break;
/* sys_setgroups */
@@ -1565,15 +1887,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_setresgid */
@@ -1582,15 +1904,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_chown */
@@ -1609,9 +1931,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_PAGE_SIZE))
+ return -1;
break;
/* sys_madvise */
@@ -1621,30 +1944,32 @@ record_linux_system_call (int num, struc
/* sys_getdents64 */
case 220:
{
- uint32_t count;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count))
- return -1;
+ 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);
- if (tmpu32 == tdep->fcntl_F_GETLK64)
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest == tdep->fcntl_F_GETLK64)
{
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock64))
- return -1;
- }
- else if (tmpu32 != tdep->fcntl_F_SETLK64
- && tmpu32 != tdep->fcntl_F_SETLKW64)
+ 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;
- }
+ goto sys_fcntl;
+ }
break;
/* sys_ni_syscall */
@@ -1669,15 +1994,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_listxattr */
@@ -1686,15 +2010,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_removexattr */
@@ -1709,9 +2032,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_loff_t))
+ return -1;
break;
/* sys_futex */
@@ -1722,35 +2046,36 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_long))
+ return -1;
break;
/* sys_io_destroy */
@@ -1759,49 +2084,57 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_io_submit */
case 248:
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- int32_t i, nr;
- uint32_t *iocbp;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr);
- iocbp = (uint32_t *) alloca (nr * tdep->size_int);
- if (target_read_memory
- (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %u.\n",
- paddress (gdbarch, tmpu32),
- (int)(nr * tdep->size_int));
- return -1;
- }
- for (i = 0; i < nr; i++)
- {
- if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb))
- return -1;
- }
- }
+ 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++)
+ {
+ if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+ (iocbp,
+ tdep->size_pointer,
+ byte_order),
+ tdep->size_iocb))
+ return -1;
+ iocbp += tdep->size_pointer;
+ }
+ }
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_io_event))
+ return -1;
break;
/* sys_fadvise64 */
@@ -1813,28 +2146,28 @@ record_linux_system_call (int num, struc
/* sys_exit_group */
case 252:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall exit_group. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
- }
+ 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;
/* sys_epoll_create */
@@ -1845,16 +2178,15 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_remap_file_pages */
@@ -1865,23 +2197,25 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_itimerspec))
+ return -1;
break;
/* sys_timer_getoverrun */
@@ -1894,32 +2228,36 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_statfs64))
+ return -1;
break;
/* sys_tgkill */
@@ -1936,18 +2274,18 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_set_mempolicy */
@@ -1962,18 +2300,17 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_mq_notify */
@@ -1982,9 +2319,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_mq_attr))
+ return -1;
break;
/* sys_kexec_load */
@@ -1993,12 +2331,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -2011,20 +2351,20 @@ record_linux_system_call (int num, struc
/* 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;
- }
- }
+ 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;
/* sys_ioprio_set */
@@ -2053,9 +2393,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_unlinkat */
@@ -2070,15 +2411,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_fchmodat */
@@ -2089,34 +2429,39 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_unshare */
@@ -2127,22 +2472,24 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_sync_file_range */
@@ -2155,48 +2502,47 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* 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;
- }
+ 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,
+ (int)maxevents *
tdep->size_epoll_event))
+ return -1;
+ }
break;
default:
printf_unfiltered (_("Process record and replay target doesn't "
- "support syscall number %u\n"),
- (int)tmpu32);
+ "support syscall number %u\n"), num);
return -1;
break;
}
--- a/linux-record.h
+++ b/linux-record.h
@@ -23,6 +23,7 @@
struct linux_record_tdep
{
/* The size of the type that will be used in a system call. */
+ int size_pointer;
int size__old_kernel_stat;
int size_tms;
int size_loff_t;
@@ -81,7 +82,6 @@ struct linux_record_tdep
int size_itimerspec;
int size_mq_attr;
int size_siginfo;
-
int size_termios;
int size_termios2;
int size_pid_t;
@@ -89,6 +89,8 @@ struct linux_record_tdep
int size_serial_struct;
int size_serial_icounter_struct;
int size_hayes_esp_config;
+ int size_size_t;
+ int size_iovec;
/* The values of the second argument of system call "sys_ioctl". */
int ioctl_TCGETS;
@@ -171,6 +173,7 @@ struct linux_record_tdep
int arg3;
int arg4;
int arg5;
+ int arg6;
};
extern int record_linux_system_call (int num, struct regcache *regcache,
[-- Attachment #2: prec_syscall_64bits.txt --]
[-- Type: text/plain, Size: 117779 bytes --]
---
i386-linux-tdep.c | 13
linux-record.c | 2558 ++++++++++++++++++++++++++++++------------------------
linux-record.h | 5
3 files changed, 1468 insertions(+), 1108 deletions(-)
--- a/i386-linux-tdep.c
+++ b/i386-linux-tdep.c
@@ -371,8 +371,15 @@ i386_linux_intx80_sysenter_record (struc
regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32);
+ if (tmpu32 > 499)
+ {
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support syscall number %u\n"), tmpu32);
+ return -1;
+ }
+
ret = record_linux_system_call (tmpu32, regcache,
- &i386_linux_record_tdep);
+ &i386_linux_record_tdep);
if (ret)
return ret;
@@ -481,6 +488,7 @@ i386_linux_init_abi (struct gdbarch_info
/* Initialize the i386_linux_record_tdep. */
/* These values are the size of the type that will be used in a system
call. They are obtained from Linux Kernel source. */
+ i386_linux_record_tdep.size_pointer = 4;
i386_linux_record_tdep.size__old_kernel_stat = 32;
i386_linux_record_tdep.size_tms = 16;
i386_linux_record_tdep.size_loff_t = 8;
@@ -546,6 +554,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_serial_struct = 60;
i386_linux_record_tdep.size_serial_icounter_struct = 80;
i386_linux_record_tdep.size_hayes_esp_config = 12;
+ i386_linux_record_tdep.size_size_t = 4;
+ i386_linux_record_tdep.size_iovec = 8;
/* These values are the second argument of system call "sys_ioctl".
They are obtained from Linux Kernel source. */
@@ -627,6 +637,7 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.arg3 = I386_EDX_REGNUM;
i386_linux_record_tdep.arg4 = I386_ESI_REGNUM;
i386_linux_record_tdep.arg5 = I386_EDI_REGNUM;
+ i386_linux_record_tdep.arg6 = I386_EBP_REGNUM;
tdep->i386_intx80_record = i386_linux_intx80_sysenter_record;
tdep->i386_sysenter_record = i386_linux_intx80_sysenter_record;
--- a/linux-record.c
+++ b/linux-record.c
@@ -19,6 +19,7 @@
#include "defs.h"
#include "target.h"
+#include "gdbtypes.h"
#include "regcache.h"
#include "record.h"
#include "linux-record.h"
@@ -80,6 +81,132 @@
#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);
+
+ 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;
+ }
+ if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+ (iov, tdep->size_pointer,
+ byte_order),
+ (int)extract_unsigned_integer
+ (iov + tdep->size_pointer,
+ tdep->size_size_t,
+ byte_order)))
+ 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;
+ if (record_arch_list_add_mem ((CORE_ADDR)addr,
+ (int)extract_unsigned_integer
+ (a, tdep->size_size_t, byte_order)))
+ 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
@@ -94,10 +221,11 @@
int
record_linux_system_call (int num, struct regcache *regcache,
- struct linux_record_tdep *tdep)
+ struct linux_record_tdep *tdep)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
- uint32_t tmpu32;
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+ ULONGEST tmpulongest;
switch (num)
{
@@ -108,15 +236,15 @@ record_linux_system_call (int num, struc
/* sys_exit */
case 1:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_ ("The next instruction is syscall exit. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
@@ -127,11 +255,11 @@ record_linux_system_call (int num, struc
/* sys_read */
case 3:
{
- uint32_t addr, count;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (addr, count))
- return -1;
+ 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;
@@ -171,9 +299,10 @@ record_linux_system_call (int num, struc
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;
+ 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;
/* sys_lseek */
@@ -194,16 +323,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_alarm */
@@ -240,9 +369,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_tms))
+ return -1;
break;
/* sys_ni_syscall */
@@ -270,149 +399,172 @@ record_linux_system_call (int num, struc
/* sys_ioctl */
case 54:
/* XXX Need to add a lot of support of other ioctl requests. */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (tmpu32 == tdep->ioctl_FIOCLEX || tmpu32 == tdep->ioctl_FIONCLEX
- || tmpu32 == tdep->ioctl_FIONBIO || tmpu32 == tdep->ioctl_FIOASYNC
- || tmpu32 == tdep->ioctl_TCSETS || tmpu32 == tdep->ioctl_TCSETSW
- || tmpu32 == tdep->ioctl_TCSETSF || tmpu32 == tdep->ioctl_TCSETA
- || tmpu32 == tdep->ioctl_TCSETAW || tmpu32 == tdep->ioctl_TCSETAF
- || tmpu32 == tdep->ioctl_TCSBRK || tmpu32 == tdep->ioctl_TCXONC
- || tmpu32 == tdep->ioctl_TCFLSH || tmpu32 == tdep->ioctl_TIOCEXCL
- || tmpu32 == tdep->ioctl_TIOCNXCL
- || tmpu32 == tdep->ioctl_TIOCSCTTY
- || tmpu32 == tdep->ioctl_TIOCSPGRP || tmpu32 == tdep->ioctl_TIOCSTI
- || tmpu32 == tdep->ioctl_TIOCSWINSZ
- || tmpu32 == tdep->ioctl_TIOCMBIS || tmpu32 == tdep->ioctl_TIOCMBIC
- || tmpu32 == tdep->ioctl_TIOCMSET
- || tmpu32 == tdep->ioctl_TIOCSSOFTCAR
- || tmpu32 == tdep->ioctl_TIOCCONS
- || tmpu32 == tdep->ioctl_TIOCSSERIAL
- || tmpu32 == tdep->ioctl_TIOCPKT || tmpu32 == tdep->ioctl_TIOCNOTTY
- || tmpu32 == tdep->ioctl_TIOCSETD || tmpu32 == tdep->ioctl_TCSBRKP
- || tmpu32 == tdep->ioctl_TIOCTTYGSTRUCT
- || tmpu32 == tdep->ioctl_TIOCSBRK || tmpu32 == tdep->ioctl_TIOCCBRK
- || tmpu32 == tdep->ioctl_TCSETS2 || tmpu32 == tdep->ioctl_TCSETSW2
- || tmpu32 == tdep->ioctl_TCSETSF2
- || tmpu32 == tdep->ioctl_TIOCSPTLCK
- || tmpu32 == tdep->ioctl_TIOCSERCONFIG
- || tmpu32 == tdep->ioctl_TIOCSERGWILD
- || tmpu32 == tdep->ioctl_TIOCSERSWILD
- || tmpu32 == tdep->ioctl_TIOCSLCKTRMIOS
- || tmpu32 == tdep->ioctl_TIOCSERGETMULTI
- || tmpu32 == tdep->ioctl_TIOCSERSETMULTI
- || tmpu32 == tdep->ioctl_TIOCMIWAIT
- || tmpu32 == tdep->ioctl_TIOCSHAYESESP)
- {
- /* Nothing to do. */
- }
- else if (tmpu32 == tdep->ioctl_TCGETS || tmpu32 == tdep->ioctl_TCGETA
- || tmpu32 == tdep->ioctl_TIOCGLCKTRMIOS)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGPGRP
- || tmpu32 == tdep->ioctl_TIOCGSID)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCOUTQ
- || tmpu32 == tdep->ioctl_TIOCMGET
- || tmpu32 == tdep->ioctl_TIOCGSOFTCAR
- || tmpu32 == tdep->ioctl_FIONREAD
- || tmpu32 == tdep->ioctl_TIOCINQ
- || tmpu32 == tdep->ioctl_TIOCGETD
- || tmpu32 == tdep->ioctl_TIOCGPTN
- || tmpu32 == tdep->ioctl_TIOCSERGETLSR)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_int))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGWINSZ)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_winsize))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCLINUX)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
+ 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 affect a char size memory. */
- if (record_arch_list_add_mem (tmpu32, 1))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGSERIAL)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TCGETS2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios2))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_FIOQSIZE)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGICOUNT)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem
- (tmpu32, tdep->size_serial_icounter_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGHAYESESP)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT)
- {
- printf_unfiltered (_("Process record and replay target doesn't "
- "support ioctl request TIOCSERGSTRUCT\n"));
- return 1;
- }
+ 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%s.\n"),
- phex_nz (tmpu32, 4));
- 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:
/* XXX */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
sys_fcntl:
- if (tmpu32 == tdep->fcntl_F_GETLK)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock))
- return -1;
- }
+ 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;
/* sys_ni_syscall */
@@ -425,9 +577,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_oldold_utsname))
+ return -1;
break;
/* sys_umask */
@@ -438,9 +591,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_ustat))
+ return -1;
break;
/* sys_dup2 */
@@ -455,9 +609,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sgetmask */
@@ -474,9 +629,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sethostname */
@@ -487,26 +643,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_getrusage */
case 77:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_rusage))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_rusage))
+ return -1;
break;
/* sys_gettimeofday */
case 78:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timeval))
- return -1;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timezone))
- return -1;
+ 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_settimeofday */
@@ -515,53 +675,56 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_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;
+ 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;
/* old_select */
case 82:
{
- struct sel_arg_struct
- {
- CORE_ADDR n;
- CORE_ADDR inp;
- CORE_ADDR outp;
- CORE_ADDR exp;
- CORE_ADDR tvp;
- } sel;
+ struct sel_arg_struct
+ {
+ CORE_ADDR n;
+ CORE_ADDR inp;
+ CORE_ADDR outp;
+ CORE_ADDR exp;
+ CORE_ADDR tvp;
+ } sel;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (sel));
- return -1;
- }
- if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval))
- return -1;
- }
+ 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;
@@ -572,12 +735,12 @@ record_linux_system_call (int num, struc
/* sys_readlink */
case 85:
{
- uint32_t len;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len);
- if (record_arch_list_add_mem (tmpu32, len))
- return -1;
+ 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;
@@ -590,23 +753,24 @@ record_linux_system_call (int num, struc
/* sys_reboot */
case 88:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall reboot. "
- "It will restart the computer. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ int q;
+ target_terminal_ours ();
+ q =
+ yquery (_("The next instruction is syscall reboot. "
+ "It will restart the computer. "
+ "Do you want to stop the program?"));
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
/* old_readdir */
case 89:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_dirent))
+ return -1;
break;
/* old_mmap */
@@ -616,22 +780,22 @@ record_linux_system_call (int num, struc
/* sys_munmap */
case 91:
{
- int q;
- uint32_t len;
+ int q;
+ ULONGEST len;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len);
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall munmap. "
- "It will free the memory addr = %s len = %u. "
- "It will make record target get error. "
- "Do you want to stop the program?"),
- paddress (gdbarch, tmpu32), (int)len);
- target_terminal_inferior ();
- if (q)
- return 1;
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
+ target_terminal_ours ();
+ q =
+ yquery (_("The next instruction is syscall munmap. "
+ "It will free the memory addr = 0x%s len = %u. "
+ "It will make record target get error. "
+ "Do you want to stop the program?"),
+ OUTPUT_REG (tmpulongest, tdep->arg1), (int)len);
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
@@ -655,292 +819,347 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_statfs))
+ return -1;
break;
/* sys_ioperm */
case 101:
break;
+ /* sys_socket */
+ case 500:
+ /* sys_sendto */
+ case 503:
+ /* sys_sendmsg */
+ case 505:
+ /* sys_shutdown */
+ case 507:
+ /* sys_bind */
+ case 508:
+ /* sys_connect */
+ case 501:
+ /* sys_listen */
+ case 509:
+ /* sys_setsockopt */
+ case 513:
+ break;
+
+ /* sys_accept */
+ case 502:
+ /* sys_getsockname */
+ case 510:
+ /* sys_getpeername */
+ case 511:
+ {
+ 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;
+
+ /* sys_recvfrom */
+ case 504:
+ {
+ 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;
+ }
+ /* sys_recv */
+ case 515:
+ {
+ 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;
+
+ /* sys_recvmsg */
+ case 506:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_linux_msghdr (regcache, tdep, tmpulongest))
+ return -1;
+ break;
+
+ /* sys_socketpair */
+ case 512:
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int))
+ return -1;
+ break;
+
+ /* sys_getsockopt */
+ case 514:
+ 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);
+ if (record_arch_list_add_mem ((CORE_ADDR)optvalp,
+ (int)extract_signed_integer
+ (optlenp, tdep->size_int,
+ byte_order)))
+ return -1;
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_int))
+ return -1;
+ }
+ break;
+
/* sys_socketcall */
case 102:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- switch (tmpu32)
- {
- case RECORD_SYS_SOCKET:
- case RECORD_SYS_BIND:
- case RECORD_SYS_CONNECT:
- case RECORD_SYS_LISTEN:
- break;
- case RECORD_SYS_ACCEPT:
- case RECORD_SYS_GETSOCKNAME:
- case RECORD_SYS_GETPEERNAME:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[2], tdep->size_int))
- return -1;
- }
- }
- break;
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
- case RECORD_SYS_SOCKETPAIR:
- {
- uint32_t a[4];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], tdep->size_int))
- return -1;
- }
- }
- break;
- case RECORD_SYS_SEND:
- case RECORD_SYS_SENDTO:
- break;
- case RECORD_SYS_RECV:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_RECVFROM:
- {
- uint32_t a[6];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[5], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SHUTDOWN:
- case RECORD_SYS_SETSOCKOPT:
- break;
- case RECORD_SYS_GETSOCKOPT:
- {
- uint32_t a[5];
- uint32_t av;
+ 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;
+ }
+ if (record_linux_sockaddr (regcache, tdep,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ extract_unsigned_integer
+ (a + tdep->size_ulong,
+ tdep->size_ulong, byte_order)))
+ return -1;
+ }
+ }
+ break;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[4])
- {
- if (target_read_memory
- (a[4], (gdb_byte *) & av, sizeof (av)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[4]),
- (unsigned long)sizeof (av));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], av))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SENDMSG:
- break;
- case RECORD_SYS_RECVMSG:
- {
- uint32_t a[2], i;
- struct record_msghdr
- {
- uint32_t msg_name;
- uint32_t msg_namelen;
- uint32_t msg_iov;
- uint32_t msg_iovlen;
- uint32_t msg_control;
- uint32_t msg_controllen;
- uint32_t msg_flags;
- } rec;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
+ 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;
+ }
+ if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+ (a,
+ tdep->size_ulong,
+ byte_order),
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_msghdr))
- return -1;
- if (a[1])
- {
- if (target_read_memory
- (a[1], (gdb_byte *) & rec, sizeof (rec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[1]),
- (unsigned long)sizeof (rec));
- return -1;
- }
- if (record_arch_list_add_mem
- (rec.msg_name, rec.msg_namelen))
- return -1;
- if (record_arch_list_add_mem
- (rec.msg_control, rec.msg_controllen))
- return -1;
- if (rec.msg_iov)
- {
- for (i = 0; i < rec.msg_iovlen; i++)
- {
- if (target_read_memory
- (rec.msg_iov, (gdb_byte *) & iov,
- sizeof (iov)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error "
- "reading memory at "
- "addr = %s "
- "len = %lu.\n",
- paddress (gdbarch,
- rec.msg_iov),
- (unsigned long)sizeof (iov));
- return -1;
- }
- if (record_arch_list_add_mem
- (iov.iov_base, iov.iov_len))
- return -1;
- rec.msg_iov += sizeof (struct record_iovec);
- }
- }
- }
- }
- }
- break;
- default:
- printf_unfiltered (_("Process record and replay target "
- "doesn't support socketcall call 0x%s\n"),
- phex_nz (tmpu32, 4));
- return -1;
- break;
- }
+ 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;
+ }
+ if (record_linux_sockaddr (regcache, tdep,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ extract_unsigned_integer
+ (a + tdep->size_ulong,
+ tdep->size_ulong, byte_order)))
+ 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;
+ if (record_arch_list_add_mem
+ ((CORE_ADDR)tmpulongest,
+ (int)extract_unsigned_integer(a, tdep->size_ulong,
+ byte_order)))
+ 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;
+ }
+ if (record_arch_list_add_mem
+ ((CORE_ADDR)extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ (int)extract_unsigned_integer (av, tdep->size_int,
+ byte_order)))
+ return -1;
+ a += tdep->size_ulong;
+ if (record_arch_list_add_mem
+ ((CORE_ADDR)extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ 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,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order)))
+ 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;
/* sys_syslog */
@@ -949,16 +1168,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_itimerval))
+ return -1;
break;
/* sys_newstat */
@@ -967,16 +1188,19 @@ record_linux_system_call (int num, struc
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;
+ /* sys_newfstatat */
+ case 540:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_old_utsname))
+ return -1;
break;
/* sys_iopl */
@@ -991,12 +1215,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_swapoff */
@@ -1005,47 +1231,121 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_sysinfo))
+ return -1;
+ break;
+
+ /* sys_shmget */
+ case 520:
+ /* sys_semget */
+ case 523:
+ /* sys_semop */
+ case 524:
+ /* sys_msgget */
+ case 528:
+ /* sys_shmdt */
+ /* XXX maybe need do some record works wiht sys_shmdt. */
+ case 527:
+ /* sys_msgsnd */
+ case 529:
+ /* sys_semtimedop */
+ case 532:
+ break;
+
+ /* sys_shmat */
+ case 521:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_ulong))
+ return -1;
+ break;
+
+ /* sys_shmctl */
+ case 522:
+ 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_semctl */
+ /* XXX sys_semctl 525 still not support. */
+
+ /* sys_msgrcv */
+ case 530:
+ {
+ ULONGEST msgp;
+ regcache_raw_read_signed (regcache, tdep->arg3, &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &msgp);
+ if (record_arch_list_add_mem ((CORE_ADDR)msgp,
+ (int)tmpulongest + tdep->size_long))
+ return -1;
+ }
+ break;
+
+ /* sys_msgctl */
+ case 531:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_msqid_ds))
+ 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;
- }
+ 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 wiht 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);
+ if (record_arch_list_add_mem ((CORE_ADDR)ptr,
+ (int)second + tdep->size_long))
+ 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 support. */
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support ipc number %d\n"), (int)tmpulongest);
+ break;
+ }
break;
/* sys_fsync */
@@ -1060,30 +1360,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_timex))
+ return -1;
break;
/* sys_mprotect */
@@ -1092,9 +1392,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -1109,35 +1410,39 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_getpgid */
@@ -1150,15 +1455,15 @@ record_linux_system_call (int num, struc
/* sys_sysfs */
case 135:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (tmpu32 == 2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- /*XXX the size of memory is not very clear. */
- if (record_arch_list_add_mem (tmpu32, 10))
- return -1;
- }
+ 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 ((CORE_ADDR)tmpulongest, 10))
+ return -1;
+ }
break;
/* sys_personality */
@@ -1173,37 +1478,43 @@ record_linux_system_call (int num, struc
/* 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;
+ 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:
{
- 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;
+ 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 */
@@ -1215,36 +1526,37 @@ record_linux_system_call (int num, struc
/* sys_readv */
case 145:
{
- uint32_t vec;
- uint32_t vlen;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec);
- if (vec)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & vlen);
- for (tmpu32 = 0; tmpu32 < vlen; tmpu32++)
- {
- if (target_read_memory
- (vec, (gdb_byte *) & iov, sizeof (struct record_iovec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, vec),
- (unsigned long)sizeof (struct record_iovec));
- return -1;
- }
- if (record_arch_list_add_mem (iov.iov_base, iov.iov_len))
- return -1;
- vec += sizeof (struct record_iovec);
- }
- }
+ 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;
+ }
+ if (record_arch_list_add_mem
+ ((CORE_ADDR)extract_unsigned_integer
+ (iov, tdep->size_pointer, byte_order),
+ (int)extract_unsigned_integer
+ (iov + tdep->size_pointer, tdep->size_size_t,
+ byte_order)))
+ return -1;
+ vec += tdep->size_iovec;
+ }
+ }
}
break;
@@ -1270,9 +1582,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int))
+ return -1;
break;
/* sys_sched_setscheduler */
@@ -1291,9 +1603,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_timespec))
+ return -1;
break;
/* sys_mremap */
@@ -1304,15 +1617,17 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_vm86 */
@@ -1323,32 +1638,32 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
- }
+ 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;
/* sys_setresgid16 */
@@ -1357,35 +1672,37 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
- }
+ 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;
/* sys_rt_sigreturn */
@@ -1394,36 +1711,39 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_siginfo_t))
+ return -1;
break;
/* sys_rt_sigqueueinfo */
@@ -1434,15 +1754,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_pwrite64 */
@@ -1453,22 +1772,22 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* sys_capset */
@@ -1477,16 +1796,17 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_off_t))
+ return -1;
break;
/* sys_ni_syscall */
@@ -1499,9 +1819,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_mmap2 */
@@ -1520,9 +1841,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_lchown */
@@ -1543,16 +1865,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST gidsetsize;
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &gidsetsize);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_gid_t * (int)gidsetsize))
+ return -1;
+ }
break;
/* sys_setgroups */
@@ -1565,15 +1887,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_setresgid */
@@ -1582,15 +1904,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_chown */
@@ -1609,9 +1931,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_PAGE_SIZE))
+ return -1;
break;
/* sys_madvise */
@@ -1621,30 +1944,32 @@ record_linux_system_call (int num, struc
/* sys_getdents64 */
case 220:
{
- uint32_t count;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count))
- return -1;
+ 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);
- if (tmpu32 == tdep->fcntl_F_GETLK64)
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest == tdep->fcntl_F_GETLK64)
{
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock64))
- return -1;
- }
- else if (tmpu32 != tdep->fcntl_F_SETLK64
- && tmpu32 != tdep->fcntl_F_SETLKW64)
+ 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;
- }
+ goto sys_fcntl;
+ }
break;
/* sys_ni_syscall */
@@ -1669,15 +1994,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_listxattr */
@@ -1686,15 +2010,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_removexattr */
@@ -1709,9 +2032,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_loff_t))
+ return -1;
break;
/* sys_futex */
@@ -1722,35 +2046,36 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_long))
+ return -1;
break;
/* sys_io_destroy */
@@ -1759,49 +2084,57 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_io_submit */
case 248:
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- int32_t i, nr;
- uint32_t *iocbp;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr);
- iocbp = (uint32_t *) alloca (nr * tdep->size_int);
- if (target_read_memory
- (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %u.\n",
- paddress (gdbarch, tmpu32),
- (int)(nr * tdep->size_int));
- return -1;
- }
- for (i = 0; i < nr; i++)
- {
- if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb))
- return -1;
- }
- }
+ 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++)
+ {
+ if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer
+ (iocbp,
+ tdep->size_pointer,
+ byte_order),
+ tdep->size_iocb))
+ return -1;
+ iocbp += tdep->size_pointer;
+ }
+ }
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_io_event))
+ return -1;
break;
/* sys_fadvise64 */
@@ -1813,28 +2146,28 @@ record_linux_system_call (int num, struc
/* sys_exit_group */
case 252:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall exit_group. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
- }
+ 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;
/* sys_epoll_create */
@@ -1845,16 +2178,15 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_remap_file_pages */
@@ -1865,23 +2197,25 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_itimerspec))
+ return -1;
break;
/* sys_timer_getoverrun */
@@ -1894,32 +2228,36 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_statfs64))
+ return -1;
break;
/* sys_tgkill */
@@ -1936,18 +2274,18 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_set_mempolicy */
@@ -1962,18 +2300,17 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_mq_notify */
@@ -1982,9 +2319,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_mq_attr))
+ return -1;
break;
/* sys_kexec_load */
@@ -1993,12 +2331,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -2011,20 +2351,20 @@ record_linux_system_call (int num, struc
/* 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;
- }
- }
+ 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;
/* sys_ioprio_set */
@@ -2053,9 +2393,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_unlinkat */
@@ -2070,15 +2411,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_fchmodat */
@@ -2089,34 +2429,39 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_unshare */
@@ -2127,22 +2472,24 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_sync_file_range */
@@ -2155,48 +2502,47 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* 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;
- }
+ 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,
+ (int)maxevents * tdep->size_epoll_event))
+ return -1;
+ }
break;
default:
printf_unfiltered (_("Process record and replay target doesn't "
- "support syscall number %u\n"),
- (int)tmpu32);
+ "support syscall number %u\n"), num);
return -1;
break;
}
--- a/linux-record.h
+++ b/linux-record.h
@@ -23,6 +23,7 @@
struct linux_record_tdep
{
/* The size of the type that will be used in a system call. */
+ int size_pointer;
int size__old_kernel_stat;
int size_tms;
int size_loff_t;
@@ -81,7 +82,6 @@ struct linux_record_tdep
int size_itimerspec;
int size_mq_attr;
int size_siginfo;
-
int size_termios;
int size_termios2;
int size_pid_t;
@@ -89,6 +89,8 @@ struct linux_record_tdep
int size_serial_struct;
int size_serial_icounter_struct;
int size_hayes_esp_config;
+ int size_size_t;
+ int size_iovec;
/* The values of the second argument of system call "sys_ioctl". */
int ioctl_TCGETS;
@@ -171,6 +173,7 @@ struct linux_record_tdep
int arg3;
int arg4;
int arg5;
+ int arg6;
};
extern int record_linux_system_call (int num, struct regcache *regcache,
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3
2009-07-07 2:40 [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3 Hui Zhu
@ 2009-07-13 2:26 ` Michael Snyder
2009-07-17 12:03 ` Hui Zhu
0 siblings, 1 reply; 8+ messages in thread
From: Michael Snyder @ 2009-07-13 2:26 UTC (permalink / raw)
To: Hui Zhu; +Cc: gdb-patches ml
Hui Zhu wrote:
> The old linux-record.c just support 32 bits system call and some other
> problem. This patch fix them all.
>
> 2009-07-07 Hui Zhu <teawater@gmail.com>
>
> Add process record Linux system call 64 bits support.
>
> * linux-record.h (linux_record_tdep): Add size_pointer,
> size_size_t, size_iovec and arg6.
> * i386-linux-tdep.c (i386_linux_init_abi): Ditto.
> (i386_linux_intx80_sysenter_record): Add a check for system
> call number.
> * linux-record.c (record_linux_system_call): Make this
> function support 64 bits.
Again, preliminary, mostly whitespace formatting comments.
> @@ -371,8 +371,15 @@ i386_linux_intx80_sysenter_record (struc
>
> regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32);
>
> + if (tmpu32 > 499)
> + {
> + printf_unfiltered (_("Process record and replay target doesn't "
> + "support syscall number %u\n"), tmpu32);
> + return -1;
> + }
> +
> ret = record_linux_system_call (tmpu32, regcache,
> - &i386_linux_record_tdep);
> + &i386_linux_record_tdep);
This line is just a change between spaces and tabs.
We like to have whitespace-only changes submitted separately.
Just add -w and/or -b to your diff flags, and these will disappear.
> @@ -481,6 +488,7 @@ i386_linux_init_abi (struct gdbarch_info
> /* Initialize the i386_linux_record_tdep. */
> /* These values are the size of the type that will be used in a system
> call. They are obtained from Linux Kernel source. */
> + i386_linux_record_tdep.size_pointer = 4;
Can't you use gdbarch_ptr_bit(gdbarch) for this?
Just trying to avoid duplication.
> +
> + 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))
Space after cast. There are a whole lot like this in this file.
> + {
> + 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);
Space after function name. And after cast.
Search for "extract_unsigned_integer", there are several like this.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3
2009-07-13 2:26 ` Michael Snyder
@ 2009-07-17 12:03 ` Hui Zhu
2009-07-18 3:04 ` Michael Snyder
0 siblings, 1 reply; 8+ messages in thread
From: Hui Zhu @ 2009-07-17 12:03 UTC (permalink / raw)
To: Michael Snyder; +Cc: gdb-patches ml
[-- Attachment #1: Type: text/plain, Size: 126078 bytes --]
On Mon, Jul 13, 2009 at 08:42, Michael Snyder<msnyder@vmware.com> wrote:
> Hui Zhu wrote:
>>
>> The old linux-record.c just support 32 bits system call and some other
>> problem. This patch fix them all.
>>
>> 2009-07-07 Hui Zhu <teawater@gmail.com>
>>
>> Add process record Linux system call 64 bits support.
>>
>> * linux-record.h (linux_record_tdep): Add size_pointer,
>> size_size_t, size_iovec and arg6.
>> * i386-linux-tdep.c (i386_linux_init_abi): Ditto.
>> (i386_linux_intx80_sysenter_record): Add a check for system
>> call number.
>> * linux-record.c (record_linux_system_call): Make this
>> function support 64 bits.
>
> Again, preliminary, mostly whitespace formatting comments.
>
>> @@ -371,8 +371,15 @@ i386_linux_intx80_sysenter_record (struc
>>
>> regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32);
>>
>> + if (tmpu32 > 499)
>> + {
>> + printf_unfiltered (_("Process record and replay target doesn't "
>> + "support syscall number %u\n"), tmpu32);
>> + return -1;
>> + }
>> +
>> ret = record_linux_system_call (tmpu32, regcache,
>> - &i386_linux_record_tdep);
>> + &i386_linux_record_tdep);
>
> This line is just a change between spaces and tabs.
> We like to have whitespace-only changes submitted separately.
>
> Just add -w and/or -b to your diff flags, and these will disappear.
>
>> @@ -481,6 +488,7 @@ i386_linux_init_abi (struct gdbarch_info
>> /* Initialize the i386_linux_record_tdep. */
>> /* These values are the size of the type that will be used in a system
>> call. They are obtained from Linux Kernel source. */
>> + i386_linux_record_tdep.size_pointer = 4;
>
> Can't you use gdbarch_ptr_bit(gdbarch) for this?
> Just trying to avoid duplication.
>
>> +
>> + 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))
>
> Space after cast. There are a whole lot like this in this file.
>
>> + {
>> + 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);
>
> Space after function name. And after cast.
> Search for "extract_unsigned_integer", there are several like this.
>
2009-07-17 Hui Zhu <teawater@gmail.com>
Add process record Linux system call 64 bits support.
* linux-record.h (linux_record_tdep): Add size_pointer,
size_size_t, size_iovec and arg6. Change the values of
size_int, size_long and size_ulong to
gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT,
gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT.
* i386-linux-tdep.c (i386_linux_init_abi): Ditto.
(i386_linux_intx80_sysenter_record): Add a check for system
call number.
* linux-record.c (record_linux_system_call): Make this
function support 64 bits.
---
i386-linux-tdep.c | 26
linux-record.c | 2563 ++++++++++++++++++++++++++++++------------------------
linux-record.h | 5
3 files changed, 1482 insertions(+), 1112 deletions(-)
--- a/i386-linux-tdep.c
+++ b/i386-linux-tdep.c
@@ -369,7 +369,14 @@ i386_linux_intx80_sysenter_record (struc
int ret;
uint32_t tmpu32;
- regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32);
+ regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *) &tmpu32);
+
+ if (tmpu32 > 499)
+ {
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support syscall number %u\n"), tmpu32);
+ return -1;
+ }
ret = record_linux_system_call (tmpu32, regcache,
&i386_linux_record_tdep);
@@ -481,6 +488,8 @@ i386_linux_init_abi (struct gdbarch_info
/* Initialize the i386_linux_record_tdep. */
/* These values are the size of the type that will be used in a system
call. They are obtained from Linux Kernel source. */
+ i386_linux_record_tdep.size_pointer
+ = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
i386_linux_record_tdep.size__old_kernel_stat = 32;
i386_linux_record_tdep.size_tms = 16;
i386_linux_record_tdep.size_loff_t = 8;
@@ -501,9 +510,12 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_statfs = 64;
i386_linux_record_tdep.size_statfs64 = 84;
i386_linux_record_tdep.size_sockaddr = 16;
- i386_linux_record_tdep.size_int = 4;
- i386_linux_record_tdep.size_long = 4;
- i386_linux_record_tdep.size_ulong = 4;
+ i386_linux_record_tdep.size_int
+ = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
+ i386_linux_record_tdep.size_long
+ = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
+ i386_linux_record_tdep.size_ulong
+ = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
i386_linux_record_tdep.size_msghdr = 28;
i386_linux_record_tdep.size_itimerval = 16;
i386_linux_record_tdep.size_stat = 88;
@@ -536,7 +548,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_io_event = 32;
i386_linux_record_tdep.size_iocb = 64;
i386_linux_record_tdep.size_epoll_event = 12;
- i386_linux_record_tdep.size_itimerspec =
i386_linux_record_tdep.size_timespec * 2;
+ i386_linux_record_tdep.size_itimerspec
+ = i386_linux_record_tdep.size_timespec * 2;
i386_linux_record_tdep.size_mq_attr = 32;
i386_linux_record_tdep.size_siginfo = 128;
i386_linux_record_tdep.size_termios = 36;
@@ -546,6 +559,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_serial_struct = 60;
i386_linux_record_tdep.size_serial_icounter_struct = 80;
i386_linux_record_tdep.size_hayes_esp_config = 12;
+ i386_linux_record_tdep.size_size_t = 4;
+ i386_linux_record_tdep.size_iovec = 8;
/* These values are the second argument of system call "sys_ioctl".
They are obtained from Linux Kernel source. */
@@ -627,6 +642,7 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.arg3 = I386_EDX_REGNUM;
i386_linux_record_tdep.arg4 = I386_ESI_REGNUM;
i386_linux_record_tdep.arg5 = I386_EDI_REGNUM;
+ i386_linux_record_tdep.arg6 = I386_EBP_REGNUM;
tdep->i386_intx80_record = i386_linux_intx80_sysenter_record;
tdep->i386_sysenter_record = i386_linux_intx80_sysenter_record;
--- a/linux-record.c
+++ b/linux-record.c
@@ -19,6 +19,7 @@
#include "defs.h"
#include "target.h"
+#include "gdbtypes.h"
#include "regcache.h"
#include "record.h"
#include "linux-record.h"
@@ -80,6 +81,133 @@
#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);
+
+ 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;
+ }
+ if (record_arch_list_add_mem ((CORE_ADDR) extract_unsigned_integer
+ (iov, tdep->size_pointer,
+ byte_order),
+ (int) extract_unsigned_integer
+ (iov + tdep->size_pointer,
+ tdep->size_size_t,
+ byte_order)))
+ 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;
+ if (record_arch_list_add_mem ((CORE_ADDR) addr,
+ (int) extract_unsigned_integer
+ (a, tdep->size_size_t, byte_order)))
+ 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
@@ -94,10 +222,11 @@
int
record_linux_system_call (int num, struct regcache *regcache,
- struct linux_record_tdep *tdep)
+ struct linux_record_tdep *tdep)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
- uint32_t tmpu32;
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+ ULONGEST tmpulongest;
switch (num)
{
@@ -108,15 +237,15 @@ record_linux_system_call (int num, struc
/* sys_exit */
case 1:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_ ("The next instruction is syscall exit. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
@@ -127,11 +256,11 @@ record_linux_system_call (int num, struc
/* sys_read */
case 3:
{
- uint32_t addr, count;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (addr, count))
- return -1;
+ 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;
@@ -171,9 +300,10 @@ record_linux_system_call (int num, struc
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;
+ 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;
/* sys_lseek */
@@ -194,16 +324,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_alarm */
@@ -240,9 +370,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_tms))
+ return -1;
break;
/* sys_ni_syscall */
@@ -270,149 +400,172 @@ record_linux_system_call (int num, struc
/* sys_ioctl */
case 54:
/* XXX Need to add a lot of support of other ioctl requests. */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (tmpu32 == tdep->ioctl_FIOCLEX || tmpu32 == tdep->ioctl_FIONCLEX
- || tmpu32 == tdep->ioctl_FIONBIO || tmpu32 == tdep->ioctl_FIOASYNC
- || tmpu32 == tdep->ioctl_TCSETS || tmpu32 == tdep->ioctl_TCSETSW
- || tmpu32 == tdep->ioctl_TCSETSF || tmpu32 == tdep->ioctl_TCSETA
- || tmpu32 == tdep->ioctl_TCSETAW || tmpu32 == tdep->ioctl_TCSETAF
- || tmpu32 == tdep->ioctl_TCSBRK || tmpu32 == tdep->ioctl_TCXONC
- || tmpu32 == tdep->ioctl_TCFLSH || tmpu32 == tdep->ioctl_TIOCEXCL
- || tmpu32 == tdep->ioctl_TIOCNXCL
- || tmpu32 == tdep->ioctl_TIOCSCTTY
- || tmpu32 == tdep->ioctl_TIOCSPGRP || tmpu32 == tdep->ioctl_TIOCSTI
- || tmpu32 == tdep->ioctl_TIOCSWINSZ
- || tmpu32 == tdep->ioctl_TIOCMBIS || tmpu32 == tdep->ioctl_TIOCMBIC
- || tmpu32 == tdep->ioctl_TIOCMSET
- || tmpu32 == tdep->ioctl_TIOCSSOFTCAR
- || tmpu32 == tdep->ioctl_TIOCCONS
- || tmpu32 == tdep->ioctl_TIOCSSERIAL
- || tmpu32 == tdep->ioctl_TIOCPKT || tmpu32 == tdep->ioctl_TIOCNOTTY
- || tmpu32 == tdep->ioctl_TIOCSETD || tmpu32 == tdep->ioctl_TCSBRKP
- || tmpu32 == tdep->ioctl_TIOCTTYGSTRUCT
- || tmpu32 == tdep->ioctl_TIOCSBRK || tmpu32 == tdep->ioctl_TIOCCBRK
- || tmpu32 == tdep->ioctl_TCSETS2 || tmpu32 == tdep->ioctl_TCSETSW2
- || tmpu32 == tdep->ioctl_TCSETSF2
- || tmpu32 == tdep->ioctl_TIOCSPTLCK
- || tmpu32 == tdep->ioctl_TIOCSERCONFIG
- || tmpu32 == tdep->ioctl_TIOCSERGWILD
- || tmpu32 == tdep->ioctl_TIOCSERSWILD
- || tmpu32 == tdep->ioctl_TIOCSLCKTRMIOS
- || tmpu32 == tdep->ioctl_TIOCSERGETMULTI
- || tmpu32 == tdep->ioctl_TIOCSERSETMULTI
- || tmpu32 == tdep->ioctl_TIOCMIWAIT
- || tmpu32 == tdep->ioctl_TIOCSHAYESESP)
- {
- /* Nothing to do. */
- }
- else if (tmpu32 == tdep->ioctl_TCGETS || tmpu32 == tdep->ioctl_TCGETA
- || tmpu32 == tdep->ioctl_TIOCGLCKTRMIOS)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGPGRP
- || tmpu32 == tdep->ioctl_TIOCGSID)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCOUTQ
- || tmpu32 == tdep->ioctl_TIOCMGET
- || tmpu32 == tdep->ioctl_TIOCGSOFTCAR
- || tmpu32 == tdep->ioctl_FIONREAD
- || tmpu32 == tdep->ioctl_TIOCINQ
- || tmpu32 == tdep->ioctl_TIOCGETD
- || tmpu32 == tdep->ioctl_TIOCGPTN
- || tmpu32 == tdep->ioctl_TIOCSERGETLSR)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_int))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGWINSZ)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_winsize))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCLINUX)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
+ 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 affect a char size memory. */
- if (record_arch_list_add_mem (tmpu32, 1))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGSERIAL)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TCGETS2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios2))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_FIOQSIZE)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGICOUNT)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem
- (tmpu32, tdep->size_serial_icounter_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGHAYESESP)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT)
- {
- printf_unfiltered (_("Process record and replay target doesn't "
- "support ioctl request TIOCSERGSTRUCT\n"));
- return 1;
- }
+ 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%s.\n"),
- phex_nz (tmpu32, 4));
- 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:
/* XXX */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
sys_fcntl:
- if (tmpu32 == tdep->fcntl_F_GETLK)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock))
- return -1;
- }
+ 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;
/* sys_ni_syscall */
@@ -425,9 +578,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_oldold_utsname))
+ return -1;
break;
/* sys_umask */
@@ -438,9 +592,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ustat))
+ return -1;
break;
/* sys_dup2 */
@@ -455,9 +610,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sgetmask */
@@ -474,9 +630,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sethostname */
@@ -487,26 +644,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_getrusage */
case 77:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_rusage))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rusage))
+ return -1;
break;
/* sys_gettimeofday */
case 78:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timeval))
- return -1;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timezone))
- return -1;
+ 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_settimeofday */
@@ -515,53 +676,56 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_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;
+ 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;
/* old_select */
case 82:
{
- struct sel_arg_struct
- {
- CORE_ADDR n;
- CORE_ADDR inp;
- CORE_ADDR outp;
- CORE_ADDR exp;
- CORE_ADDR tvp;
- } sel;
+ struct sel_arg_struct
+ {
+ CORE_ADDR n;
+ CORE_ADDR inp;
+ CORE_ADDR outp;
+ CORE_ADDR exp;
+ CORE_ADDR tvp;
+ } sel;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (sel));
- return -1;
- }
- if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval))
- return -1;
- }
+ 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;
@@ -572,12 +736,12 @@ record_linux_system_call (int num, struc
/* sys_readlink */
case 85:
{
- uint32_t len;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len);
- if (record_arch_list_add_mem (tmpu32, len))
- return -1;
+ 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;
@@ -590,23 +754,24 @@ record_linux_system_call (int num, struc
/* sys_reboot */
case 88:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall reboot. "
- "It will restart the computer. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ int q;
+ target_terminal_ours ();
+ q =
+ yquery (_("The next instruction is syscall reboot. "
+ "It will restart the computer. "
+ "Do you want to stop the program?"));
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
/* old_readdir */
case 89:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_dirent))
+ return -1;
break;
/* old_mmap */
@@ -616,22 +781,21 @@ record_linux_system_call (int num, struc
/* sys_munmap */
case 91:
{
- int q;
- uint32_t len;
+ int q;
+ ULONGEST len;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len);
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall munmap. "
- "It will free the memory addr = %s len = %u. "
- "It will make record target get error. "
- "Do you want to stop the program?"),
- paddress (gdbarch, tmpu32), (int)len);
- target_terminal_inferior ();
- if (q)
- return 1;
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
+ target_terminal_ours ();
+ q = yquery (_("The next instruction is syscall munmap. "
+ "It will free the memory addr = 0x%s len = %u. "
+ "It will make record target get error. "
+ "Do you want to stop the program?"),
+ OUTPUT_REG (tmpulongest, tdep->arg1), (int) len);
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
@@ -655,292 +819,347 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs))
+ return -1;
break;
/* sys_ioperm */
case 101:
break;
+ /* sys_socket */
+ case 500:
+ /* sys_sendto */
+ case 503:
+ /* sys_sendmsg */
+ case 505:
+ /* sys_shutdown */
+ case 507:
+ /* sys_bind */
+ case 508:
+ /* sys_connect */
+ case 501:
+ /* sys_listen */
+ case 509:
+ /* sys_setsockopt */
+ case 513:
+ break;
+
+ /* sys_accept */
+ case 502:
+ /* sys_getsockname */
+ case 510:
+ /* sys_getpeername */
+ case 511:
+ {
+ 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;
+
+ /* sys_recvfrom */
+ case 504:
+ {
+ 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;
+ }
+ /* sys_recv */
+ case 515:
+ {
+ 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;
+
+ /* sys_recvmsg */
+ case 506:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_linux_msghdr (regcache, tdep, tmpulongest))
+ return -1;
+ break;
+
+ /* sys_socketpair */
+ case 512:
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ break;
+
+ /* sys_getsockopt */
+ case 514:
+ 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);
+ if (record_arch_list_add_mem ((CORE_ADDR) optvalp,
+ (int) extract_signed_integer
+ (optlenp, tdep->size_int,
+ byte_order)))
+ return -1;
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_int))
+ return -1;
+ }
+ break;
+
/* sys_socketcall */
case 102:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- switch (tmpu32)
- {
- case RECORD_SYS_SOCKET:
- case RECORD_SYS_BIND:
- case RECORD_SYS_CONNECT:
- case RECORD_SYS_LISTEN:
- break;
- case RECORD_SYS_ACCEPT:
- case RECORD_SYS_GETSOCKNAME:
- case RECORD_SYS_GETPEERNAME:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[2], tdep->size_int))
- return -1;
- }
- }
- break;
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
- case RECORD_SYS_SOCKETPAIR:
- {
- uint32_t a[4];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], tdep->size_int))
- return -1;
- }
- }
- break;
- case RECORD_SYS_SEND:
- case RECORD_SYS_SENDTO:
- break;
- case RECORD_SYS_RECV:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_RECVFROM:
- {
- uint32_t a[6];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[5], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SHUTDOWN:
- case RECORD_SYS_SETSOCKOPT:
- break;
- case RECORD_SYS_GETSOCKOPT:
- {
- uint32_t a[5];
- uint32_t av;
+ 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;
+ }
+ if (record_linux_sockaddr (regcache, tdep,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ extract_unsigned_integer
+ (a + tdep->size_ulong,
+ tdep->size_ulong, byte_order)))
+ return -1;
+ }
+ }
+ break;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[4])
- {
- if (target_read_memory
- (a[4], (gdb_byte *) & av, sizeof (av)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[4]),
- (unsigned long)sizeof (av));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], av))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SENDMSG:
- break;
- case RECORD_SYS_RECVMSG:
- {
- uint32_t a[2], i;
- struct record_msghdr
- {
- uint32_t msg_name;
- uint32_t msg_namelen;
- uint32_t msg_iov;
- uint32_t msg_iovlen;
- uint32_t msg_control;
- uint32_t msg_controllen;
- uint32_t msg_flags;
- } rec;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
+ 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;
+ }
+ if (record_arch_list_add_mem ((CORE_ADDR)
extract_unsigned_integer
+ (a,
+ tdep->size_ulong,
+ byte_order),
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_msghdr))
- return -1;
- if (a[1])
- {
- if (target_read_memory
- (a[1], (gdb_byte *) & rec, sizeof (rec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[1]),
- (unsigned long)sizeof (rec));
- return -1;
- }
- if (record_arch_list_add_mem
- (rec.msg_name, rec.msg_namelen))
- return -1;
- if (record_arch_list_add_mem
- (rec.msg_control, rec.msg_controllen))
- return -1;
- if (rec.msg_iov)
- {
- for (i = 0; i < rec.msg_iovlen; i++)
- {
- if (target_read_memory
- (rec.msg_iov, (gdb_byte *) & iov,
- sizeof (iov)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error "
- "reading memory at "
- "addr = %s "
- "len = %lu.\n",
- paddress (gdbarch,
- rec.msg_iov),
- (unsigned long)sizeof (iov));
- return -1;
- }
- if (record_arch_list_add_mem
- (iov.iov_base, iov.iov_len))
- return -1;
- rec.msg_iov += sizeof (struct record_iovec);
- }
- }
- }
- }
- }
- break;
- default:
- printf_unfiltered (_("Process record and replay target "
- "doesn't support socketcall call 0x%s\n"),
- phex_nz (tmpu32, 4));
- return -1;
- break;
- }
+ 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;
+ }
+ if (record_linux_sockaddr (regcache, tdep,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ extract_unsigned_integer
+ (a + tdep->size_ulong,
+ tdep->size_ulong, byte_order)))
+ 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;
+ if (record_arch_list_add_mem
+ ((CORE_ADDR) tmpulongest,
+ (int) extract_unsigned_integer (a, tdep->size_ulong,
+ byte_order)))
+ 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;
+ }
+ if (record_arch_list_add_mem
+ ((CORE_ADDR) extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ (int) extract_unsigned_integer (av, tdep->size_int,
+ byte_order)))
+ return -1;
+ a += tdep->size_ulong;
+ if (record_arch_list_add_mem
+ ((CORE_ADDR) extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ 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,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order)))
+ 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;
/* sys_syslog */
@@ -949,16 +1168,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerval))
+ return -1;
break;
/* sys_newstat */
@@ -967,16 +1188,19 @@ record_linux_system_call (int num, struc
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;
+ /* sys_newfstatat */
+ case 540:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_utsname))
+ return -1;
break;
/* sys_iopl */
@@ -991,12 +1215,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_swapoff */
@@ -1005,47 +1231,121 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_sysinfo))
+ return -1;
+ break;
+
+ /* sys_shmget */
+ case 520:
+ /* sys_semget */
+ case 523:
+ /* sys_semop */
+ case 524:
+ /* sys_msgget */
+ case 528:
+ /* sys_shmdt */
+ /* XXX maybe need do some record works wiht sys_shmdt. */
+ case 527:
+ /* sys_msgsnd */
+ case 529:
+ /* sys_semtimedop */
+ case 532:
+ break;
+
+ /* sys_shmat */
+ case 521:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ulong))
+ return -1;
+ break;
+
+ /* sys_shmctl */
+ case 522:
+ 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_semctl */
+ /* XXX sys_semctl 525 still not support. */
+
+ /* sys_msgrcv */
+ case 530:
+ {
+ ULONGEST msgp;
+ regcache_raw_read_signed (regcache, tdep->arg3, &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &msgp);
+ if (record_arch_list_add_mem ((CORE_ADDR) msgp,
+ (int) tmpulongest + tdep->size_long))
+ return -1;
+ }
+ break;
+
+ /* sys_msgctl */
+ case 531:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_msqid_ds))
+ 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;
- }
+ 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 wiht 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);
+ if (record_arch_list_add_mem ((CORE_ADDR) ptr,
+ (int) second + tdep->size_long))
+ 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 support. */
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support ipc number %d\n"), (int) tmpulongest);
+ break;
+ }
break;
/* sys_fsync */
@@ -1060,30 +1360,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_timex))
+ return -1;
break;
/* sys_mprotect */
@@ -1092,9 +1392,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -1109,35 +1410,39 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_getpgid */
@@ -1150,15 +1455,15 @@ record_linux_system_call (int num, struc
/* sys_sysfs */
case 135:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (tmpu32 == 2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- /*XXX the size of memory is not very clear. */
- if (record_arch_list_add_mem (tmpu32, 10))
- return -1;
- }
+ 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 ((CORE_ADDR) tmpulongest, 10))
+ return -1;
+ }
break;
/* sys_personality */
@@ -1173,37 +1478,43 @@ record_linux_system_call (int num, struc
/* 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;
+ 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:
{
- 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;
+ 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 */
@@ -1215,36 +1526,37 @@ record_linux_system_call (int num, struc
/* sys_readv */
case 145:
{
- uint32_t vec;
- uint32_t vlen;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec);
- if (vec)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & vlen);
- for (tmpu32 = 0; tmpu32 < vlen; tmpu32++)
- {
- if (target_read_memory
- (vec, (gdb_byte *) & iov, sizeof (struct record_iovec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, vec),
- (unsigned long)sizeof (struct record_iovec));
- return -1;
- }
- if (record_arch_list_add_mem (iov.iov_base, iov.iov_len))
- return -1;
- vec += sizeof (struct record_iovec);
- }
- }
+ 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;
+ }
+ if (record_arch_list_add_mem
+ ((CORE_ADDR) extract_unsigned_integer
+ (iov, tdep->size_pointer, byte_order),
+ (int) extract_unsigned_integer
+ (iov + tdep->size_pointer, tdep->size_size_t,
+ byte_order)))
+ return -1;
+ vec += tdep->size_iovec;
+ }
+ }
}
break;
@@ -1270,9 +1582,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
break;
/* sys_sched_setscheduler */
@@ -1291,9 +1603,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timespec))
+ return -1;
break;
/* sys_mremap */
@@ -1304,15 +1617,17 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_vm86 */
@@ -1323,32 +1638,32 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
- }
+ 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;
/* sys_setresgid16 */
@@ -1357,35 +1672,40 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
- }
+ 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;
/* sys_rt_sigreturn */
@@ -1394,36 +1714,39 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_siginfo_t))
+ return -1;
break;
/* sys_rt_sigqueueinfo */
@@ -1434,15 +1757,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_pwrite64 */
@@ -1453,22 +1775,22 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* sys_capset */
@@ -1477,16 +1799,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_off_t))
+ return -1;
break;
/* sys_ni_syscall */
@@ -1499,9 +1823,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_mmap2 */
@@ -1520,9 +1845,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_lchown */
@@ -1543,16 +1869,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST gidsetsize;
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &gidsetsize);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_gid_t * (int) gidsetsize))
+ return -1;
+ }
break;
/* sys_setgroups */
@@ -1565,15 +1891,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_setresgid */
@@ -1582,15 +1908,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_chown */
@@ -1609,9 +1935,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_PAGE_SIZE))
+ return -1;
break;
/* sys_madvise */
@@ -1621,30 +1948,32 @@ record_linux_system_call (int num, struc
/* sys_getdents64 */
case 220:
{
- uint32_t count;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count))
- return -1;
+ 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);
- if (tmpu32 == tdep->fcntl_F_GETLK64)
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest == tdep->fcntl_F_GETLK64)
{
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock64))
- return -1;
- }
- else if (tmpu32 != tdep->fcntl_F_SETLK64
- && tmpu32 != tdep->fcntl_F_SETLKW64)
+ 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;
- }
+ goto sys_fcntl;
+ }
break;
/* sys_ni_syscall */
@@ -1669,15 +1998,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_listxattr */
@@ -1686,15 +2014,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_removexattr */
@@ -1709,9 +2036,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_loff_t))
+ return -1;
break;
/* sys_futex */
@@ -1722,35 +2050,36 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_long))
+ return -1;
break;
/* sys_io_destroy */
@@ -1759,49 +2088,57 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_io_submit */
case 248:
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- int32_t i, nr;
- uint32_t *iocbp;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr);
- iocbp = (uint32_t *) alloca (nr * tdep->size_int);
- if (target_read_memory
- (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %u.\n",
- paddress (gdbarch, tmpu32),
- (int)(nr * tdep->size_int));
- return -1;
- }
- for (i = 0; i < nr; i++)
- {
- if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb))
- return -1;
- }
- }
+ 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++)
+ {
+ if (record_arch_list_add_mem
+ ((CORE_ADDR) extract_unsigned_integer (iocbp,
+ tdep->size_pointer,
+ byte_order),
+ tdep->size_iocb))
+ return -1;
+ iocbp += tdep->size_pointer;
+ }
+ }
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_io_event))
+ return -1;
break;
/* sys_fadvise64 */
@@ -1813,28 +2150,28 @@ record_linux_system_call (int num, struc
/* sys_exit_group */
case 252:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall exit_group. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
- }
+ 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;
/* sys_epoll_create */
@@ -1845,16 +2182,15 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_remap_file_pages */
@@ -1865,23 +2201,25 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerspec))
+ return -1;
break;
/* sys_timer_getoverrun */
@@ -1894,32 +2232,36 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs64))
+ return -1;
break;
/* sys_tgkill */
@@ -1936,18 +2278,18 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_set_mempolicy */
@@ -1962,18 +2304,18 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_mq_notify */
@@ -1982,9 +2324,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_mq_attr))
+ return -1;
break;
/* sys_kexec_load */
@@ -1993,12 +2336,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -2011,20 +2356,20 @@ record_linux_system_call (int num, struc
/* 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;
- }
- }
+ 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;
/* sys_ioprio_set */
@@ -2053,9 +2398,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_unlinkat */
@@ -2070,15 +2416,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_fchmodat */
@@ -2089,34 +2434,39 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_unshare */
@@ -2127,22 +2477,24 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_sync_file_range */
@@ -2155,48 +2507,47 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* 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;
- }
+ 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,
+ (int) maxevents *
tdep->size_epoll_event))
+ return -1;
+ }
break;
default:
printf_unfiltered (_("Process record and replay target doesn't "
- "support syscall number %u\n"),
- (int)tmpu32);
+ "support syscall number %u\n"), num);
return -1;
break;
}
--- a/linux-record.h
+++ b/linux-record.h
@@ -23,6 +23,7 @@
struct linux_record_tdep
{
/* The size of the type that will be used in a system call. */
+ int size_pointer;
int size__old_kernel_stat;
int size_tms;
int size_loff_t;
@@ -81,7 +82,6 @@ struct linux_record_tdep
int size_itimerspec;
int size_mq_attr;
int size_siginfo;
-
int size_termios;
int size_termios2;
int size_pid_t;
@@ -89,6 +89,8 @@ struct linux_record_tdep
int size_serial_struct;
int size_serial_icounter_struct;
int size_hayes_esp_config;
+ int size_size_t;
+ int size_iovec;
/* The values of the second argument of system call "sys_ioctl". */
int ioctl_TCGETS;
@@ -171,6 +173,7 @@ struct linux_record_tdep
int arg3;
int arg4;
int arg5;
+ int arg6;
};
extern int record_linux_system_call (int num, struct regcache *regcache,
[-- Attachment #2: prec_syscall_64bits.txt --]
[-- Type: text/plain, Size: 119463 bytes --]
---
i386-linux-tdep.c | 26
linux-record.c | 2563 ++++++++++++++++++++++++++++++------------------------
linux-record.h | 5
3 files changed, 1482 insertions(+), 1112 deletions(-)
--- a/i386-linux-tdep.c
+++ b/i386-linux-tdep.c
@@ -369,7 +369,14 @@ i386_linux_intx80_sysenter_record (struc
int ret;
uint32_t tmpu32;
- regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32);
+ regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *) &tmpu32);
+
+ if (tmpu32 > 499)
+ {
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support syscall number %u\n"), tmpu32);
+ return -1;
+ }
ret = record_linux_system_call (tmpu32, regcache,
&i386_linux_record_tdep);
@@ -481,6 +488,8 @@ i386_linux_init_abi (struct gdbarch_info
/* Initialize the i386_linux_record_tdep. */
/* These values are the size of the type that will be used in a system
call. They are obtained from Linux Kernel source. */
+ i386_linux_record_tdep.size_pointer
+ = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
i386_linux_record_tdep.size__old_kernel_stat = 32;
i386_linux_record_tdep.size_tms = 16;
i386_linux_record_tdep.size_loff_t = 8;
@@ -501,9 +510,12 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_statfs = 64;
i386_linux_record_tdep.size_statfs64 = 84;
i386_linux_record_tdep.size_sockaddr = 16;
- i386_linux_record_tdep.size_int = 4;
- i386_linux_record_tdep.size_long = 4;
- i386_linux_record_tdep.size_ulong = 4;
+ i386_linux_record_tdep.size_int
+ = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
+ i386_linux_record_tdep.size_long
+ = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
+ i386_linux_record_tdep.size_ulong
+ = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
i386_linux_record_tdep.size_msghdr = 28;
i386_linux_record_tdep.size_itimerval = 16;
i386_linux_record_tdep.size_stat = 88;
@@ -536,7 +548,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_io_event = 32;
i386_linux_record_tdep.size_iocb = 64;
i386_linux_record_tdep.size_epoll_event = 12;
- i386_linux_record_tdep.size_itimerspec = i386_linux_record_tdep.size_timespec * 2;
+ i386_linux_record_tdep.size_itimerspec
+ = i386_linux_record_tdep.size_timespec * 2;
i386_linux_record_tdep.size_mq_attr = 32;
i386_linux_record_tdep.size_siginfo = 128;
i386_linux_record_tdep.size_termios = 36;
@@ -546,6 +559,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_serial_struct = 60;
i386_linux_record_tdep.size_serial_icounter_struct = 80;
i386_linux_record_tdep.size_hayes_esp_config = 12;
+ i386_linux_record_tdep.size_size_t = 4;
+ i386_linux_record_tdep.size_iovec = 8;
/* These values are the second argument of system call "sys_ioctl".
They are obtained from Linux Kernel source. */
@@ -627,6 +642,7 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.arg3 = I386_EDX_REGNUM;
i386_linux_record_tdep.arg4 = I386_ESI_REGNUM;
i386_linux_record_tdep.arg5 = I386_EDI_REGNUM;
+ i386_linux_record_tdep.arg6 = I386_EBP_REGNUM;
tdep->i386_intx80_record = i386_linux_intx80_sysenter_record;
tdep->i386_sysenter_record = i386_linux_intx80_sysenter_record;
--- a/linux-record.c
+++ b/linux-record.c
@@ -19,6 +19,7 @@
#include "defs.h"
#include "target.h"
+#include "gdbtypes.h"
#include "regcache.h"
#include "record.h"
#include "linux-record.h"
@@ -80,6 +81,133 @@
#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);
+
+ 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;
+ }
+ if (record_arch_list_add_mem ((CORE_ADDR) extract_unsigned_integer
+ (iov, tdep->size_pointer,
+ byte_order),
+ (int) extract_unsigned_integer
+ (iov + tdep->size_pointer,
+ tdep->size_size_t,
+ byte_order)))
+ 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;
+ if (record_arch_list_add_mem ((CORE_ADDR) addr,
+ (int) extract_unsigned_integer
+ (a, tdep->size_size_t, byte_order)))
+ 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
@@ -94,10 +222,11 @@
int
record_linux_system_call (int num, struct regcache *regcache,
- struct linux_record_tdep *tdep)
+ struct linux_record_tdep *tdep)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
- uint32_t tmpu32;
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+ ULONGEST tmpulongest;
switch (num)
{
@@ -108,15 +237,15 @@ record_linux_system_call (int num, struc
/* sys_exit */
case 1:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_ ("The next instruction is syscall exit. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
@@ -127,11 +256,11 @@ record_linux_system_call (int num, struc
/* sys_read */
case 3:
{
- uint32_t addr, count;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (addr, count))
- return -1;
+ 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;
@@ -171,9 +300,10 @@ record_linux_system_call (int num, struc
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;
+ 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;
/* sys_lseek */
@@ -194,16 +324,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_alarm */
@@ -240,9 +370,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_tms))
+ return -1;
break;
/* sys_ni_syscall */
@@ -270,149 +400,172 @@ record_linux_system_call (int num, struc
/* sys_ioctl */
case 54:
/* XXX Need to add a lot of support of other ioctl requests. */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (tmpu32 == tdep->ioctl_FIOCLEX || tmpu32 == tdep->ioctl_FIONCLEX
- || tmpu32 == tdep->ioctl_FIONBIO || tmpu32 == tdep->ioctl_FIOASYNC
- || tmpu32 == tdep->ioctl_TCSETS || tmpu32 == tdep->ioctl_TCSETSW
- || tmpu32 == tdep->ioctl_TCSETSF || tmpu32 == tdep->ioctl_TCSETA
- || tmpu32 == tdep->ioctl_TCSETAW || tmpu32 == tdep->ioctl_TCSETAF
- || tmpu32 == tdep->ioctl_TCSBRK || tmpu32 == tdep->ioctl_TCXONC
- || tmpu32 == tdep->ioctl_TCFLSH || tmpu32 == tdep->ioctl_TIOCEXCL
- || tmpu32 == tdep->ioctl_TIOCNXCL
- || tmpu32 == tdep->ioctl_TIOCSCTTY
- || tmpu32 == tdep->ioctl_TIOCSPGRP || tmpu32 == tdep->ioctl_TIOCSTI
- || tmpu32 == tdep->ioctl_TIOCSWINSZ
- || tmpu32 == tdep->ioctl_TIOCMBIS || tmpu32 == tdep->ioctl_TIOCMBIC
- || tmpu32 == tdep->ioctl_TIOCMSET
- || tmpu32 == tdep->ioctl_TIOCSSOFTCAR
- || tmpu32 == tdep->ioctl_TIOCCONS
- || tmpu32 == tdep->ioctl_TIOCSSERIAL
- || tmpu32 == tdep->ioctl_TIOCPKT || tmpu32 == tdep->ioctl_TIOCNOTTY
- || tmpu32 == tdep->ioctl_TIOCSETD || tmpu32 == tdep->ioctl_TCSBRKP
- || tmpu32 == tdep->ioctl_TIOCTTYGSTRUCT
- || tmpu32 == tdep->ioctl_TIOCSBRK || tmpu32 == tdep->ioctl_TIOCCBRK
- || tmpu32 == tdep->ioctl_TCSETS2 || tmpu32 == tdep->ioctl_TCSETSW2
- || tmpu32 == tdep->ioctl_TCSETSF2
- || tmpu32 == tdep->ioctl_TIOCSPTLCK
- || tmpu32 == tdep->ioctl_TIOCSERCONFIG
- || tmpu32 == tdep->ioctl_TIOCSERGWILD
- || tmpu32 == tdep->ioctl_TIOCSERSWILD
- || tmpu32 == tdep->ioctl_TIOCSLCKTRMIOS
- || tmpu32 == tdep->ioctl_TIOCSERGETMULTI
- || tmpu32 == tdep->ioctl_TIOCSERSETMULTI
- || tmpu32 == tdep->ioctl_TIOCMIWAIT
- || tmpu32 == tdep->ioctl_TIOCSHAYESESP)
- {
- /* Nothing to do. */
- }
- else if (tmpu32 == tdep->ioctl_TCGETS || tmpu32 == tdep->ioctl_TCGETA
- || tmpu32 == tdep->ioctl_TIOCGLCKTRMIOS)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGPGRP
- || tmpu32 == tdep->ioctl_TIOCGSID)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCOUTQ
- || tmpu32 == tdep->ioctl_TIOCMGET
- || tmpu32 == tdep->ioctl_TIOCGSOFTCAR
- || tmpu32 == tdep->ioctl_FIONREAD
- || tmpu32 == tdep->ioctl_TIOCINQ
- || tmpu32 == tdep->ioctl_TIOCGETD
- || tmpu32 == tdep->ioctl_TIOCGPTN
- || tmpu32 == tdep->ioctl_TIOCSERGETLSR)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_int))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGWINSZ)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_winsize))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCLINUX)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
+ 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 affect a char size memory. */
- if (record_arch_list_add_mem (tmpu32, 1))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGSERIAL)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TCGETS2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios2))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_FIOQSIZE)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGICOUNT)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem
- (tmpu32, tdep->size_serial_icounter_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGHAYESESP)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT)
- {
- printf_unfiltered (_("Process record and replay target doesn't "
- "support ioctl request TIOCSERGSTRUCT\n"));
- return 1;
- }
+ 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%s.\n"),
- phex_nz (tmpu32, 4));
- 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:
/* XXX */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
sys_fcntl:
- if (tmpu32 == tdep->fcntl_F_GETLK)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock))
- return -1;
- }
+ 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;
/* sys_ni_syscall */
@@ -425,9 +578,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_oldold_utsname))
+ return -1;
break;
/* sys_umask */
@@ -438,9 +592,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ustat))
+ return -1;
break;
/* sys_dup2 */
@@ -455,9 +610,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sgetmask */
@@ -474,9 +630,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sethostname */
@@ -487,26 +644,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_getrusage */
case 77:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_rusage))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rusage))
+ return -1;
break;
/* sys_gettimeofday */
case 78:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timeval))
- return -1;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timezone))
- return -1;
+ 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_settimeofday */
@@ -515,53 +676,56 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_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;
+ 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;
/* old_select */
case 82:
{
- struct sel_arg_struct
- {
- CORE_ADDR n;
- CORE_ADDR inp;
- CORE_ADDR outp;
- CORE_ADDR exp;
- CORE_ADDR tvp;
- } sel;
+ struct sel_arg_struct
+ {
+ CORE_ADDR n;
+ CORE_ADDR inp;
+ CORE_ADDR outp;
+ CORE_ADDR exp;
+ CORE_ADDR tvp;
+ } sel;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (sel));
- return -1;
- }
- if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval))
- return -1;
- }
+ 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;
@@ -572,12 +736,12 @@ record_linux_system_call (int num, struc
/* sys_readlink */
case 85:
{
- uint32_t len;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len);
- if (record_arch_list_add_mem (tmpu32, len))
- return -1;
+ 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;
@@ -590,23 +754,24 @@ record_linux_system_call (int num, struc
/* sys_reboot */
case 88:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall reboot. "
- "It will restart the computer. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ int q;
+ target_terminal_ours ();
+ q =
+ yquery (_("The next instruction is syscall reboot. "
+ "It will restart the computer. "
+ "Do you want to stop the program?"));
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
/* old_readdir */
case 89:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_dirent))
+ return -1;
break;
/* old_mmap */
@@ -616,22 +781,21 @@ record_linux_system_call (int num, struc
/* sys_munmap */
case 91:
{
- int q;
- uint32_t len;
+ int q;
+ ULONGEST len;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len);
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall munmap. "
- "It will free the memory addr = %s len = %u. "
- "It will make record target get error. "
- "Do you want to stop the program?"),
- paddress (gdbarch, tmpu32), (int)len);
- target_terminal_inferior ();
- if (q)
- return 1;
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
+ target_terminal_ours ();
+ q = yquery (_("The next instruction is syscall munmap. "
+ "It will free the memory addr = 0x%s len = %u. "
+ "It will make record target get error. "
+ "Do you want to stop the program?"),
+ OUTPUT_REG (tmpulongest, tdep->arg1), (int) len);
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
@@ -655,292 +819,347 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs))
+ return -1;
break;
/* sys_ioperm */
case 101:
break;
+ /* sys_socket */
+ case 500:
+ /* sys_sendto */
+ case 503:
+ /* sys_sendmsg */
+ case 505:
+ /* sys_shutdown */
+ case 507:
+ /* sys_bind */
+ case 508:
+ /* sys_connect */
+ case 501:
+ /* sys_listen */
+ case 509:
+ /* sys_setsockopt */
+ case 513:
+ break;
+
+ /* sys_accept */
+ case 502:
+ /* sys_getsockname */
+ case 510:
+ /* sys_getpeername */
+ case 511:
+ {
+ 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;
+
+ /* sys_recvfrom */
+ case 504:
+ {
+ 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;
+ }
+ /* sys_recv */
+ case 515:
+ {
+ 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;
+
+ /* sys_recvmsg */
+ case 506:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_linux_msghdr (regcache, tdep, tmpulongest))
+ return -1;
+ break;
+
+ /* sys_socketpair */
+ case 512:
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ break;
+
+ /* sys_getsockopt */
+ case 514:
+ 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);
+ if (record_arch_list_add_mem ((CORE_ADDR) optvalp,
+ (int) extract_signed_integer
+ (optlenp, tdep->size_int,
+ byte_order)))
+ return -1;
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_int))
+ return -1;
+ }
+ break;
+
/* sys_socketcall */
case 102:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- switch (tmpu32)
- {
- case RECORD_SYS_SOCKET:
- case RECORD_SYS_BIND:
- case RECORD_SYS_CONNECT:
- case RECORD_SYS_LISTEN:
- break;
- case RECORD_SYS_ACCEPT:
- case RECORD_SYS_GETSOCKNAME:
- case RECORD_SYS_GETPEERNAME:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[2], tdep->size_int))
- return -1;
- }
- }
- break;
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
- case RECORD_SYS_SOCKETPAIR:
- {
- uint32_t a[4];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], tdep->size_int))
- return -1;
- }
- }
- break;
- case RECORD_SYS_SEND:
- case RECORD_SYS_SENDTO:
- break;
- case RECORD_SYS_RECV:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_RECVFROM:
- {
- uint32_t a[6];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[5], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SHUTDOWN:
- case RECORD_SYS_SETSOCKOPT:
- break;
- case RECORD_SYS_GETSOCKOPT:
- {
- uint32_t a[5];
- uint32_t av;
+ 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;
+ }
+ if (record_linux_sockaddr (regcache, tdep,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ extract_unsigned_integer
+ (a + tdep->size_ulong,
+ tdep->size_ulong, byte_order)))
+ return -1;
+ }
+ }
+ break;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[4])
- {
- if (target_read_memory
- (a[4], (gdb_byte *) & av, sizeof (av)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[4]),
- (unsigned long)sizeof (av));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], av))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SENDMSG:
- break;
- case RECORD_SYS_RECVMSG:
- {
- uint32_t a[2], i;
- struct record_msghdr
- {
- uint32_t msg_name;
- uint32_t msg_namelen;
- uint32_t msg_iov;
- uint32_t msg_iovlen;
- uint32_t msg_control;
- uint32_t msg_controllen;
- uint32_t msg_flags;
- } rec;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
+ 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;
+ }
+ if (record_arch_list_add_mem ((CORE_ADDR) extract_unsigned_integer
+ (a,
+ tdep->size_ulong,
+ byte_order),
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_msghdr))
- return -1;
- if (a[1])
- {
- if (target_read_memory
- (a[1], (gdb_byte *) & rec, sizeof (rec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[1]),
- (unsigned long)sizeof (rec));
- return -1;
- }
- if (record_arch_list_add_mem
- (rec.msg_name, rec.msg_namelen))
- return -1;
- if (record_arch_list_add_mem
- (rec.msg_control, rec.msg_controllen))
- return -1;
- if (rec.msg_iov)
- {
- for (i = 0; i < rec.msg_iovlen; i++)
- {
- if (target_read_memory
- (rec.msg_iov, (gdb_byte *) & iov,
- sizeof (iov)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error "
- "reading memory at "
- "addr = %s "
- "len = %lu.\n",
- paddress (gdbarch,
- rec.msg_iov),
- (unsigned long)sizeof (iov));
- return -1;
- }
- if (record_arch_list_add_mem
- (iov.iov_base, iov.iov_len))
- return -1;
- rec.msg_iov += sizeof (struct record_iovec);
- }
- }
- }
- }
- }
- break;
- default:
- printf_unfiltered (_("Process record and replay target "
- "doesn't support socketcall call 0x%s\n"),
- phex_nz (tmpu32, 4));
- return -1;
- break;
- }
+ 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;
+ }
+ if (record_linux_sockaddr (regcache, tdep,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ extract_unsigned_integer
+ (a + tdep->size_ulong,
+ tdep->size_ulong, byte_order)))
+ 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;
+ if (record_arch_list_add_mem
+ ((CORE_ADDR) tmpulongest,
+ (int) extract_unsigned_integer (a, tdep->size_ulong,
+ byte_order)))
+ 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;
+ }
+ if (record_arch_list_add_mem
+ ((CORE_ADDR) extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ (int) extract_unsigned_integer (av, tdep->size_int,
+ byte_order)))
+ return -1;
+ a += tdep->size_ulong;
+ if (record_arch_list_add_mem
+ ((CORE_ADDR) extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ 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,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order)))
+ 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;
/* sys_syslog */
@@ -949,16 +1168,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerval))
+ return -1;
break;
/* sys_newstat */
@@ -967,16 +1188,19 @@ record_linux_system_call (int num, struc
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;
+ /* sys_newfstatat */
+ case 540:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_utsname))
+ return -1;
break;
/* sys_iopl */
@@ -991,12 +1215,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_swapoff */
@@ -1005,47 +1231,121 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_sysinfo))
+ return -1;
+ break;
+
+ /* sys_shmget */
+ case 520:
+ /* sys_semget */
+ case 523:
+ /* sys_semop */
+ case 524:
+ /* sys_msgget */
+ case 528:
+ /* sys_shmdt */
+ /* XXX maybe need do some record works wiht sys_shmdt. */
+ case 527:
+ /* sys_msgsnd */
+ case 529:
+ /* sys_semtimedop */
+ case 532:
+ break;
+
+ /* sys_shmat */
+ case 521:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ulong))
+ return -1;
+ break;
+
+ /* sys_shmctl */
+ case 522:
+ 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_semctl */
+ /* XXX sys_semctl 525 still not support. */
+
+ /* sys_msgrcv */
+ case 530:
+ {
+ ULONGEST msgp;
+ regcache_raw_read_signed (regcache, tdep->arg3, &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &msgp);
+ if (record_arch_list_add_mem ((CORE_ADDR) msgp,
+ (int) tmpulongest + tdep->size_long))
+ return -1;
+ }
+ break;
+
+ /* sys_msgctl */
+ case 531:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_msqid_ds))
+ 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;
- }
+ 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 wiht 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);
+ if (record_arch_list_add_mem ((CORE_ADDR) ptr,
+ (int) second + tdep->size_long))
+ 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 support. */
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support ipc number %d\n"), (int) tmpulongest);
+ break;
+ }
break;
/* sys_fsync */
@@ -1060,30 +1360,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_timex))
+ return -1;
break;
/* sys_mprotect */
@@ -1092,9 +1392,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -1109,35 +1410,39 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_getpgid */
@@ -1150,15 +1455,15 @@ record_linux_system_call (int num, struc
/* sys_sysfs */
case 135:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (tmpu32 == 2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- /*XXX the size of memory is not very clear. */
- if (record_arch_list_add_mem (tmpu32, 10))
- return -1;
- }
+ 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 ((CORE_ADDR) tmpulongest, 10))
+ return -1;
+ }
break;
/* sys_personality */
@@ -1173,37 +1478,43 @@ record_linux_system_call (int num, struc
/* 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;
+ 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:
{
- 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;
+ 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 */
@@ -1215,36 +1526,37 @@ record_linux_system_call (int num, struc
/* sys_readv */
case 145:
{
- uint32_t vec;
- uint32_t vlen;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec);
- if (vec)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & vlen);
- for (tmpu32 = 0; tmpu32 < vlen; tmpu32++)
- {
- if (target_read_memory
- (vec, (gdb_byte *) & iov, sizeof (struct record_iovec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, vec),
- (unsigned long)sizeof (struct record_iovec));
- return -1;
- }
- if (record_arch_list_add_mem (iov.iov_base, iov.iov_len))
- return -1;
- vec += sizeof (struct record_iovec);
- }
- }
+ 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;
+ }
+ if (record_arch_list_add_mem
+ ((CORE_ADDR) extract_unsigned_integer
+ (iov, tdep->size_pointer, byte_order),
+ (int) extract_unsigned_integer
+ (iov + tdep->size_pointer, tdep->size_size_t,
+ byte_order)))
+ return -1;
+ vec += tdep->size_iovec;
+ }
+ }
}
break;
@@ -1270,9 +1582,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
break;
/* sys_sched_setscheduler */
@@ -1291,9 +1603,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timespec))
+ return -1;
break;
/* sys_mremap */
@@ -1304,15 +1617,17 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_vm86 */
@@ -1323,32 +1638,32 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
- }
+ 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;
/* sys_setresgid16 */
@@ -1357,35 +1672,40 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
- }
+ 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;
/* sys_rt_sigreturn */
@@ -1394,36 +1714,39 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_siginfo_t))
+ return -1;
break;
/* sys_rt_sigqueueinfo */
@@ -1434,15 +1757,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_pwrite64 */
@@ -1453,22 +1775,22 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* sys_capset */
@@ -1477,16 +1799,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_off_t))
+ return -1;
break;
/* sys_ni_syscall */
@@ -1499,9 +1823,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_mmap2 */
@@ -1520,9 +1845,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_lchown */
@@ -1543,16 +1869,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest)
+ {
+ ULONGEST gidsetsize;
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &gidsetsize);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_gid_t * (int) gidsetsize))
+ return -1;
+ }
break;
/* sys_setgroups */
@@ -1565,15 +1891,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_setresgid */
@@ -1582,15 +1908,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_chown */
@@ -1609,9 +1935,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_PAGE_SIZE))
+ return -1;
break;
/* sys_madvise */
@@ -1621,30 +1948,32 @@ record_linux_system_call (int num, struc
/* sys_getdents64 */
case 220:
{
- uint32_t count;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count))
- return -1;
+ 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);
- if (tmpu32 == tdep->fcntl_F_GETLK64)
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest == tdep->fcntl_F_GETLK64)
{
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock64))
- return -1;
- }
- else if (tmpu32 != tdep->fcntl_F_SETLK64
- && tmpu32 != tdep->fcntl_F_SETLKW64)
+ 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;
- }
+ goto sys_fcntl;
+ }
break;
/* sys_ni_syscall */
@@ -1669,15 +1998,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_listxattr */
@@ -1686,15 +2014,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_removexattr */
@@ -1709,9 +2036,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_loff_t))
+ return -1;
break;
/* sys_futex */
@@ -1722,35 +2050,36 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_long))
+ return -1;
break;
/* sys_io_destroy */
@@ -1759,49 +2088,57 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_io_submit */
case 248:
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- int32_t i, nr;
- uint32_t *iocbp;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr);
- iocbp = (uint32_t *) alloca (nr * tdep->size_int);
- if (target_read_memory
- (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %u.\n",
- paddress (gdbarch, tmpu32),
- (int)(nr * tdep->size_int));
- return -1;
- }
- for (i = 0; i < nr; i++)
- {
- if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb))
- return -1;
- }
- }
+ 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++)
+ {
+ if (record_arch_list_add_mem
+ ((CORE_ADDR) extract_unsigned_integer (iocbp,
+ tdep->size_pointer,
+ byte_order),
+ tdep->size_iocb))
+ return -1;
+ iocbp += tdep->size_pointer;
+ }
+ }
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_io_event))
+ return -1;
break;
/* sys_fadvise64 */
@@ -1813,28 +2150,28 @@ record_linux_system_call (int num, struc
/* sys_exit_group */
case 252:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall exit_group. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
- }
+ 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;
/* sys_epoll_create */
@@ -1845,16 +2182,15 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_remap_file_pages */
@@ -1865,23 +2201,25 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerspec))
+ return -1;
break;
/* sys_timer_getoverrun */
@@ -1894,32 +2232,36 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs64))
+ return -1;
break;
/* sys_tgkill */
@@ -1936,18 +2278,18 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_set_mempolicy */
@@ -1962,18 +2304,18 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_mq_notify */
@@ -1982,9 +2324,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_mq_attr))
+ return -1;
break;
/* sys_kexec_load */
@@ -1993,12 +2336,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -2011,20 +2356,20 @@ record_linux_system_call (int num, struc
/* 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;
- }
- }
+ 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;
/* sys_ioprio_set */
@@ -2053,9 +2398,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_unlinkat */
@@ -2070,15 +2416,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_fchmodat */
@@ -2089,34 +2434,39 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_unshare */
@@ -2127,22 +2477,24 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_sync_file_range */
@@ -2155,48 +2507,47 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* 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;
- }
+ 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,
+ (int) maxevents * tdep->size_epoll_event))
+ return -1;
+ }
break;
default:
printf_unfiltered (_("Process record and replay target doesn't "
- "support syscall number %u\n"),
- (int)tmpu32);
+ "support syscall number %u\n"), num);
return -1;
break;
}
--- a/linux-record.h
+++ b/linux-record.h
@@ -23,6 +23,7 @@
struct linux_record_tdep
{
/* The size of the type that will be used in a system call. */
+ int size_pointer;
int size__old_kernel_stat;
int size_tms;
int size_loff_t;
@@ -81,7 +82,6 @@ struct linux_record_tdep
int size_itimerspec;
int size_mq_attr;
int size_siginfo;
-
int size_termios;
int size_termios2;
int size_pid_t;
@@ -89,6 +89,8 @@ struct linux_record_tdep
int size_serial_struct;
int size_serial_icounter_struct;
int size_hayes_esp_config;
+ int size_size_t;
+ int size_iovec;
/* The values of the second argument of system call "sys_ioctl". */
int ioctl_TCGETS;
@@ -171,6 +173,7 @@ struct linux_record_tdep
int arg3;
int arg4;
int arg5;
+ int arg6;
};
extern int record_linux_system_call (int num, struct regcache *regcache,
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3
2009-07-17 12:03 ` Hui Zhu
@ 2009-07-18 3:04 ` Michael Snyder
2009-07-19 17:39 ` Hui Zhu
0 siblings, 1 reply; 8+ messages in thread
From: Michael Snyder @ 2009-07-18 3:04 UTC (permalink / raw)
To: Hui Zhu; +Cc: gdb-patches ml, mark.kettenis
Hui Zhu wrote:
> @@ -80,6 +81,133 @@
> #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);
Space between function name and left paren.
> + /* 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;
> + }
> + if (record_arch_list_add_mem ((CORE_ADDR) extract_unsigned_integer
> + (iov, tdep->size_pointer,
> + byte_order),
> + (int) extract_unsigned_integer
> + (iov + tdep->size_pointer,
> + tdep->size_size_t,
> + byte_order)))
This statement is so ugly and badly indented.
It would be great if you could just use a couple of
temporary variables, one CORE_ADDR and one int, and
break up the line. Call extract_unsigned_integer first,
and then record_arch_list_add_mem.
> + 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;
> + if (record_arch_list_add_mem ((CORE_ADDR) addr,
> + (int) extract_unsigned_integer
> + (a, tdep->size_size_t, byte_order)))
Same here, maybe use the same temporary variable.
> + case 514:
> + 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);
> + if (record_arch_list_add_mem ((CORE_ADDR) optvalp,
> + (int) extract_signed_integer
> + (optlenp, tdep->size_int,
> + byte_order)))
Another great place for a temporary variable, just to
avoid having to break up such a long line so awkwardly.
> + 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;
> + }
> + if (record_linux_sockaddr (regcache, tdep,
> + extract_unsigned_integer
> + (a, tdep->size_ulong, byte_order),
> + extract_unsigned_integer
> + (a + tdep->size_ulong,
> + tdep->size_ulong, byte_order)))
... and again, same thing.
> + return -1;
> + }
> + }
> + break;
>
> - regcache_raw_read (regcache, tdep->arg2,
> - (gdb_byte *) & tmpu32);
> - if (tmpu32)
> - {
> - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
> - {
> - if (record_debug)
> - fprintf_unfiltered (gdb_stdlog,
> - "Process record: error reading "
> - "memory at addr = %s len = %lu.\n",
> - paddress (gdbarch, tmpu32),
> - (unsigned long)sizeof (a));
> - return -1;
> - }
> - if (a[4])
> - {
> - if (target_read_memory
> - (a[4], (gdb_byte *) & av, sizeof (av)))
How about: if (target_read_memory (a[4],
gdb_byte *) & av,
sizeof (av)))
> + 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;
> + }
> + if (record_arch_list_add_mem ((CORE_ADDR)
> extract_unsigned_integer
> + (a,
> + tdep->size_ulong,
> + byte_order),
> + tdep->size_int))
And another great place for a temp variable.
> + 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;
> + }
> + if (record_linux_sockaddr (regcache, tdep,
> + extract_unsigned_integer
> + (a, tdep->size_ulong, byte_order),
> + extract_unsigned_integer
> + (a + tdep->size_ulong,
> + tdep->size_ulong, byte_order)))
> + return -1;
> + }
> + case RECORD_SYS_RECV:
And again...
> + 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;
> + if (record_arch_list_add_mem
> + ((CORE_ADDR) tmpulongest,
> + (int) extract_unsigned_integer (a, tdep->size_ulong,
> + byte_order)))
> + return -1;
> + }
> + }
> + break;
> + case RECORD_SYS_SHUTDOWN:
And again....
> + 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;
> + }
> + if (record_arch_list_add_mem
> + ((CORE_ADDR) extract_unsigned_integer
> + (a, tdep->size_ulong, byte_order),
> + (int) extract_unsigned_integer (av, tdep->size_int,
> + byte_order)))
And again...
> + return -1;
> + a += tdep->size_ulong;
> + if (record_arch_list_add_mem
> + ((CORE_ADDR) extract_unsigned_integer
> + (a, tdep->size_ulong, byte_order),
> + tdep->size_int))
And again...
> + 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,
> + extract_unsigned_integer
> + (a, tdep->size_ulong, byte_order)))
And again...
> @@ -1005,47 +1231,121 @@ record_linux_system_call (int num, struc
>
> /* 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;
> + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
> + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
> + tdep->size_sysinfo))
> + return -1;
> + break;
> +
> + /* sys_shmget */
> + case 520:
> + /* sys_semget */
> + case 523:
> + /* sys_semop */
> + case 524:
> + /* sys_msgget */
> + case 528:
> + /* sys_shmdt */
> + /* XXX maybe need do some record works wiht sys_shmdt. */
"with"
> + 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;
> + }
> + if (record_arch_list_add_mem
> + ((CORE_ADDR) extract_unsigned_integer
> + (iov, tdep->size_pointer, byte_order),
> + (int) extract_unsigned_integer
> + (iov + tdep->size_pointer, tdep->size_size_t,
> + byte_order)))
And same thing...
> + 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++)
> + {
> + if (record_arch_list_add_mem
> + ((CORE_ADDR) extract_unsigned_integer (iocbp,
> + tdep->size_pointer,
> + byte_order),
> + tdep->size_iocb))
And again...
> 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;
> - }
> + 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,
> + (int) maxevents *
> tdep->size_epoll_event))
I think you don't need the (int) cast here, and if you
remove it, the line will be less than 80 chars.
Aside from those comments, this patch looks great!
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3
2009-07-18 3:04 ` Michael Snyder
@ 2009-07-19 17:39 ` Hui Zhu
2009-07-26 7:46 ` Michael Snyder
0 siblings, 1 reply; 8+ messages in thread
From: Hui Zhu @ 2009-07-19 17:39 UTC (permalink / raw)
To: Michael Snyder, Mark Kettenis; +Cc: gdb-patches ml
[-- Attachment #1: Type: text/plain, Size: 144724 bytes --]
On Sat, Jul 18, 2009 at 08:47, Michael Snyder<msnyder@vmware.com> wrote:
> Hui Zhu wrote:
>
>> @@ -80,6 +81,133 @@
>> #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);
>
> Space between function name and left paren.
>
>
>> + /* 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;
>> + }
>> + if (record_arch_list_add_mem ((CORE_ADDR)
>> extract_unsigned_integer
>> + (iov,
>> tdep->size_pointer,
>> + byte_order),
>> + (int) extract_unsigned_integer
>> + (iov +
>> tdep->size_pointer,
>> + tdep->size_size_t,
>> + byte_order)))
>
> This statement is so ugly and badly indented.
> It would be great if you could just use a couple of
> temporary variables, one CORE_ADDR and one int, and
> break up the line. Call extract_unsigned_integer first,
> and then record_arch_list_add_mem.
>
>
>> + 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;
>> + if (record_arch_list_add_mem ((CORE_ADDR) addr,
>> + (int) extract_unsigned_integer
>> + (a, tdep->size_size_t,
>> byte_order)))
>
> Same here, maybe use the same temporary variable.
>
>
>> + case 514:
>> + 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);
>> + if (record_arch_list_add_mem ((CORE_ADDR) optvalp,
>> + (int) extract_signed_integer
>> + (optlenp, tdep->size_int,
>> + byte_order)))
>
> Another great place for a temporary variable, just to
> avoid having to break up such a long line so awkwardly.
>
>
>
>> + 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;
>> + }
>> + if (record_linux_sockaddr (regcache, tdep,
>> + extract_unsigned_integer
>> + (a, tdep->size_ulong,
>> byte_order),
>> + extract_unsigned_integer
>> + (a + tdep->size_ulong,
>> + tdep->size_ulong,
>> byte_order)))
>
> ... and again, same thing.
>
>> + return -1;
>> + }
>> + }
>> + break;
>>
>> - regcache_raw_read (regcache, tdep->arg2,
>> - (gdb_byte *) & tmpu32);
>> - if (tmpu32)
>> - {
>> - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof
>> (a)))
>> - {
>> - if (record_debug)
>> - fprintf_unfiltered (gdb_stdlog,
>> - "Process record: error reading "
>> - "memory at addr = %s len =
>> %lu.\n",
>> - paddress (gdbarch, tmpu32),
>> - (unsigned long)sizeof (a));
>> - return -1;
>> - }
>> - if (a[4])
>> - {
>> - if (target_read_memory
>> - (a[4], (gdb_byte *) & av, sizeof (av)))
>
> How about: if (target_read_memory (a[4],
> gdb_byte *) & av,
> sizeof (av)))
>
>
>> + 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;
>> + }
>> + if (record_arch_list_add_mem ((CORE_ADDR)
>> extract_unsigned_integer
>> + (a,
>> +
>> tdep->size_ulong,
>> + byte_order),
>> + tdep->size_int))
>
> And another great place for a temp variable.
>
>
>> + 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;
>> + }
>> + if (record_linux_sockaddr (regcache, tdep,
>> + extract_unsigned_integer
>> + (a, tdep->size_ulong,
>> byte_order),
>> + extract_unsigned_integer
>> + (a + tdep->size_ulong,
>> + tdep->size_ulong,
>> byte_order)))
>> + return -1;
>> + }
>> + case RECORD_SYS_RECV:
>
> And again...
>
>> + 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;
>> + if (record_arch_list_add_mem
>> + ((CORE_ADDR) tmpulongest,
>> + (int) extract_unsigned_integer (a,
>> tdep->size_ulong,
>> + byte_order)))
>> + return -1;
>> + }
>> + }
>> + break;
>> + case RECORD_SYS_SHUTDOWN:
>
> And again....
>
>
>> + 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;
>> + }
>> + if (record_arch_list_add_mem
>> + ((CORE_ADDR) extract_unsigned_integer
>> + (a, tdep->size_ulong,
>> byte_order),
>> + (int) extract_unsigned_integer (av,
>> tdep->size_int,
>> + byte_order)))
>
> And again...
>
>
>> + return -1;
>> + a += tdep->size_ulong;
>> + if (record_arch_list_add_mem
>> + ((CORE_ADDR) extract_unsigned_integer
>> + (a, tdep->size_ulong,
>> byte_order),
>> + tdep->size_int))
>
> And again...
>
>> + 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,
>> + extract_unsigned_integer
>> + (a, tdep->size_ulong,
>> byte_order)))
>
> And again...
>
>
>> @@ -1005,47 +1231,121 @@ record_linux_system_call (int num, struc
>>
>> /* 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;
>> + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
>> + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
>> + tdep->size_sysinfo))
>> + return -1;
>> + break;
>> +
>> + /* sys_shmget */
>> + case 520:
>> + /* sys_semget */
>> + case 523:
>> + /* sys_semop */
>> + case 524:
>> + /* sys_msgget */
>> + case 528:
>> + /* sys_shmdt */
>> + /* XXX maybe need do some record works wiht sys_shmdt. */
>
> "with"
>
>
>> + 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;
>> + }
>> + if (record_arch_list_add_mem
>> + ((CORE_ADDR) extract_unsigned_integer
>> + (iov, tdep->size_pointer,
>> byte_order),
>> + (int) extract_unsigned_integer
>> + (iov + tdep->size_pointer,
>> tdep->size_size_t,
>> + byte_order)))
>
> And same thing...
>
>
>> + 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++)
>> + {
>> + if (record_arch_list_add_mem
>> + ((CORE_ADDR) extract_unsigned_integer (iocbp,
>> +
>> tdep->size_pointer,
>> + byte_order),
>> + tdep->size_iocb))
>
> And again...
>
>
>> 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;
>> - }
>> + 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,
>> + (int) maxevents *
>> tdep->size_epoll_event))
>
> I think you don't need the (int) cast here, and if you
> remove it, the line will be less than 80 chars.
>
>
> Aside from those comments, this patch looks great!
>
>
2009-07-20 Hui Zhu <teawater@gmail.com>
Add process record Linux system call 64 bits support.
* linux-record.h (linux_record_tdep): Add size_pointer,
size_size_t, size_iovec and arg6. Change the values of
size_int, size_long and size_ulong to
gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT,
gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT.
* i386-linux-tdep.c (i386_linux_init_abi): Ditto.
(i386_linux_intx80_sysenter_record): Add a check for system
call number.
* linux-record.c (record_linux_system_call): Make this
function support 64 bits.
---
i386-linux-tdep.c | 26
linux-record.c | 2570 ++++++++++++++++++++++++++++++------------------------
linux-record.h | 5
3 files changed, 1489 insertions(+), 1112 deletions(-)
--- a/i386-linux-tdep.c
+++ b/i386-linux-tdep.c
@@ -369,7 +369,14 @@ i386_linux_intx80_sysenter_record (struc
int ret;
uint32_t tmpu32;
- regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32);
+ regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *) &tmpu32);
+
+ if (tmpu32 > 499)
+ {
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support syscall number %u\n"), tmpu32);
+ return -1;
+ }
ret = record_linux_system_call (tmpu32, regcache,
&i386_linux_record_tdep);
@@ -481,6 +488,8 @@ i386_linux_init_abi (struct gdbarch_info
/* Initialize the i386_linux_record_tdep. */
/* These values are the size of the type that will be used in a system
call. They are obtained from Linux Kernel source. */
+ i386_linux_record_tdep.size_pointer
+ = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
i386_linux_record_tdep.size__old_kernel_stat = 32;
i386_linux_record_tdep.size_tms = 16;
i386_linux_record_tdep.size_loff_t = 8;
@@ -501,9 +510,12 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_statfs = 64;
i386_linux_record_tdep.size_statfs64 = 84;
i386_linux_record_tdep.size_sockaddr = 16;
- i386_linux_record_tdep.size_int = 4;
- i386_linux_record_tdep.size_long = 4;
- i386_linux_record_tdep.size_ulong = 4;
+ i386_linux_record_tdep.size_int
+ = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
+ i386_linux_record_tdep.size_long
+ = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
+ i386_linux_record_tdep.size_ulong
+ = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
i386_linux_record_tdep.size_msghdr = 28;
i386_linux_record_tdep.size_itimerval = 16;
i386_linux_record_tdep.size_stat = 88;
@@ -536,7 +548,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_io_event = 32;
i386_linux_record_tdep.size_iocb = 64;
i386_linux_record_tdep.size_epoll_event = 12;
- i386_linux_record_tdep.size_itimerspec =
i386_linux_record_tdep.size_timespec * 2;
+ i386_linux_record_tdep.size_itimerspec
+ = i386_linux_record_tdep.size_timespec * 2;
i386_linux_record_tdep.size_mq_attr = 32;
i386_linux_record_tdep.size_siginfo = 128;
i386_linux_record_tdep.size_termios = 36;
@@ -546,6 +559,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_serial_struct = 60;
i386_linux_record_tdep.size_serial_icounter_struct = 80;
i386_linux_record_tdep.size_hayes_esp_config = 12;
+ i386_linux_record_tdep.size_size_t = 4;
+ i386_linux_record_tdep.size_iovec = 8;
/* These values are the second argument of system call "sys_ioctl".
They are obtained from Linux Kernel source. */
@@ -627,6 +642,7 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.arg3 = I386_EDX_REGNUM;
i386_linux_record_tdep.arg4 = I386_ESI_REGNUM;
i386_linux_record_tdep.arg5 = I386_EDI_REGNUM;
+ i386_linux_record_tdep.arg6 = I386_EBP_REGNUM;
tdep->i386_intx80_record = i386_linux_intx80_sysenter_record;
tdep->i386_sysenter_record = i386_linux_intx80_sysenter_record;
--- a/linux-record.c
+++ b/linux-record.c
@@ -19,6 +19,7 @@
#include "defs.h"
#include "target.h"
+#include "gdbtypes.h"
#include "regcache.h"
#include "record.h"
#include "linux-record.h"
@@ -80,6 +81,134 @@
#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
@@ -94,10 +223,13 @@
int
record_linux_system_call (int num, struct regcache *regcache,
- struct linux_record_tdep *tdep)
+ struct linux_record_tdep *tdep)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
- uint32_t tmpu32;
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+ ULONGEST tmpulongest;
+ CORE_ADDR tmpaddr;
+ int tmpint;
switch (num)
{
@@ -108,15 +240,14 @@ record_linux_system_call (int num, struc
/* sys_exit */
case 1:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_ ("The next instruction is syscall exit. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
@@ -127,11 +258,11 @@ record_linux_system_call (int num, struc
/* sys_read */
case 3:
{
- uint32_t addr, count;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (addr, count))
- return -1;
+ 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;
@@ -171,9 +302,10 @@ record_linux_system_call (int num, struc
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;
+ 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;
/* sys_lseek */
@@ -194,16 +326,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_alarm */
@@ -240,9 +372,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_tms))
+ return -1;
break;
/* sys_ni_syscall */
@@ -270,149 +402,172 @@ record_linux_system_call (int num, struc
/* sys_ioctl */
case 54:
/* XXX Need to add a lot of support of other ioctl requests. */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (tmpu32 == tdep->ioctl_FIOCLEX || tmpu32 == tdep->ioctl_FIONCLEX
- || tmpu32 == tdep->ioctl_FIONBIO || tmpu32 == tdep->ioctl_FIOASYNC
- || tmpu32 == tdep->ioctl_TCSETS || tmpu32 == tdep->ioctl_TCSETSW
- || tmpu32 == tdep->ioctl_TCSETSF || tmpu32 == tdep->ioctl_TCSETA
- || tmpu32 == tdep->ioctl_TCSETAW || tmpu32 == tdep->ioctl_TCSETAF
- || tmpu32 == tdep->ioctl_TCSBRK || tmpu32 == tdep->ioctl_TCXONC
- || tmpu32 == tdep->ioctl_TCFLSH || tmpu32 == tdep->ioctl_TIOCEXCL
- || tmpu32 == tdep->ioctl_TIOCNXCL
- || tmpu32 == tdep->ioctl_TIOCSCTTY
- || tmpu32 == tdep->ioctl_TIOCSPGRP || tmpu32 == tdep->ioctl_TIOCSTI
- || tmpu32 == tdep->ioctl_TIOCSWINSZ
- || tmpu32 == tdep->ioctl_TIOCMBIS || tmpu32 == tdep->ioctl_TIOCMBIC
- || tmpu32 == tdep->ioctl_TIOCMSET
- || tmpu32 == tdep->ioctl_TIOCSSOFTCAR
- || tmpu32 == tdep->ioctl_TIOCCONS
- || tmpu32 == tdep->ioctl_TIOCSSERIAL
- || tmpu32 == tdep->ioctl_TIOCPKT || tmpu32 == tdep->ioctl_TIOCNOTTY
- || tmpu32 == tdep->ioctl_TIOCSETD || tmpu32 == tdep->ioctl_TCSBRKP
- || tmpu32 == tdep->ioctl_TIOCTTYGSTRUCT
- || tmpu32 == tdep->ioctl_TIOCSBRK || tmpu32 == tdep->ioctl_TIOCCBRK
- || tmpu32 == tdep->ioctl_TCSETS2 || tmpu32 == tdep->ioctl_TCSETSW2
- || tmpu32 == tdep->ioctl_TCSETSF2
- || tmpu32 == tdep->ioctl_TIOCSPTLCK
- || tmpu32 == tdep->ioctl_TIOCSERCONFIG
- || tmpu32 == tdep->ioctl_TIOCSERGWILD
- || tmpu32 == tdep->ioctl_TIOCSERSWILD
- || tmpu32 == tdep->ioctl_TIOCSLCKTRMIOS
- || tmpu32 == tdep->ioctl_TIOCSERGETMULTI
- || tmpu32 == tdep->ioctl_TIOCSERSETMULTI
- || tmpu32 == tdep->ioctl_TIOCMIWAIT
- || tmpu32 == tdep->ioctl_TIOCSHAYESESP)
- {
- /* Nothing to do. */
- }
- else if (tmpu32 == tdep->ioctl_TCGETS || tmpu32 == tdep->ioctl_TCGETA
- || tmpu32 == tdep->ioctl_TIOCGLCKTRMIOS)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGPGRP
- || tmpu32 == tdep->ioctl_TIOCGSID)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCOUTQ
- || tmpu32 == tdep->ioctl_TIOCMGET
- || tmpu32 == tdep->ioctl_TIOCGSOFTCAR
- || tmpu32 == tdep->ioctl_FIONREAD
- || tmpu32 == tdep->ioctl_TIOCINQ
- || tmpu32 == tdep->ioctl_TIOCGETD
- || tmpu32 == tdep->ioctl_TIOCGPTN
- || tmpu32 == tdep->ioctl_TIOCSERGETLSR)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_int))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGWINSZ)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_winsize))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCLINUX)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
+ 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 affect a char size memory. */
- if (record_arch_list_add_mem (tmpu32, 1))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGSERIAL)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TCGETS2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios2))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_FIOQSIZE)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGICOUNT)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem
- (tmpu32, tdep->size_serial_icounter_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGHAYESESP)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT)
- {
- printf_unfiltered (_("Process record and replay target doesn't "
- "support ioctl request TIOCSERGSTRUCT\n"));
- return 1;
- }
+ 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%s.\n"),
- phex_nz (tmpu32, 4));
- 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:
/* XXX */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
sys_fcntl:
- if (tmpu32 == tdep->fcntl_F_GETLK)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock))
- return -1;
- }
+ 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;
/* sys_ni_syscall */
@@ -425,9 +580,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_oldold_utsname))
+ return -1;
break;
/* sys_umask */
@@ -438,9 +594,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ustat))
+ return -1;
break;
/* sys_dup2 */
@@ -455,9 +612,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sgetmask */
@@ -474,9 +632,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sethostname */
@@ -487,26 +646,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_getrusage */
case 77:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_rusage))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rusage))
+ return -1;
break;
/* sys_gettimeofday */
case 78:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timeval))
- return -1;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timezone))
- return -1;
+ 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_settimeofday */
@@ -515,53 +678,56 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_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;
+ 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;
/* old_select */
case 82:
{
- struct sel_arg_struct
- {
- CORE_ADDR n;
- CORE_ADDR inp;
- CORE_ADDR outp;
- CORE_ADDR exp;
- CORE_ADDR tvp;
- } sel;
+ struct sel_arg_struct
+ {
+ CORE_ADDR n;
+ CORE_ADDR inp;
+ CORE_ADDR outp;
+ CORE_ADDR exp;
+ CORE_ADDR tvp;
+ } sel;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (sel));
- return -1;
- }
- if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval))
- return -1;
- }
+ 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;
@@ -572,12 +738,12 @@ record_linux_system_call (int num, struc
/* sys_readlink */
case 85:
{
- uint32_t len;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len);
- if (record_arch_list_add_mem (tmpu32, len))
- return -1;
+ 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;
@@ -590,23 +756,24 @@ record_linux_system_call (int num, struc
/* sys_reboot */
case 88:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall reboot. "
- "It will restart the computer. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ int q;
+ target_terminal_ours ();
+ q =
+ yquery (_("The next instruction is syscall reboot. "
+ "It will restart the computer. "
+ "Do you want to stop the program?"));
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
/* old_readdir */
case 89:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_dirent))
+ return -1;
break;
/* old_mmap */
@@ -616,22 +783,21 @@ record_linux_system_call (int num, struc
/* sys_munmap */
case 91:
{
- int q;
- uint32_t len;
+ int q;
+ ULONGEST len;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len);
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall munmap. "
- "It will free the memory addr = %s len = %u. "
- "It will make record target get error. "
- "Do you want to stop the program?"),
- paddress (gdbarch, tmpu32), (int)len);
- target_terminal_inferior ();
- if (q)
- return 1;
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
+ target_terminal_ours ();
+ q = yquery (_("The next instruction is syscall munmap. "
+ "It will free the memory addr = 0x%s len = %u. "
+ "It will make record target get error. "
+ "Do you want to stop the program?"),
+ OUTPUT_REG (tmpulongest, tdep->arg1), (int) len);
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
@@ -655,292 +821,349 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs))
+ return -1;
break;
/* sys_ioperm */
case 101:
break;
+ /* sys_socket */
+ case 500:
+ /* sys_sendto */
+ case 503:
+ /* sys_sendmsg */
+ case 505:
+ /* sys_shutdown */
+ case 507:
+ /* sys_bind */
+ case 508:
+ /* sys_connect */
+ case 501:
+ /* sys_listen */
+ case 509:
+ /* sys_setsockopt */
+ case 513:
+ break;
+
+ /* sys_accept */
+ case 502:
+ /* sys_getsockname */
+ case 510:
+ /* sys_getpeername */
+ case 511:
+ {
+ 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;
+
+ /* sys_recvfrom */
+ case 504:
+ {
+ 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;
+ }
+ /* sys_recv */
+ case 515:
+ {
+ 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;
+
+ /* sys_recvmsg */
+ case 506:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_linux_msghdr (regcache, tdep, tmpulongest))
+ return -1;
+ break;
+
+ /* sys_socketpair */
+ case 512:
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ break;
+
+ /* sys_getsockopt */
+ case 514:
+ 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;
+
/* sys_socketcall */
case 102:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- switch (tmpu32)
- {
- case RECORD_SYS_SOCKET:
- case RECORD_SYS_BIND:
- case RECORD_SYS_CONNECT:
- case RECORD_SYS_LISTEN:
- break;
- case RECORD_SYS_ACCEPT:
- case RECORD_SYS_GETSOCKNAME:
- case RECORD_SYS_GETPEERNAME:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[2], tdep->size_int))
- return -1;
- }
- }
- break;
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
- case RECORD_SYS_SOCKETPAIR:
- {
- uint32_t a[4];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], tdep->size_int))
- return -1;
- }
- }
- break;
- case RECORD_SYS_SEND:
- case RECORD_SYS_SENDTO:
- break;
- case RECORD_SYS_RECV:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_RECVFROM:
- {
- uint32_t a[6];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[5], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SHUTDOWN:
- case RECORD_SYS_SETSOCKOPT:
- break;
- case RECORD_SYS_GETSOCKOPT:
- {
- uint32_t a[5];
- uint32_t av;
+ 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;
+ }
+ if (record_linux_sockaddr (regcache, tdep,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ extract_unsigned_integer
+ (a + tdep->size_ulong,
+ tdep->size_ulong, byte_order)))
+ return -1;
+ }
+ }
+ break;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[4])
- {
- if (target_read_memory
- (a[4], (gdb_byte *) & av, sizeof (av)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[4]),
- (unsigned long)sizeof (av));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], av))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SENDMSG:
- break;
- case RECORD_SYS_RECVMSG:
- {
- uint32_t a[2], i;
- struct record_msghdr
- {
- uint32_t msg_name;
- uint32_t msg_namelen;
- uint32_t msg_iov;
- uint32_t msg_iovlen;
- uint32_t msg_control;
- uint32_t msg_controllen;
- uint32_t msg_flags;
- } rec;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_msghdr))
- return -1;
- if (a[1])
- {
- if (target_read_memory
- (a[1], (gdb_byte *) & rec, sizeof (rec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[1]),
- (unsigned long)sizeof (rec));
- return -1;
- }
- if (record_arch_list_add_mem
- (rec.msg_name, rec.msg_namelen))
- return -1;
- if (record_arch_list_add_mem
- (rec.msg_control, rec.msg_controllen))
- return -1;
- if (rec.msg_iov)
- {
- for (i = 0; i < rec.msg_iovlen; i++)
- {
- if (target_read_memory
- (rec.msg_iov, (gdb_byte *) & iov,
- sizeof (iov)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error "
- "reading memory at "
- "addr = %s "
- "len = %lu.\n",
- paddress (gdbarch,
- rec.msg_iov),
- (unsigned long)sizeof (iov));
- return -1;
- }
- if (record_arch_list_add_mem
- (iov.iov_base, iov.iov_len))
- return -1;
- rec.msg_iov += sizeof (struct record_iovec);
- }
- }
- }
- }
- }
- break;
- default:
- printf_unfiltered (_("Process record and replay target "
- "doesn't support socketcall call 0x%s\n"),
- phex_nz (tmpu32, 4));
- return -1;
- break;
- }
+ 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;
+ }
+ if (record_linux_sockaddr (regcache, tdep,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ extract_unsigned_integer
+ (a + tdep->size_ulong,
+ tdep->size_ulong, byte_order)))
+ 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,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order)))
+ 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;
/* sys_syslog */
@@ -949,16 +1172,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerval))
+ return -1;
break;
/* sys_newstat */
@@ -967,16 +1192,19 @@ record_linux_system_call (int num, struc
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;
+ /* sys_newfstatat */
+ case 540:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_utsname))
+ return -1;
break;
/* sys_iopl */
@@ -991,12 +1219,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_swapoff */
@@ -1005,47 +1235,121 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_sysinfo))
+ return -1;
+ break;
+
+ /* sys_shmget */
+ case 520:
+ /* sys_semget */
+ case 523:
+ /* sys_semop */
+ case 524:
+ /* sys_msgget */
+ case 528:
+ /* sys_shmdt */
+ /* XXX maybe need do some record works wiht sys_shmdt. */
+ case 527:
+ /* sys_msgsnd */
+ case 529:
+ /* sys_semtimedop */
+ case 532:
+ break;
+
+ /* sys_shmat */
+ case 521:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ulong))
+ return -1;
+ break;
+
+ /* sys_shmctl */
+ case 522:
+ 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_semctl */
+ /* XXX sys_semctl 525 still not support. */
+
+ /* sys_msgrcv */
+ case 530:
+ {
+ 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_msgctl */
+ case 531:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_msqid_ds))
+ 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;
- }
+ 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 wiht 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 support. */
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support ipc number %d\n"), (int) tmpulongest);
+ break;
+ }
break;
/* sys_fsync */
@@ -1060,30 +1364,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_timex))
+ return -1;
break;
/* sys_mprotect */
@@ -1092,9 +1396,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -1109,35 +1414,39 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_getpgid */
@@ -1150,15 +1459,15 @@ record_linux_system_call (int num, struc
/* sys_sysfs */
case 135:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (tmpu32 == 2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- /*XXX the size of memory is not very clear. */
- if (record_arch_list_add_mem (tmpu32, 10))
- return -1;
- }
+ 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 ((CORE_ADDR) tmpulongest, 10))
+ return -1;
+ }
break;
/* sys_personality */
@@ -1173,37 +1482,43 @@ record_linux_system_call (int num, struc
/* 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;
+ 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:
{
- 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;
+ 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 */
@@ -1215,36 +1530,40 @@ record_linux_system_call (int num, struc
/* sys_readv */
case 145:
{
- uint32_t vec;
- uint32_t vlen;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec);
- if (vec)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & vlen);
- for (tmpu32 = 0; tmpu32 < vlen; tmpu32++)
- {
- if (target_read_memory
- (vec, (gdb_byte *) & iov, sizeof (struct record_iovec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, vec),
- (unsigned long)sizeof (struct record_iovec));
- return -1;
- }
- if (record_arch_list_add_mem (iov.iov_base, iov.iov_len))
- return -1;
- vec += sizeof (struct record_iovec);
- }
- }
+ 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;
@@ -1270,9 +1589,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
break;
/* sys_sched_setscheduler */
@@ -1291,9 +1610,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timespec))
+ return -1;
break;
/* sys_mremap */
@@ -1304,15 +1624,18 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_vm86 */
@@ -1323,32 +1646,32 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
- }
+ 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;
/* sys_setresgid16 */
@@ -1357,35 +1680,40 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
- }
+ 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;
/* sys_rt_sigreturn */
@@ -1394,36 +1722,39 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_siginfo_t))
+ return -1;
break;
/* sys_rt_sigqueueinfo */
@@ -1434,15 +1765,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_pwrite64 */
@@ -1453,22 +1783,22 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* sys_capset */
@@ -1477,16 +1807,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_off_t))
+ return -1;
break;
/* sys_ni_syscall */
@@ -1499,9 +1831,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_mmap2 */
@@ -1520,9 +1853,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_lchown */
@@ -1543,16 +1877,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_setgroups */
@@ -1565,15 +1899,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_setresgid */
@@ -1582,15 +1916,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_chown */
@@ -1609,9 +1943,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_PAGE_SIZE))
+ return -1;
break;
/* sys_madvise */
@@ -1621,30 +1956,32 @@ record_linux_system_call (int num, struc
/* sys_getdents64 */
case 220:
{
- uint32_t count;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count))
- return -1;
+ 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);
- if (tmpu32 == tdep->fcntl_F_GETLK64)
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest == tdep->fcntl_F_GETLK64)
{
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock64))
- return -1;
- }
- else if (tmpu32 != tdep->fcntl_F_SETLK64
- && tmpu32 != tdep->fcntl_F_SETLKW64)
+ 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;
- }
+ goto sys_fcntl;
+ }
break;
/* sys_ni_syscall */
@@ -1669,15 +2006,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_listxattr */
@@ -1686,15 +2022,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_removexattr */
@@ -1709,9 +2044,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_loff_t))
+ return -1;
break;
/* sys_futex */
@@ -1722,35 +2058,36 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_long))
+ return -1;
break;
/* sys_io_destroy */
@@ -1759,49 +2096,57 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_io_submit */
case 248:
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- int32_t i, nr;
- uint32_t *iocbp;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr);
- iocbp = (uint32_t *) alloca (nr * tdep->size_int);
- if (target_read_memory
- (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %u.\n",
- paddress (gdbarch, tmpu32),
- (int)(nr * tdep->size_int));
- return -1;
- }
- for (i = 0; i < nr; i++)
- {
- if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb))
- return -1;
- }
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_io_event))
+ return -1;
break;
/* sys_fadvise64 */
@@ -1813,28 +2158,27 @@ record_linux_system_call (int num, struc
/* sys_exit_group */
case 252:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall exit_group. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
- }
+ 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;
/* sys_epoll_create */
@@ -1845,16 +2189,15 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_remap_file_pages */
@@ -1865,23 +2208,25 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerspec))
+ return -1;
break;
/* sys_timer_getoverrun */
@@ -1894,32 +2239,36 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs64))
+ return -1;
break;
/* sys_tgkill */
@@ -1936,18 +2285,18 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_set_mempolicy */
@@ -1962,18 +2311,18 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_mq_notify */
@@ -1982,9 +2331,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_mq_attr))
+ return -1;
break;
/* sys_kexec_load */
@@ -1993,12 +2343,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -2011,20 +2363,20 @@ record_linux_system_call (int num, struc
/* 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;
- }
- }
+ 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;
/* sys_ioprio_set */
@@ -2053,9 +2405,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_unlinkat */
@@ -2070,15 +2423,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_fchmodat */
@@ -2089,34 +2441,39 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_unshare */
@@ -2127,22 +2484,24 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_sync_file_range */
@@ -2155,48 +2514,47 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* 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;
- }
+ 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 %u\n"),
- (int)tmpu32);
+ "support syscall number %u\n"), num);
return -1;
break;
}
--- a/linux-record.h
+++ b/linux-record.h
@@ -23,6 +23,7 @@
struct linux_record_tdep
{
/* The size of the type that will be used in a system call. */
+ int size_pointer;
int size__old_kernel_stat;
int size_tms;
int size_loff_t;
@@ -81,7 +82,6 @@ struct linux_record_tdep
int size_itimerspec;
int size_mq_attr;
int size_siginfo;
-
int size_termios;
int size_termios2;
int size_pid_t;
@@ -89,6 +89,8 @@ struct linux_record_tdep
int size_serial_struct;
int size_serial_icounter_struct;
int size_hayes_esp_config;
+ int size_size_t;
+ int size_iovec;
/* The values of the second argument of system call "sys_ioctl". */
int ioctl_TCGETS;
@@ -171,6 +173,7 @@ struct linux_record_tdep
int arg3;
int arg4;
int arg5;
+ int arg6;
};
extern int record_linux_system_call (int num, struct regcache *regcache,
[-- Attachment #2: prec_syscall_64bits.txt --]
[-- Type: text/plain, Size: 119762 bytes --]
---
i386-linux-tdep.c | 26
linux-record.c | 2570 ++++++++++++++++++++++++++++++------------------------
linux-record.h | 5
3 files changed, 1489 insertions(+), 1112 deletions(-)
--- a/i386-linux-tdep.c
+++ b/i386-linux-tdep.c
@@ -369,7 +369,14 @@ i386_linux_intx80_sysenter_record (struc
int ret;
uint32_t tmpu32;
- regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32);
+ regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *) &tmpu32);
+
+ if (tmpu32 > 499)
+ {
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support syscall number %u\n"), tmpu32);
+ return -1;
+ }
ret = record_linux_system_call (tmpu32, regcache,
&i386_linux_record_tdep);
@@ -481,6 +488,8 @@ i386_linux_init_abi (struct gdbarch_info
/* Initialize the i386_linux_record_tdep. */
/* These values are the size of the type that will be used in a system
call. They are obtained from Linux Kernel source. */
+ i386_linux_record_tdep.size_pointer
+ = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
i386_linux_record_tdep.size__old_kernel_stat = 32;
i386_linux_record_tdep.size_tms = 16;
i386_linux_record_tdep.size_loff_t = 8;
@@ -501,9 +510,12 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_statfs = 64;
i386_linux_record_tdep.size_statfs64 = 84;
i386_linux_record_tdep.size_sockaddr = 16;
- i386_linux_record_tdep.size_int = 4;
- i386_linux_record_tdep.size_long = 4;
- i386_linux_record_tdep.size_ulong = 4;
+ i386_linux_record_tdep.size_int
+ = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
+ i386_linux_record_tdep.size_long
+ = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
+ i386_linux_record_tdep.size_ulong
+ = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
i386_linux_record_tdep.size_msghdr = 28;
i386_linux_record_tdep.size_itimerval = 16;
i386_linux_record_tdep.size_stat = 88;
@@ -536,7 +548,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_io_event = 32;
i386_linux_record_tdep.size_iocb = 64;
i386_linux_record_tdep.size_epoll_event = 12;
- i386_linux_record_tdep.size_itimerspec = i386_linux_record_tdep.size_timespec * 2;
+ i386_linux_record_tdep.size_itimerspec
+ = i386_linux_record_tdep.size_timespec * 2;
i386_linux_record_tdep.size_mq_attr = 32;
i386_linux_record_tdep.size_siginfo = 128;
i386_linux_record_tdep.size_termios = 36;
@@ -546,6 +559,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_serial_struct = 60;
i386_linux_record_tdep.size_serial_icounter_struct = 80;
i386_linux_record_tdep.size_hayes_esp_config = 12;
+ i386_linux_record_tdep.size_size_t = 4;
+ i386_linux_record_tdep.size_iovec = 8;
/* These values are the second argument of system call "sys_ioctl".
They are obtained from Linux Kernel source. */
@@ -627,6 +642,7 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.arg3 = I386_EDX_REGNUM;
i386_linux_record_tdep.arg4 = I386_ESI_REGNUM;
i386_linux_record_tdep.arg5 = I386_EDI_REGNUM;
+ i386_linux_record_tdep.arg6 = I386_EBP_REGNUM;
tdep->i386_intx80_record = i386_linux_intx80_sysenter_record;
tdep->i386_sysenter_record = i386_linux_intx80_sysenter_record;
--- a/linux-record.c
+++ b/linux-record.c
@@ -19,6 +19,7 @@
#include "defs.h"
#include "target.h"
+#include "gdbtypes.h"
#include "regcache.h"
#include "record.h"
#include "linux-record.h"
@@ -80,6 +81,134 @@
#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
@@ -94,10 +223,13 @@
int
record_linux_system_call (int num, struct regcache *regcache,
- struct linux_record_tdep *tdep)
+ struct linux_record_tdep *tdep)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
- uint32_t tmpu32;
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+ ULONGEST tmpulongest;
+ CORE_ADDR tmpaddr;
+ int tmpint;
switch (num)
{
@@ -108,15 +240,14 @@ record_linux_system_call (int num, struc
/* sys_exit */
case 1:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_ ("The next instruction is syscall exit. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
@@ -127,11 +258,11 @@ record_linux_system_call (int num, struc
/* sys_read */
case 3:
{
- uint32_t addr, count;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (addr, count))
- return -1;
+ 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;
@@ -171,9 +302,10 @@ record_linux_system_call (int num, struc
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;
+ 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;
/* sys_lseek */
@@ -194,16 +326,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_alarm */
@@ -240,9 +372,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_tms))
+ return -1;
break;
/* sys_ni_syscall */
@@ -270,149 +402,172 @@ record_linux_system_call (int num, struc
/* sys_ioctl */
case 54:
/* XXX Need to add a lot of support of other ioctl requests. */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (tmpu32 == tdep->ioctl_FIOCLEX || tmpu32 == tdep->ioctl_FIONCLEX
- || tmpu32 == tdep->ioctl_FIONBIO || tmpu32 == tdep->ioctl_FIOASYNC
- || tmpu32 == tdep->ioctl_TCSETS || tmpu32 == tdep->ioctl_TCSETSW
- || tmpu32 == tdep->ioctl_TCSETSF || tmpu32 == tdep->ioctl_TCSETA
- || tmpu32 == tdep->ioctl_TCSETAW || tmpu32 == tdep->ioctl_TCSETAF
- || tmpu32 == tdep->ioctl_TCSBRK || tmpu32 == tdep->ioctl_TCXONC
- || tmpu32 == tdep->ioctl_TCFLSH || tmpu32 == tdep->ioctl_TIOCEXCL
- || tmpu32 == tdep->ioctl_TIOCNXCL
- || tmpu32 == tdep->ioctl_TIOCSCTTY
- || tmpu32 == tdep->ioctl_TIOCSPGRP || tmpu32 == tdep->ioctl_TIOCSTI
- || tmpu32 == tdep->ioctl_TIOCSWINSZ
- || tmpu32 == tdep->ioctl_TIOCMBIS || tmpu32 == tdep->ioctl_TIOCMBIC
- || tmpu32 == tdep->ioctl_TIOCMSET
- || tmpu32 == tdep->ioctl_TIOCSSOFTCAR
- || tmpu32 == tdep->ioctl_TIOCCONS
- || tmpu32 == tdep->ioctl_TIOCSSERIAL
- || tmpu32 == tdep->ioctl_TIOCPKT || tmpu32 == tdep->ioctl_TIOCNOTTY
- || tmpu32 == tdep->ioctl_TIOCSETD || tmpu32 == tdep->ioctl_TCSBRKP
- || tmpu32 == tdep->ioctl_TIOCTTYGSTRUCT
- || tmpu32 == tdep->ioctl_TIOCSBRK || tmpu32 == tdep->ioctl_TIOCCBRK
- || tmpu32 == tdep->ioctl_TCSETS2 || tmpu32 == tdep->ioctl_TCSETSW2
- || tmpu32 == tdep->ioctl_TCSETSF2
- || tmpu32 == tdep->ioctl_TIOCSPTLCK
- || tmpu32 == tdep->ioctl_TIOCSERCONFIG
- || tmpu32 == tdep->ioctl_TIOCSERGWILD
- || tmpu32 == tdep->ioctl_TIOCSERSWILD
- || tmpu32 == tdep->ioctl_TIOCSLCKTRMIOS
- || tmpu32 == tdep->ioctl_TIOCSERGETMULTI
- || tmpu32 == tdep->ioctl_TIOCSERSETMULTI
- || tmpu32 == tdep->ioctl_TIOCMIWAIT
- || tmpu32 == tdep->ioctl_TIOCSHAYESESP)
- {
- /* Nothing to do. */
- }
- else if (tmpu32 == tdep->ioctl_TCGETS || tmpu32 == tdep->ioctl_TCGETA
- || tmpu32 == tdep->ioctl_TIOCGLCKTRMIOS)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGPGRP
- || tmpu32 == tdep->ioctl_TIOCGSID)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCOUTQ
- || tmpu32 == tdep->ioctl_TIOCMGET
- || tmpu32 == tdep->ioctl_TIOCGSOFTCAR
- || tmpu32 == tdep->ioctl_FIONREAD
- || tmpu32 == tdep->ioctl_TIOCINQ
- || tmpu32 == tdep->ioctl_TIOCGETD
- || tmpu32 == tdep->ioctl_TIOCGPTN
- || tmpu32 == tdep->ioctl_TIOCSERGETLSR)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_int))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGWINSZ)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_winsize))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCLINUX)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
+ 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 affect a char size memory. */
- if (record_arch_list_add_mem (tmpu32, 1))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGSERIAL)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TCGETS2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios2))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_FIOQSIZE)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGICOUNT)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem
- (tmpu32, tdep->size_serial_icounter_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGHAYESESP)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT)
- {
- printf_unfiltered (_("Process record and replay target doesn't "
- "support ioctl request TIOCSERGSTRUCT\n"));
- return 1;
- }
+ 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%s.\n"),
- phex_nz (tmpu32, 4));
- 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:
/* XXX */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
sys_fcntl:
- if (tmpu32 == tdep->fcntl_F_GETLK)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock))
- return -1;
- }
+ 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;
/* sys_ni_syscall */
@@ -425,9 +580,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_oldold_utsname))
+ return -1;
break;
/* sys_umask */
@@ -438,9 +594,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ustat))
+ return -1;
break;
/* sys_dup2 */
@@ -455,9 +612,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sgetmask */
@@ -474,9 +632,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sethostname */
@@ -487,26 +646,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_getrusage */
case 77:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_rusage))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rusage))
+ return -1;
break;
/* sys_gettimeofday */
case 78:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timeval))
- return -1;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timezone))
- return -1;
+ 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_settimeofday */
@@ -515,53 +678,56 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_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;
+ 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;
/* old_select */
case 82:
{
- struct sel_arg_struct
- {
- CORE_ADDR n;
- CORE_ADDR inp;
- CORE_ADDR outp;
- CORE_ADDR exp;
- CORE_ADDR tvp;
- } sel;
+ struct sel_arg_struct
+ {
+ CORE_ADDR n;
+ CORE_ADDR inp;
+ CORE_ADDR outp;
+ CORE_ADDR exp;
+ CORE_ADDR tvp;
+ } sel;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (sel));
- return -1;
- }
- if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval))
- return -1;
- }
+ 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;
@@ -572,12 +738,12 @@ record_linux_system_call (int num, struc
/* sys_readlink */
case 85:
{
- uint32_t len;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len);
- if (record_arch_list_add_mem (tmpu32, len))
- return -1;
+ 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;
@@ -590,23 +756,24 @@ record_linux_system_call (int num, struc
/* sys_reboot */
case 88:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall reboot. "
- "It will restart the computer. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ int q;
+ target_terminal_ours ();
+ q =
+ yquery (_("The next instruction is syscall reboot. "
+ "It will restart the computer. "
+ "Do you want to stop the program?"));
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
/* old_readdir */
case 89:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_dirent))
+ return -1;
break;
/* old_mmap */
@@ -616,22 +783,21 @@ record_linux_system_call (int num, struc
/* sys_munmap */
case 91:
{
- int q;
- uint32_t len;
+ int q;
+ ULONGEST len;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len);
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall munmap. "
- "It will free the memory addr = %s len = %u. "
- "It will make record target get error. "
- "Do you want to stop the program?"),
- paddress (gdbarch, tmpu32), (int)len);
- target_terminal_inferior ();
- if (q)
- return 1;
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
+ target_terminal_ours ();
+ q = yquery (_("The next instruction is syscall munmap. "
+ "It will free the memory addr = 0x%s len = %u. "
+ "It will make record target get error. "
+ "Do you want to stop the program?"),
+ OUTPUT_REG (tmpulongest, tdep->arg1), (int) len);
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
@@ -655,292 +821,349 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs))
+ return -1;
break;
/* sys_ioperm */
case 101:
break;
+ /* sys_socket */
+ case 500:
+ /* sys_sendto */
+ case 503:
+ /* sys_sendmsg */
+ case 505:
+ /* sys_shutdown */
+ case 507:
+ /* sys_bind */
+ case 508:
+ /* sys_connect */
+ case 501:
+ /* sys_listen */
+ case 509:
+ /* sys_setsockopt */
+ case 513:
+ break;
+
+ /* sys_accept */
+ case 502:
+ /* sys_getsockname */
+ case 510:
+ /* sys_getpeername */
+ case 511:
+ {
+ 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;
+
+ /* sys_recvfrom */
+ case 504:
+ {
+ 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;
+ }
+ /* sys_recv */
+ case 515:
+ {
+ 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;
+
+ /* sys_recvmsg */
+ case 506:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_linux_msghdr (regcache, tdep, tmpulongest))
+ return -1;
+ break;
+
+ /* sys_socketpair */
+ case 512:
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ break;
+
+ /* sys_getsockopt */
+ case 514:
+ 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;
+
/* sys_socketcall */
case 102:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- switch (tmpu32)
- {
- case RECORD_SYS_SOCKET:
- case RECORD_SYS_BIND:
- case RECORD_SYS_CONNECT:
- case RECORD_SYS_LISTEN:
- break;
- case RECORD_SYS_ACCEPT:
- case RECORD_SYS_GETSOCKNAME:
- case RECORD_SYS_GETPEERNAME:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[2], tdep->size_int))
- return -1;
- }
- }
- break;
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
- case RECORD_SYS_SOCKETPAIR:
- {
- uint32_t a[4];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], tdep->size_int))
- return -1;
- }
- }
- break;
- case RECORD_SYS_SEND:
- case RECORD_SYS_SENDTO:
- break;
- case RECORD_SYS_RECV:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_RECVFROM:
- {
- uint32_t a[6];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[5], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SHUTDOWN:
- case RECORD_SYS_SETSOCKOPT:
- break;
- case RECORD_SYS_GETSOCKOPT:
- {
- uint32_t a[5];
- uint32_t av;
+ 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;
+ }
+ if (record_linux_sockaddr (regcache, tdep,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ extract_unsigned_integer
+ (a + tdep->size_ulong,
+ tdep->size_ulong, byte_order)))
+ return -1;
+ }
+ }
+ break;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[4])
- {
- if (target_read_memory
- (a[4], (gdb_byte *) & av, sizeof (av)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[4]),
- (unsigned long)sizeof (av));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], av))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SENDMSG:
- break;
- case RECORD_SYS_RECVMSG:
- {
- uint32_t a[2], i;
- struct record_msghdr
- {
- uint32_t msg_name;
- uint32_t msg_namelen;
- uint32_t msg_iov;
- uint32_t msg_iovlen;
- uint32_t msg_control;
- uint32_t msg_controllen;
- uint32_t msg_flags;
- } rec;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_msghdr))
- return -1;
- if (a[1])
- {
- if (target_read_memory
- (a[1], (gdb_byte *) & rec, sizeof (rec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[1]),
- (unsigned long)sizeof (rec));
- return -1;
- }
- if (record_arch_list_add_mem
- (rec.msg_name, rec.msg_namelen))
- return -1;
- if (record_arch_list_add_mem
- (rec.msg_control, rec.msg_controllen))
- return -1;
- if (rec.msg_iov)
- {
- for (i = 0; i < rec.msg_iovlen; i++)
- {
- if (target_read_memory
- (rec.msg_iov, (gdb_byte *) & iov,
- sizeof (iov)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error "
- "reading memory at "
- "addr = %s "
- "len = %lu.\n",
- paddress (gdbarch,
- rec.msg_iov),
- (unsigned long)sizeof (iov));
- return -1;
- }
- if (record_arch_list_add_mem
- (iov.iov_base, iov.iov_len))
- return -1;
- rec.msg_iov += sizeof (struct record_iovec);
- }
- }
- }
- }
- }
- break;
- default:
- printf_unfiltered (_("Process record and replay target "
- "doesn't support socketcall call 0x%s\n"),
- phex_nz (tmpu32, 4));
- return -1;
- break;
- }
+ 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;
+ }
+ if (record_linux_sockaddr (regcache, tdep,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order),
+ extract_unsigned_integer
+ (a + tdep->size_ulong,
+ tdep->size_ulong, byte_order)))
+ 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,
+ extract_unsigned_integer
+ (a, tdep->size_ulong, byte_order)))
+ 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;
/* sys_syslog */
@@ -949,16 +1172,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerval))
+ return -1;
break;
/* sys_newstat */
@@ -967,16 +1192,19 @@ record_linux_system_call (int num, struc
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;
+ /* sys_newfstatat */
+ case 540:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_utsname))
+ return -1;
break;
/* sys_iopl */
@@ -991,12 +1219,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_swapoff */
@@ -1005,47 +1235,121 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_sysinfo))
+ return -1;
+ break;
+
+ /* sys_shmget */
+ case 520:
+ /* sys_semget */
+ case 523:
+ /* sys_semop */
+ case 524:
+ /* sys_msgget */
+ case 528:
+ /* sys_shmdt */
+ /* XXX maybe need do some record works wiht sys_shmdt. */
+ case 527:
+ /* sys_msgsnd */
+ case 529:
+ /* sys_semtimedop */
+ case 532:
+ break;
+
+ /* sys_shmat */
+ case 521:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ulong))
+ return -1;
+ break;
+
+ /* sys_shmctl */
+ case 522:
+ 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_semctl */
+ /* XXX sys_semctl 525 still not support. */
+
+ /* sys_msgrcv */
+ case 530:
+ {
+ 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_msgctl */
+ case 531:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_msqid_ds))
+ 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;
- }
+ 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 wiht 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 support. */
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support ipc number %d\n"), (int) tmpulongest);
+ break;
+ }
break;
/* sys_fsync */
@@ -1060,30 +1364,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_timex))
+ return -1;
break;
/* sys_mprotect */
@@ -1092,9 +1396,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -1109,35 +1414,39 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_getpgid */
@@ -1150,15 +1459,15 @@ record_linux_system_call (int num, struc
/* sys_sysfs */
case 135:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (tmpu32 == 2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- /*XXX the size of memory is not very clear. */
- if (record_arch_list_add_mem (tmpu32, 10))
- return -1;
- }
+ 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 ((CORE_ADDR) tmpulongest, 10))
+ return -1;
+ }
break;
/* sys_personality */
@@ -1173,37 +1482,43 @@ record_linux_system_call (int num, struc
/* 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;
+ 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:
{
- 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;
+ 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 */
@@ -1215,36 +1530,40 @@ record_linux_system_call (int num, struc
/* sys_readv */
case 145:
{
- uint32_t vec;
- uint32_t vlen;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec);
- if (vec)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & vlen);
- for (tmpu32 = 0; tmpu32 < vlen; tmpu32++)
- {
- if (target_read_memory
- (vec, (gdb_byte *) & iov, sizeof (struct record_iovec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, vec),
- (unsigned long)sizeof (struct record_iovec));
- return -1;
- }
- if (record_arch_list_add_mem (iov.iov_base, iov.iov_len))
- return -1;
- vec += sizeof (struct record_iovec);
- }
- }
+ 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;
@@ -1270,9 +1589,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
break;
/* sys_sched_setscheduler */
@@ -1291,9 +1610,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timespec))
+ return -1;
break;
/* sys_mremap */
@@ -1304,15 +1624,18 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_vm86 */
@@ -1323,32 +1646,32 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
- }
+ 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;
/* sys_setresgid16 */
@@ -1357,35 +1680,40 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
- }
+ 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;
/* sys_rt_sigreturn */
@@ -1394,36 +1722,39 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_siginfo_t))
+ return -1;
break;
/* sys_rt_sigqueueinfo */
@@ -1434,15 +1765,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_pwrite64 */
@@ -1453,22 +1783,22 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* sys_capset */
@@ -1477,16 +1807,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_off_t))
+ return -1;
break;
/* sys_ni_syscall */
@@ -1499,9 +1831,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_mmap2 */
@@ -1520,9 +1853,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_lchown */
@@ -1543,16 +1877,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_setgroups */
@@ -1565,15 +1899,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_setresgid */
@@ -1582,15 +1916,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_chown */
@@ -1609,9 +1943,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_PAGE_SIZE))
+ return -1;
break;
/* sys_madvise */
@@ -1621,30 +1956,32 @@ record_linux_system_call (int num, struc
/* sys_getdents64 */
case 220:
{
- uint32_t count;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count))
- return -1;
+ 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);
- if (tmpu32 == tdep->fcntl_F_GETLK64)
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest == tdep->fcntl_F_GETLK64)
{
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock64))
- return -1;
- }
- else if (tmpu32 != tdep->fcntl_F_SETLK64
- && tmpu32 != tdep->fcntl_F_SETLKW64)
+ 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;
- }
+ goto sys_fcntl;
+ }
break;
/* sys_ni_syscall */
@@ -1669,15 +2006,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_listxattr */
@@ -1686,15 +2022,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_removexattr */
@@ -1709,9 +2044,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_loff_t))
+ return -1;
break;
/* sys_futex */
@@ -1722,35 +2058,36 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_long))
+ return -1;
break;
/* sys_io_destroy */
@@ -1759,49 +2096,57 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_io_submit */
case 248:
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- int32_t i, nr;
- uint32_t *iocbp;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr);
- iocbp = (uint32_t *) alloca (nr * tdep->size_int);
- if (target_read_memory
- (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %u.\n",
- paddress (gdbarch, tmpu32),
- (int)(nr * tdep->size_int));
- return -1;
- }
- for (i = 0; i < nr; i++)
- {
- if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb))
- return -1;
- }
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_io_event))
+ return -1;
break;
/* sys_fadvise64 */
@@ -1813,28 +2158,27 @@ record_linux_system_call (int num, struc
/* sys_exit_group */
case 252:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall exit_group. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
- }
+ 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;
/* sys_epoll_create */
@@ -1845,16 +2189,15 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_remap_file_pages */
@@ -1865,23 +2208,25 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerspec))
+ return -1;
break;
/* sys_timer_getoverrun */
@@ -1894,32 +2239,36 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs64))
+ return -1;
break;
/* sys_tgkill */
@@ -1936,18 +2285,18 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_set_mempolicy */
@@ -1962,18 +2311,18 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_mq_notify */
@@ -1982,9 +2331,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_mq_attr))
+ return -1;
break;
/* sys_kexec_load */
@@ -1993,12 +2343,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -2011,20 +2363,20 @@ record_linux_system_call (int num, struc
/* 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;
- }
- }
+ 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;
/* sys_ioprio_set */
@@ -2053,9 +2405,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_unlinkat */
@@ -2070,15 +2423,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_fchmodat */
@@ -2089,34 +2441,39 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_unshare */
@@ -2127,22 +2484,24 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_sync_file_range */
@@ -2155,48 +2514,47 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* 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;
- }
+ 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 %u\n"),
- (int)tmpu32);
+ "support syscall number %u\n"), num);
return -1;
break;
}
--- a/linux-record.h
+++ b/linux-record.h
@@ -23,6 +23,7 @@
struct linux_record_tdep
{
/* The size of the type that will be used in a system call. */
+ int size_pointer;
int size__old_kernel_stat;
int size_tms;
int size_loff_t;
@@ -81,7 +82,6 @@ struct linux_record_tdep
int size_itimerspec;
int size_mq_attr;
int size_siginfo;
-
int size_termios;
int size_termios2;
int size_pid_t;
@@ -89,6 +89,8 @@ struct linux_record_tdep
int size_serial_struct;
int size_serial_icounter_struct;
int size_hayes_esp_config;
+ int size_size_t;
+ int size_iovec;
/* The values of the second argument of system call "sys_ioctl". */
int ioctl_TCGETS;
@@ -171,6 +173,7 @@ struct linux_record_tdep
int arg3;
int arg4;
int arg5;
+ int arg6;
};
extern int record_linux_system_call (int num, struct regcache *regcache,
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3
2009-07-19 17:39 ` Hui Zhu
@ 2009-07-26 7:46 ` Michael Snyder
2009-07-28 1:44 ` Hui Zhu
0 siblings, 1 reply; 8+ messages in thread
From: Michael Snyder @ 2009-07-26 7:46 UTC (permalink / raw)
To: Hui Zhu; +Cc: Mark Kettenis, gdb-patches ml
Hui, I have just a few more small issues with this patch:
> linux-record.c | 2570 ++++++++++++++++++++++++++++++------------------------
[...]
> + 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);
> + int addrlen;
> + gdb_byte *addrlenp;
> + 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;
> + }
> + if (record_linux_sockaddr (regcache, tdep,
> + extract_unsigned_integer
> + (a, tdep->size_ulong, byte_order),
> + extract_unsigned_integer
> + (a + tdep->size_ulong,
> + tdep->size_ulong, byte_order)))
Could you use a couple of temporary variables for
extract_unsigned_integer here?
> + case RECORD_SYS_RECVFROM:
> + regcache_raw_read_unsigned (regcache, tdep->arg2,
> + &tmpulongest);
> + if (tmpulongest)
> + {
> + gdb_byte *a = alloca (tdep->size_ulong * 2);
> + int addrlen;
> + gdb_byte *addrlenp;
>
> + 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;
> + }
> + if (record_linux_sockaddr (regcache, tdep,
> + extract_unsigned_integer
> + (a, tdep->size_ulong, byte_order),
> + extract_unsigned_integer
> + (a + tdep->size_ulong,
> + tdep->size_ulong, byte_order)))
And here?
> + 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,
> + extract_unsigned_integer
> + (a, tdep->size_ulong, byte_order)))
And here?
> + case 528:
> + /* sys_shmdt */
> + /* XXX maybe need do some record works wiht sys_shmdt. */
"with".
> + case RECORD_SEMOP:
> + case RECORD_SEMGET:
> + case RECORD_SEMTIMEDOP:
> + case RECORD_MSGSND:
> + case RECORD_MSGGET:
> + /* XXX maybe need do some record works wiht RECORD_SHMDT. */
"with".
That's all I've got! After those, I'm good.
Mark? How about you?
Michael
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3
2009-07-26 7:46 ` Michael Snyder
@ 2009-07-28 1:44 ` Hui Zhu
2009-08-03 5:40 ` Hui Zhu
0 siblings, 1 reply; 8+ messages in thread
From: Hui Zhu @ 2009-07-28 1:44 UTC (permalink / raw)
To: Michael Snyder, Mark Kettenis; +Cc: gdb-patches ml
[-- Attachment #1: Type: text/plain, Size: 128204 bytes --]
On Sun, Jul 26, 2009 at 06:14, Michael Snyder<msnyder@vmware.com> wrote:
> Hui, I have just a few more small issues with this patch:
>
>
>> linux-record.c | 2570
>> ++++++++++++++++++++++++++++++------------------------
>
> [...]
>>
>> + 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);
>> + int addrlen;
>> + gdb_byte *addrlenp;
>
>> + 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;
>> + }
>> + if (record_linux_sockaddr (regcache, tdep,
>> + extract_unsigned_integer
>> + (a, tdep->size_ulong,
>> byte_order),
>> + extract_unsigned_integer
>> + (a + tdep->size_ulong,
>> + tdep->size_ulong,
>> byte_order)))
>
> Could you use a couple of temporary variables for
> extract_unsigned_integer here?
>
>
>> + case RECORD_SYS_RECVFROM:
>> + regcache_raw_read_unsigned (regcache, tdep->arg2,
>> + &tmpulongest);
>> + if (tmpulongest)
>> + {
>> + gdb_byte *a = alloca (tdep->size_ulong * 2);
>> + int addrlen;
>> + gdb_byte *addrlenp;
>>
>
>> + 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;
>> + }
>> + if (record_linux_sockaddr (regcache, tdep,
>> + extract_unsigned_integer
>> + (a, tdep->size_ulong,
>> byte_order),
>> + extract_unsigned_integer
>> + (a + tdep->size_ulong,
>> + tdep->size_ulong,
>> byte_order)))
>
> And here?
>
>
>> + 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,
>> + extract_unsigned_integer
>> + (a, tdep->size_ulong,
>> byte_order)))
>
> And here?
>
>
>> + case 528:
>> + /* sys_shmdt */
>> + /* XXX maybe need do some record works wiht sys_shmdt. */
>
> "with".
>
>> + case RECORD_SEMOP:
>> + case RECORD_SEMGET:
>> + case RECORD_SEMTIMEDOP:
>> + case RECORD_MSGSND:
>> + case RECORD_MSGGET:
>> + /* XXX maybe need do some record works wiht RECORD_SHMDT. */
>
> "with".
>
Thanks Michael.
I fixed all of them.
Hi Mark, Could you please help me review it?
Thanks,
Hui
---
i386-linux-tdep.c | 26
linux-record.c | 2569 ++++++++++++++++++++++++++++++------------------------
linux-record.h | 5
3 files changed, 1488 insertions(+), 1112 deletions(-)
--- a/i386-linux-tdep.c
+++ b/i386-linux-tdep.c
@@ -369,7 +369,14 @@ i386_linux_intx80_sysenter_record (struc
int ret;
uint32_t tmpu32;
- regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32);
+ regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *) &tmpu32);
+
+ if (tmpu32 > 499)
+ {
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support syscall number %u\n"), tmpu32);
+ return -1;
+ }
ret = record_linux_system_call (tmpu32, regcache,
&i386_linux_record_tdep);
@@ -481,6 +488,8 @@ i386_linux_init_abi (struct gdbarch_info
/* Initialize the i386_linux_record_tdep. */
/* These values are the size of the type that will be used in a system
call. They are obtained from Linux Kernel source. */
+ i386_linux_record_tdep.size_pointer
+ = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
i386_linux_record_tdep.size__old_kernel_stat = 32;
i386_linux_record_tdep.size_tms = 16;
i386_linux_record_tdep.size_loff_t = 8;
@@ -501,9 +510,12 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_statfs = 64;
i386_linux_record_tdep.size_statfs64 = 84;
i386_linux_record_tdep.size_sockaddr = 16;
- i386_linux_record_tdep.size_int = 4;
- i386_linux_record_tdep.size_long = 4;
- i386_linux_record_tdep.size_ulong = 4;
+ i386_linux_record_tdep.size_int
+ = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
+ i386_linux_record_tdep.size_long
+ = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
+ i386_linux_record_tdep.size_ulong
+ = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
i386_linux_record_tdep.size_msghdr = 28;
i386_linux_record_tdep.size_itimerval = 16;
i386_linux_record_tdep.size_stat = 88;
@@ -536,7 +548,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_io_event = 32;
i386_linux_record_tdep.size_iocb = 64;
i386_linux_record_tdep.size_epoll_event = 12;
- i386_linux_record_tdep.size_itimerspec =
i386_linux_record_tdep.size_timespec * 2;
+ i386_linux_record_tdep.size_itimerspec
+ = i386_linux_record_tdep.size_timespec * 2;
i386_linux_record_tdep.size_mq_attr = 32;
i386_linux_record_tdep.size_siginfo = 128;
i386_linux_record_tdep.size_termios = 36;
@@ -546,6 +559,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_serial_struct = 60;
i386_linux_record_tdep.size_serial_icounter_struct = 80;
i386_linux_record_tdep.size_hayes_esp_config = 12;
+ i386_linux_record_tdep.size_size_t = 4;
+ i386_linux_record_tdep.size_iovec = 8;
/* These values are the second argument of system call "sys_ioctl".
They are obtained from Linux Kernel source. */
@@ -627,6 +642,7 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.arg3 = I386_EDX_REGNUM;
i386_linux_record_tdep.arg4 = I386_ESI_REGNUM;
i386_linux_record_tdep.arg5 = I386_EDI_REGNUM;
+ i386_linux_record_tdep.arg6 = I386_EBP_REGNUM;
tdep->i386_intx80_record = i386_linux_intx80_sysenter_record;
tdep->i386_sysenter_record = i386_linux_intx80_sysenter_record;
--- a/linux-record.c
+++ b/linux-record.c
@@ -19,6 +19,7 @@
#include "defs.h"
#include "target.h"
+#include "gdbtypes.h"
#include "regcache.h"
#include "record.h"
#include "linux-record.h"
@@ -80,6 +81,134 @@
#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
@@ -94,10 +223,13 @@
int
record_linux_system_call (int num, struct regcache *regcache,
- struct linux_record_tdep *tdep)
+ struct linux_record_tdep *tdep)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
- uint32_t tmpu32;
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+ ULONGEST tmpulongest;
+ CORE_ADDR tmpaddr;
+ int tmpint;
switch (num)
{
@@ -108,15 +240,14 @@ record_linux_system_call (int num, struc
/* sys_exit */
case 1:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_ ("The next instruction is syscall exit. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
@@ -127,11 +258,11 @@ record_linux_system_call (int num, struc
/* sys_read */
case 3:
{
- uint32_t addr, count;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (addr, count))
- return -1;
+ 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;
@@ -171,9 +302,10 @@ record_linux_system_call (int num, struc
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;
+ 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;
/* sys_lseek */
@@ -194,16 +326,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_alarm */
@@ -240,9 +372,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_tms))
+ return -1;
break;
/* sys_ni_syscall */
@@ -270,149 +402,172 @@ record_linux_system_call (int num, struc
/* sys_ioctl */
case 54:
/* XXX Need to add a lot of support of other ioctl requests. */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (tmpu32 == tdep->ioctl_FIOCLEX || tmpu32 == tdep->ioctl_FIONCLEX
- || tmpu32 == tdep->ioctl_FIONBIO || tmpu32 == tdep->ioctl_FIOASYNC
- || tmpu32 == tdep->ioctl_TCSETS || tmpu32 == tdep->ioctl_TCSETSW
- || tmpu32 == tdep->ioctl_TCSETSF || tmpu32 == tdep->ioctl_TCSETA
- || tmpu32 == tdep->ioctl_TCSETAW || tmpu32 == tdep->ioctl_TCSETAF
- || tmpu32 == tdep->ioctl_TCSBRK || tmpu32 == tdep->ioctl_TCXONC
- || tmpu32 == tdep->ioctl_TCFLSH || tmpu32 == tdep->ioctl_TIOCEXCL
- || tmpu32 == tdep->ioctl_TIOCNXCL
- || tmpu32 == tdep->ioctl_TIOCSCTTY
- || tmpu32 == tdep->ioctl_TIOCSPGRP || tmpu32 == tdep->ioctl_TIOCSTI
- || tmpu32 == tdep->ioctl_TIOCSWINSZ
- || tmpu32 == tdep->ioctl_TIOCMBIS || tmpu32 == tdep->ioctl_TIOCMBIC
- || tmpu32 == tdep->ioctl_TIOCMSET
- || tmpu32 == tdep->ioctl_TIOCSSOFTCAR
- || tmpu32 == tdep->ioctl_TIOCCONS
- || tmpu32 == tdep->ioctl_TIOCSSERIAL
- || tmpu32 == tdep->ioctl_TIOCPKT || tmpu32 == tdep->ioctl_TIOCNOTTY
- || tmpu32 == tdep->ioctl_TIOCSETD || tmpu32 == tdep->ioctl_TCSBRKP
- || tmpu32 == tdep->ioctl_TIOCTTYGSTRUCT
- || tmpu32 == tdep->ioctl_TIOCSBRK || tmpu32 == tdep->ioctl_TIOCCBRK
- || tmpu32 == tdep->ioctl_TCSETS2 || tmpu32 == tdep->ioctl_TCSETSW2
- || tmpu32 == tdep->ioctl_TCSETSF2
- || tmpu32 == tdep->ioctl_TIOCSPTLCK
- || tmpu32 == tdep->ioctl_TIOCSERCONFIG
- || tmpu32 == tdep->ioctl_TIOCSERGWILD
- || tmpu32 == tdep->ioctl_TIOCSERSWILD
- || tmpu32 == tdep->ioctl_TIOCSLCKTRMIOS
- || tmpu32 == tdep->ioctl_TIOCSERGETMULTI
- || tmpu32 == tdep->ioctl_TIOCSERSETMULTI
- || tmpu32 == tdep->ioctl_TIOCMIWAIT
- || tmpu32 == tdep->ioctl_TIOCSHAYESESP)
- {
- /* Nothing to do. */
- }
- else if (tmpu32 == tdep->ioctl_TCGETS || tmpu32 == tdep->ioctl_TCGETA
- || tmpu32 == tdep->ioctl_TIOCGLCKTRMIOS)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGPGRP
- || tmpu32 == tdep->ioctl_TIOCGSID)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCOUTQ
- || tmpu32 == tdep->ioctl_TIOCMGET
- || tmpu32 == tdep->ioctl_TIOCGSOFTCAR
- || tmpu32 == tdep->ioctl_FIONREAD
- || tmpu32 == tdep->ioctl_TIOCINQ
- || tmpu32 == tdep->ioctl_TIOCGETD
- || tmpu32 == tdep->ioctl_TIOCGPTN
- || tmpu32 == tdep->ioctl_TIOCSERGETLSR)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_int))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGWINSZ)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_winsize))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCLINUX)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
+ 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 affect a char size memory. */
- if (record_arch_list_add_mem (tmpu32, 1))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGSERIAL)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TCGETS2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios2))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_FIOQSIZE)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGICOUNT)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem
- (tmpu32, tdep->size_serial_icounter_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGHAYESESP)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT)
- {
- printf_unfiltered (_("Process record and replay target doesn't "
- "support ioctl request TIOCSERGSTRUCT\n"));
- return 1;
- }
+ 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%s.\n"),
- phex_nz (tmpu32, 4));
- 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:
/* XXX */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
sys_fcntl:
- if (tmpu32 == tdep->fcntl_F_GETLK)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock))
- return -1;
- }
+ 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;
/* sys_ni_syscall */
@@ -425,9 +580,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_oldold_utsname))
+ return -1;
break;
/* sys_umask */
@@ -438,9 +594,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ustat))
+ return -1;
break;
/* sys_dup2 */
@@ -455,9 +612,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sgetmask */
@@ -474,9 +632,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sethostname */
@@ -487,26 +646,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_getrusage */
case 77:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_rusage))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rusage))
+ return -1;
break;
/* sys_gettimeofday */
case 78:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timeval))
- return -1;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timezone))
- return -1;
+ 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_settimeofday */
@@ -515,53 +678,56 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_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;
+ 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;
/* old_select */
case 82:
{
- struct sel_arg_struct
- {
- CORE_ADDR n;
- CORE_ADDR inp;
- CORE_ADDR outp;
- CORE_ADDR exp;
- CORE_ADDR tvp;
- } sel;
+ struct sel_arg_struct
+ {
+ CORE_ADDR n;
+ CORE_ADDR inp;
+ CORE_ADDR outp;
+ CORE_ADDR exp;
+ CORE_ADDR tvp;
+ } sel;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (sel));
- return -1;
- }
- if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval))
- return -1;
- }
+ 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;
@@ -572,12 +738,12 @@ record_linux_system_call (int num, struc
/* sys_readlink */
case 85:
{
- uint32_t len;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len);
- if (record_arch_list_add_mem (tmpu32, len))
- return -1;
+ 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;
@@ -590,23 +756,24 @@ record_linux_system_call (int num, struc
/* sys_reboot */
case 88:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall reboot. "
- "It will restart the computer. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ int q;
+ target_terminal_ours ();
+ q =
+ yquery (_("The next instruction is syscall reboot. "
+ "It will restart the computer. "
+ "Do you want to stop the program?"));
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
/* old_readdir */
case 89:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_dirent))
+ return -1;
break;
/* old_mmap */
@@ -616,22 +783,21 @@ record_linux_system_call (int num, struc
/* sys_munmap */
case 91:
{
- int q;
- uint32_t len;
+ int q;
+ ULONGEST len;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len);
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall munmap. "
- "It will free the memory addr = %s len = %u. "
- "It will make record target get error. "
- "Do you want to stop the program?"),
- paddress (gdbarch, tmpu32), (int)len);
- target_terminal_inferior ();
- if (q)
- return 1;
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
+ target_terminal_ours ();
+ q = yquery (_("The next instruction is syscall munmap. "
+ "It will free the memory addr = 0x%s len = %u. "
+ "It will make record target get error. "
+ "Do you want to stop the program?"),
+ OUTPUT_REG (tmpulongest, tdep->arg1), (int) len);
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
@@ -655,292 +821,348 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs))
+ return -1;
break;
/* sys_ioperm */
case 101:
break;
+ /* sys_socket */
+ case 500:
+ /* sys_sendto */
+ case 503:
+ /* sys_sendmsg */
+ case 505:
+ /* sys_shutdown */
+ case 507:
+ /* sys_bind */
+ case 508:
+ /* sys_connect */
+ case 501:
+ /* sys_listen */
+ case 509:
+ /* sys_setsockopt */
+ case 513:
+ break;
+
+ /* sys_accept */
+ case 502:
+ /* sys_getsockname */
+ case 510:
+ /* sys_getpeername */
+ case 511:
+ {
+ 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;
+
+ /* sys_recvfrom */
+ case 504:
+ {
+ 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;
+ }
+ /* sys_recv */
+ case 515:
+ {
+ 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;
+
+ /* sys_recvmsg */
+ case 506:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_linux_msghdr (regcache, tdep, tmpulongest))
+ return -1;
+ break;
+
+ /* sys_socketpair */
+ case 512:
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ break;
+
+ /* sys_getsockopt */
+ case 514:
+ 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;
+
/* sys_socketcall */
case 102:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- switch (tmpu32)
- {
- case RECORD_SYS_SOCKET:
- case RECORD_SYS_BIND:
- case RECORD_SYS_CONNECT:
- case RECORD_SYS_LISTEN:
- break;
- case RECORD_SYS_ACCEPT:
- case RECORD_SYS_GETSOCKNAME:
- case RECORD_SYS_GETPEERNAME:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[2], tdep->size_int))
- return -1;
- }
- }
- break;
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
+ ULONGEST len;
- case RECORD_SYS_SOCKETPAIR:
- {
- uint32_t a[4];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], tdep->size_int))
- return -1;
- }
- }
- break;
- case RECORD_SYS_SEND:
- case RECORD_SYS_SENDTO:
- break;
- case RECORD_SYS_RECV:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_RECVFROM:
- {
- uint32_t a[6];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[5], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SHUTDOWN:
- case RECORD_SYS_SETSOCKOPT:
- break;
- case RECORD_SYS_GETSOCKOPT:
- {
- uint32_t a[5];
- uint32_t av;
+ 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;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[4])
- {
- if (target_read_memory
- (a[4], (gdb_byte *) & av, sizeof (av)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[4]),
- (unsigned long)sizeof (av));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], av))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SENDMSG:
- break;
- case RECORD_SYS_RECVMSG:
- {
- uint32_t a[2], i;
- struct record_msghdr
- {
- uint32_t msg_name;
- uint32_t msg_namelen;
- uint32_t msg_iov;
- uint32_t msg_iovlen;
- uint32_t msg_control;
- uint32_t msg_controllen;
- uint32_t msg_flags;
- } rec;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
+ ULONGEST len;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_msghdr))
- return -1;
- if (a[1])
- {
- if (target_read_memory
- (a[1], (gdb_byte *) & rec, sizeof (rec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[1]),
- (unsigned long)sizeof (rec));
- return -1;
- }
- if (record_arch_list_add_mem
- (rec.msg_name, rec.msg_namelen))
- return -1;
- if (record_arch_list_add_mem
- (rec.msg_control, rec.msg_controllen))
- return -1;
- if (rec.msg_iov)
- {
- for (i = 0; i < rec.msg_iovlen; i++)
- {
- if (target_read_memory
- (rec.msg_iov, (gdb_byte *) & iov,
- sizeof (iov)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error "
- "reading memory at "
- "addr = %s "
- "len = %lu.\n",
- paddress (gdbarch,
- rec.msg_iov),
- (unsigned long)sizeof (iov));
- return -1;
- }
- if (record_arch_list_add_mem
- (iov.iov_base, iov.iov_len))
- return -1;
- rec.msg_iov += sizeof (struct record_iovec);
- }
- }
- }
- }
- }
- break;
- default:
- printf_unfiltered (_("Process record and replay target "
- "doesn't support socketcall call 0x%s\n"),
- phex_nz (tmpu32, 4));
- return -1;
- break;
- }
+ 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;
/* sys_syslog */
@@ -949,16 +1171,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerval))
+ return -1;
break;
/* sys_newstat */
@@ -967,16 +1191,19 @@ record_linux_system_call (int num, struc
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;
+ /* sys_newfstatat */
+ case 540:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_utsname))
+ return -1;
break;
/* sys_iopl */
@@ -991,12 +1218,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_swapoff */
@@ -1005,47 +1234,121 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_sysinfo))
+ return -1;
+ break;
+
+ /* sys_shmget */
+ case 520:
+ /* sys_semget */
+ case 523:
+ /* sys_semop */
+ case 524:
+ /* sys_msgget */
+ case 528:
+ /* sys_shmdt */
+ /* XXX maybe need do some record works with sys_shmdt. */
+ case 527:
+ /* sys_msgsnd */
+ case 529:
+ /* sys_semtimedop */
+ case 532:
+ break;
+
+ /* sys_shmat */
+ case 521:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ulong))
+ return -1;
+ break;
+
+ /* sys_shmctl */
+ case 522:
+ 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_semctl */
+ /* XXX sys_semctl 525 still not support. */
+
+ /* sys_msgrcv */
+ case 530:
+ {
+ 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_msgctl */
+ case 531:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_msqid_ds))
+ 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;
- }
+ 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 support. */
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support ipc number %d\n"), (int) tmpulongest);
+ break;
+ }
break;
/* sys_fsync */
@@ -1060,30 +1363,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_timex))
+ return -1;
break;
/* sys_mprotect */
@@ -1092,9 +1395,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -1109,35 +1413,39 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_getpgid */
@@ -1150,15 +1458,15 @@ record_linux_system_call (int num, struc
/* sys_sysfs */
case 135:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (tmpu32 == 2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- /*XXX the size of memory is not very clear. */
- if (record_arch_list_add_mem (tmpu32, 10))
- return -1;
- }
+ 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 ((CORE_ADDR) tmpulongest, 10))
+ return -1;
+ }
break;
/* sys_personality */
@@ -1173,37 +1481,43 @@ record_linux_system_call (int num, struc
/* 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;
+ 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:
{
- 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;
+ 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 */
@@ -1215,36 +1529,40 @@ record_linux_system_call (int num, struc
/* sys_readv */
case 145:
{
- uint32_t vec;
- uint32_t vlen;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec);
- if (vec)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & vlen);
- for (tmpu32 = 0; tmpu32 < vlen; tmpu32++)
- {
- if (target_read_memory
- (vec, (gdb_byte *) & iov, sizeof (struct record_iovec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, vec),
- (unsigned long)sizeof (struct record_iovec));
- return -1;
- }
- if (record_arch_list_add_mem (iov.iov_base, iov.iov_len))
- return -1;
- vec += sizeof (struct record_iovec);
- }
- }
+ 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;
@@ -1270,9 +1588,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
break;
/* sys_sched_setscheduler */
@@ -1291,9 +1609,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timespec))
+ return -1;
break;
/* sys_mremap */
@@ -1304,15 +1623,18 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_vm86 */
@@ -1323,32 +1645,32 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
- }
+ 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;
/* sys_setresgid16 */
@@ -1357,35 +1679,40 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
- }
+ 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;
/* sys_rt_sigreturn */
@@ -1394,36 +1721,39 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_siginfo_t))
+ return -1;
break;
/* sys_rt_sigqueueinfo */
@@ -1434,15 +1764,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_pwrite64 */
@@ -1453,22 +1782,22 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* sys_capset */
@@ -1477,16 +1806,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_off_t))
+ return -1;
break;
/* sys_ni_syscall */
@@ -1499,9 +1830,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_mmap2 */
@@ -1520,9 +1852,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_lchown */
@@ -1543,16 +1876,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_setgroups */
@@ -1565,15 +1898,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_setresgid */
@@ -1582,15 +1915,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_chown */
@@ -1609,9 +1942,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_PAGE_SIZE))
+ return -1;
break;
/* sys_madvise */
@@ -1621,30 +1955,32 @@ record_linux_system_call (int num, struc
/* sys_getdents64 */
case 220:
{
- uint32_t count;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count))
- return -1;
+ 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);
- if (tmpu32 == tdep->fcntl_F_GETLK64)
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest == tdep->fcntl_F_GETLK64)
{
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock64))
- return -1;
- }
- else if (tmpu32 != tdep->fcntl_F_SETLK64
- && tmpu32 != tdep->fcntl_F_SETLKW64)
+ 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;
- }
+ goto sys_fcntl;
+ }
break;
/* sys_ni_syscall */
@@ -1669,15 +2005,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_listxattr */
@@ -1686,15 +2021,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_removexattr */
@@ -1709,9 +2043,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_loff_t))
+ return -1;
break;
/* sys_futex */
@@ -1722,35 +2057,36 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_long))
+ return -1;
break;
/* sys_io_destroy */
@@ -1759,49 +2095,57 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_io_submit */
case 248:
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- int32_t i, nr;
- uint32_t *iocbp;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr);
- iocbp = (uint32_t *) alloca (nr * tdep->size_int);
- if (target_read_memory
- (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %u.\n",
- paddress (gdbarch, tmpu32),
- (int)(nr * tdep->size_int));
- return -1;
- }
- for (i = 0; i < nr; i++)
- {
- if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb))
- return -1;
- }
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_io_event))
+ return -1;
break;
/* sys_fadvise64 */
@@ -1813,28 +2157,27 @@ record_linux_system_call (int num, struc
/* sys_exit_group */
case 252:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall exit_group. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
- }
+ 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;
/* sys_epoll_create */
@@ -1845,16 +2188,15 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_remap_file_pages */
@@ -1865,23 +2207,25 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerspec))
+ return -1;
break;
/* sys_timer_getoverrun */
@@ -1894,32 +2238,36 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs64))
+ return -1;
break;
/* sys_tgkill */
@@ -1936,18 +2284,18 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_set_mempolicy */
@@ -1962,18 +2310,18 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_mq_notify */
@@ -1982,9 +2330,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_mq_attr))
+ return -1;
break;
/* sys_kexec_load */
@@ -1993,12 +2342,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -2011,20 +2362,20 @@ record_linux_system_call (int num, struc
/* 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;
- }
- }
+ 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;
/* sys_ioprio_set */
@@ -2053,9 +2404,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_unlinkat */
@@ -2070,15 +2422,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_fchmodat */
@@ -2089,34 +2440,39 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_unshare */
@@ -2127,22 +2483,24 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_sync_file_range */
@@ -2155,48 +2513,47 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* 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;
- }
+ 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 %u\n"),
- (int)tmpu32);
+ "support syscall number %u\n"), num);
return -1;
break;
}
--- a/linux-record.h
+++ b/linux-record.h
@@ -23,6 +23,7 @@
struct linux_record_tdep
{
/* The size of the type that will be used in a system call. */
+ int size_pointer;
int size__old_kernel_stat;
int size_tms;
int size_loff_t;
@@ -81,7 +82,6 @@ struct linux_record_tdep
int size_itimerspec;
int size_mq_attr;
int size_siginfo;
-
int size_termios;
int size_termios2;
int size_pid_t;
@@ -89,6 +89,8 @@ struct linux_record_tdep
int size_serial_struct;
int size_serial_icounter_struct;
int size_hayes_esp_config;
+ int size_size_t;
+ int size_iovec;
/* The values of the second argument of system call "sys_ioctl". */
int ioctl_TCGETS;
@@ -171,6 +173,7 @@ struct linux_record_tdep
int arg3;
int arg4;
int arg5;
+ int arg6;
};
extern int record_linux_system_call (int num, struct regcache *regcache,
[-- Attachment #2: prec_syscall_64bits.txt --]
[-- Type: text/plain, Size: 119650 bytes --]
---
i386-linux-tdep.c | 26
linux-record.c | 2569 ++++++++++++++++++++++++++++++------------------------
linux-record.h | 5
3 files changed, 1488 insertions(+), 1112 deletions(-)
--- a/i386-linux-tdep.c
+++ b/i386-linux-tdep.c
@@ -369,7 +369,14 @@ i386_linux_intx80_sysenter_record (struc
int ret;
uint32_t tmpu32;
- regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32);
+ regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *) &tmpu32);
+
+ if (tmpu32 > 499)
+ {
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support syscall number %u\n"), tmpu32);
+ return -1;
+ }
ret = record_linux_system_call (tmpu32, regcache,
&i386_linux_record_tdep);
@@ -481,6 +488,8 @@ i386_linux_init_abi (struct gdbarch_info
/* Initialize the i386_linux_record_tdep. */
/* These values are the size of the type that will be used in a system
call. They are obtained from Linux Kernel source. */
+ i386_linux_record_tdep.size_pointer
+ = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
i386_linux_record_tdep.size__old_kernel_stat = 32;
i386_linux_record_tdep.size_tms = 16;
i386_linux_record_tdep.size_loff_t = 8;
@@ -501,9 +510,12 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_statfs = 64;
i386_linux_record_tdep.size_statfs64 = 84;
i386_linux_record_tdep.size_sockaddr = 16;
- i386_linux_record_tdep.size_int = 4;
- i386_linux_record_tdep.size_long = 4;
- i386_linux_record_tdep.size_ulong = 4;
+ i386_linux_record_tdep.size_int
+ = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
+ i386_linux_record_tdep.size_long
+ = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
+ i386_linux_record_tdep.size_ulong
+ = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
i386_linux_record_tdep.size_msghdr = 28;
i386_linux_record_tdep.size_itimerval = 16;
i386_linux_record_tdep.size_stat = 88;
@@ -536,7 +548,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_io_event = 32;
i386_linux_record_tdep.size_iocb = 64;
i386_linux_record_tdep.size_epoll_event = 12;
- i386_linux_record_tdep.size_itimerspec = i386_linux_record_tdep.size_timespec * 2;
+ i386_linux_record_tdep.size_itimerspec
+ = i386_linux_record_tdep.size_timespec * 2;
i386_linux_record_tdep.size_mq_attr = 32;
i386_linux_record_tdep.size_siginfo = 128;
i386_linux_record_tdep.size_termios = 36;
@@ -546,6 +559,8 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.size_serial_struct = 60;
i386_linux_record_tdep.size_serial_icounter_struct = 80;
i386_linux_record_tdep.size_hayes_esp_config = 12;
+ i386_linux_record_tdep.size_size_t = 4;
+ i386_linux_record_tdep.size_iovec = 8;
/* These values are the second argument of system call "sys_ioctl".
They are obtained from Linux Kernel source. */
@@ -627,6 +642,7 @@ i386_linux_init_abi (struct gdbarch_info
i386_linux_record_tdep.arg3 = I386_EDX_REGNUM;
i386_linux_record_tdep.arg4 = I386_ESI_REGNUM;
i386_linux_record_tdep.arg5 = I386_EDI_REGNUM;
+ i386_linux_record_tdep.arg6 = I386_EBP_REGNUM;
tdep->i386_intx80_record = i386_linux_intx80_sysenter_record;
tdep->i386_sysenter_record = i386_linux_intx80_sysenter_record;
--- a/linux-record.c
+++ b/linux-record.c
@@ -19,6 +19,7 @@
#include "defs.h"
#include "target.h"
+#include "gdbtypes.h"
#include "regcache.h"
#include "record.h"
#include "linux-record.h"
@@ -80,6 +81,134 @@
#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
@@ -94,10 +223,13 @@
int
record_linux_system_call (int num, struct regcache *regcache,
- struct linux_record_tdep *tdep)
+ struct linux_record_tdep *tdep)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
- uint32_t tmpu32;
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+ ULONGEST tmpulongest;
+ CORE_ADDR tmpaddr;
+ int tmpint;
switch (num)
{
@@ -108,15 +240,14 @@ record_linux_system_call (int num, struc
/* sys_exit */
case 1:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_ ("The next instruction is syscall exit. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
@@ -127,11 +258,11 @@ record_linux_system_call (int num, struc
/* sys_read */
case 3:
{
- uint32_t addr, count;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (addr, count))
- return -1;
+ 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;
@@ -171,9 +302,10 @@ record_linux_system_call (int num, struc
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;
+ 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;
/* sys_lseek */
@@ -194,16 +326,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_alarm */
@@ -240,9 +372,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_tms))
+ return -1;
break;
/* sys_ni_syscall */
@@ -270,149 +402,172 @@ record_linux_system_call (int num, struc
/* sys_ioctl */
case 54:
/* XXX Need to add a lot of support of other ioctl requests. */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (tmpu32 == tdep->ioctl_FIOCLEX || tmpu32 == tdep->ioctl_FIONCLEX
- || tmpu32 == tdep->ioctl_FIONBIO || tmpu32 == tdep->ioctl_FIOASYNC
- || tmpu32 == tdep->ioctl_TCSETS || tmpu32 == tdep->ioctl_TCSETSW
- || tmpu32 == tdep->ioctl_TCSETSF || tmpu32 == tdep->ioctl_TCSETA
- || tmpu32 == tdep->ioctl_TCSETAW || tmpu32 == tdep->ioctl_TCSETAF
- || tmpu32 == tdep->ioctl_TCSBRK || tmpu32 == tdep->ioctl_TCXONC
- || tmpu32 == tdep->ioctl_TCFLSH || tmpu32 == tdep->ioctl_TIOCEXCL
- || tmpu32 == tdep->ioctl_TIOCNXCL
- || tmpu32 == tdep->ioctl_TIOCSCTTY
- || tmpu32 == tdep->ioctl_TIOCSPGRP || tmpu32 == tdep->ioctl_TIOCSTI
- || tmpu32 == tdep->ioctl_TIOCSWINSZ
- || tmpu32 == tdep->ioctl_TIOCMBIS || tmpu32 == tdep->ioctl_TIOCMBIC
- || tmpu32 == tdep->ioctl_TIOCMSET
- || tmpu32 == tdep->ioctl_TIOCSSOFTCAR
- || tmpu32 == tdep->ioctl_TIOCCONS
- || tmpu32 == tdep->ioctl_TIOCSSERIAL
- || tmpu32 == tdep->ioctl_TIOCPKT || tmpu32 == tdep->ioctl_TIOCNOTTY
- || tmpu32 == tdep->ioctl_TIOCSETD || tmpu32 == tdep->ioctl_TCSBRKP
- || tmpu32 == tdep->ioctl_TIOCTTYGSTRUCT
- || tmpu32 == tdep->ioctl_TIOCSBRK || tmpu32 == tdep->ioctl_TIOCCBRK
- || tmpu32 == tdep->ioctl_TCSETS2 || tmpu32 == tdep->ioctl_TCSETSW2
- || tmpu32 == tdep->ioctl_TCSETSF2
- || tmpu32 == tdep->ioctl_TIOCSPTLCK
- || tmpu32 == tdep->ioctl_TIOCSERCONFIG
- || tmpu32 == tdep->ioctl_TIOCSERGWILD
- || tmpu32 == tdep->ioctl_TIOCSERSWILD
- || tmpu32 == tdep->ioctl_TIOCSLCKTRMIOS
- || tmpu32 == tdep->ioctl_TIOCSERGETMULTI
- || tmpu32 == tdep->ioctl_TIOCSERSETMULTI
- || tmpu32 == tdep->ioctl_TIOCMIWAIT
- || tmpu32 == tdep->ioctl_TIOCSHAYESESP)
- {
- /* Nothing to do. */
- }
- else if (tmpu32 == tdep->ioctl_TCGETS || tmpu32 == tdep->ioctl_TCGETA
- || tmpu32 == tdep->ioctl_TIOCGLCKTRMIOS)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGPGRP
- || tmpu32 == tdep->ioctl_TIOCGSID)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCOUTQ
- || tmpu32 == tdep->ioctl_TIOCMGET
- || tmpu32 == tdep->ioctl_TIOCGSOFTCAR
- || tmpu32 == tdep->ioctl_FIONREAD
- || tmpu32 == tdep->ioctl_TIOCINQ
- || tmpu32 == tdep->ioctl_TIOCGETD
- || tmpu32 == tdep->ioctl_TIOCGPTN
- || tmpu32 == tdep->ioctl_TIOCSERGETLSR)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_int))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGWINSZ)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_winsize))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCLINUX)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
+ 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 affect a char size memory. */
- if (record_arch_list_add_mem (tmpu32, 1))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGSERIAL)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TCGETS2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_termios2))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_FIOQSIZE)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGICOUNT)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem
- (tmpu32, tdep->size_serial_icounter_struct))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCGHAYESESP)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config))
- return -1;
- }
- else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT)
- {
- printf_unfiltered (_("Process record and replay target doesn't "
- "support ioctl request TIOCSERGSTRUCT\n"));
- return 1;
- }
+ 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%s.\n"),
- phex_nz (tmpu32, 4));
- 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:
/* XXX */
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
sys_fcntl:
- if (tmpu32 == tdep->fcntl_F_GETLK)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock))
- return -1;
- }
+ 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;
/* sys_ni_syscall */
@@ -425,9 +580,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_oldold_utsname))
+ return -1;
break;
/* sys_umask */
@@ -438,9 +594,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ustat))
+ return -1;
break;
/* sys_dup2 */
@@ -455,9 +612,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sgetmask */
@@ -474,9 +632,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_sethostname */
@@ -487,26 +646,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_getrusage */
case 77:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_rusage))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rusage))
+ return -1;
break;
/* sys_gettimeofday */
case 78:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timeval))
- return -1;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_timezone))
- return -1;
+ 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_settimeofday */
@@ -515,53 +678,56 @@ record_linux_system_call (int num, struc
/* 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;
+ 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_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;
+ 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;
/* old_select */
case 82:
{
- struct sel_arg_struct
- {
- CORE_ADDR n;
- CORE_ADDR inp;
- CORE_ADDR outp;
- CORE_ADDR exp;
- CORE_ADDR tvp;
- } sel;
+ struct sel_arg_struct
+ {
+ CORE_ADDR n;
+ CORE_ADDR inp;
+ CORE_ADDR outp;
+ CORE_ADDR exp;
+ CORE_ADDR tvp;
+ } sel;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (sel));
- return -1;
- }
- if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set))
- return -1;
- if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval))
- return -1;
- }
+ 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;
@@ -572,12 +738,12 @@ record_linux_system_call (int num, struc
/* sys_readlink */
case 85:
{
- uint32_t len;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len);
- if (record_arch_list_add_mem (tmpu32, len))
- return -1;
+ 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;
@@ -590,23 +756,24 @@ record_linux_system_call (int num, struc
/* sys_reboot */
case 88:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall reboot. "
- "It will restart the computer. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ int q;
+ target_terminal_ours ();
+ q =
+ yquery (_("The next instruction is syscall reboot. "
+ "It will restart the computer. "
+ "Do you want to stop the program?"));
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
/* old_readdir */
case 89:
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent))
- return -1;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_dirent))
+ return -1;
break;
/* old_mmap */
@@ -616,22 +783,21 @@ record_linux_system_call (int num, struc
/* sys_munmap */
case 91:
{
- int q;
- uint32_t len;
+ int q;
+ ULONGEST len;
- regcache_raw_read (regcache, tdep->arg1,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len);
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall munmap. "
- "It will free the memory addr = %s len = %u. "
- "It will make record target get error. "
- "Do you want to stop the program?"),
- paddress (gdbarch, tmpu32), (int)len);
- target_terminal_inferior ();
- if (q)
- return 1;
+ regcache_raw_read_unsigned (regcache, tdep->arg1,
+ &tmpulongest);
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
+ target_terminal_ours ();
+ q = yquery (_("The next instruction is syscall munmap. "
+ "It will free the memory addr = 0x%s len = %u. "
+ "It will make record target get error. "
+ "Do you want to stop the program?"),
+ OUTPUT_REG (tmpulongest, tdep->arg1), (int) len);
+ target_terminal_inferior ();
+ if (q)
+ return 1;
}
break;
@@ -655,292 +821,348 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs))
+ return -1;
break;
/* sys_ioperm */
case 101:
break;
+ /* sys_socket */
+ case 500:
+ /* sys_sendto */
+ case 503:
+ /* sys_sendmsg */
+ case 505:
+ /* sys_shutdown */
+ case 507:
+ /* sys_bind */
+ case 508:
+ /* sys_connect */
+ case 501:
+ /* sys_listen */
+ case 509:
+ /* sys_setsockopt */
+ case 513:
+ break;
+
+ /* sys_accept */
+ case 502:
+ /* sys_getsockname */
+ case 510:
+ /* sys_getpeername */
+ case 511:
+ {
+ 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;
+
+ /* sys_recvfrom */
+ case 504:
+ {
+ 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;
+ }
+ /* sys_recv */
+ case 515:
+ {
+ 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;
+
+ /* sys_recvmsg */
+ case 506:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_linux_msghdr (regcache, tdep, tmpulongest))
+ return -1;
+ break;
+
+ /* sys_socketpair */
+ case 512:
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
+ break;
+
+ /* sys_getsockopt */
+ case 514:
+ 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;
+
/* sys_socketcall */
case 102:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- switch (tmpu32)
- {
- case RECORD_SYS_SOCKET:
- case RECORD_SYS_BIND:
- case RECORD_SYS_CONNECT:
- case RECORD_SYS_LISTEN:
- break;
- case RECORD_SYS_ACCEPT:
- case RECORD_SYS_GETSOCKNAME:
- case RECORD_SYS_GETPEERNAME:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[2], tdep->size_int))
- return -1;
- }
- }
- break;
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
+ ULONGEST len;
- case RECORD_SYS_SOCKETPAIR:
- {
- uint32_t a[4];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], tdep->size_int))
- return -1;
- }
- }
- break;
- case RECORD_SYS_SEND:
- case RECORD_SYS_SENDTO:
- break;
- case RECORD_SYS_RECV:
- {
- uint32_t a[3];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_RECVFROM:
- {
- uint32_t a[6];
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[2])
- {
- if (target_read_memory
- (a[2], (gdb_byte *) & (a[2]), sizeof (a[2])))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[2]),
- (unsigned long)sizeof (a[2]));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], a[2]))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_sockaddr))
- return -1;
- if (record_arch_list_add_mem (a[5], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SHUTDOWN:
- case RECORD_SYS_SETSOCKOPT:
- break;
- case RECORD_SYS_GETSOCKOPT:
- {
- uint32_t a[5];
- uint32_t av;
+ 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;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (a[4])
- {
- if (target_read_memory
- (a[4], (gdb_byte *) & av, sizeof (av)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[4]),
- (unsigned long)sizeof (av));
- return -1;
- }
- if (record_arch_list_add_mem (a[3], av))
- return -1;
- if (record_arch_list_add_mem (a[4], tdep->size_int))
- return -1;
- }
- }
- }
- break;
- case RECORD_SYS_SENDMSG:
- break;
- case RECORD_SYS_RECVMSG:
- {
- uint32_t a[2], i;
- struct record_msghdr
- {
- uint32_t msg_name;
- uint32_t msg_namelen;
- uint32_t msg_iov;
- uint32_t msg_iovlen;
- uint32_t msg_control;
- uint32_t msg_controllen;
- uint32_t msg_flags;
- } rec;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
+ 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);
+ int addrlen;
+ gdb_byte *addrlenp;
+ ULONGEST len;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, tmpu32),
- (unsigned long)sizeof (a));
- return -1;
- }
- if (record_arch_list_add_mem (a[1], tdep->size_msghdr))
- return -1;
- if (a[1])
- {
- if (target_read_memory
- (a[1], (gdb_byte *) & rec, sizeof (rec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s "
- "len = %lu.\n",
- paddress (gdbarch, a[1]),
- (unsigned long)sizeof (rec));
- return -1;
- }
- if (record_arch_list_add_mem
- (rec.msg_name, rec.msg_namelen))
- return -1;
- if (record_arch_list_add_mem
- (rec.msg_control, rec.msg_controllen))
- return -1;
- if (rec.msg_iov)
- {
- for (i = 0; i < rec.msg_iovlen; i++)
- {
- if (target_read_memory
- (rec.msg_iov, (gdb_byte *) & iov,
- sizeof (iov)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error "
- "reading memory at "
- "addr = %s "
- "len = %lu.\n",
- paddress (gdbarch,
- rec.msg_iov),
- (unsigned long)sizeof (iov));
- return -1;
- }
- if (record_arch_list_add_mem
- (iov.iov_base, iov.iov_len))
- return -1;
- rec.msg_iov += sizeof (struct record_iovec);
- }
- }
- }
- }
- }
- break;
- default:
- printf_unfiltered (_("Process record and replay target "
- "doesn't support socketcall call 0x%s\n"),
- phex_nz (tmpu32, 4));
- return -1;
- break;
- }
+ 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;
/* sys_syslog */
@@ -949,16 +1171,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerval))
+ return -1;
break;
/* sys_newstat */
@@ -967,16 +1191,19 @@ record_linux_system_call (int num, struc
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;
+ /* sys_newfstatat */
+ case 540:
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_old_utsname))
+ return -1;
break;
/* sys_iopl */
@@ -991,12 +1218,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_swapoff */
@@ -1005,47 +1234,121 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_sysinfo))
+ return -1;
+ break;
+
+ /* sys_shmget */
+ case 520:
+ /* sys_semget */
+ case 523:
+ /* sys_semop */
+ case 524:
+ /* sys_msgget */
+ case 528:
+ /* sys_shmdt */
+ /* XXX maybe need do some record works with sys_shmdt. */
+ case 527:
+ /* sys_msgsnd */
+ case 529:
+ /* sys_semtimedop */
+ case 532:
+ break;
+
+ /* sys_shmat */
+ case 521:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_ulong))
+ return -1;
+ break;
+
+ /* sys_shmctl */
+ case 522:
+ 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_semctl */
+ /* XXX sys_semctl 525 still not support. */
+
+ /* sys_msgrcv */
+ case 530:
+ {
+ 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_msgctl */
+ case 531:
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_msqid_ds))
+ 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;
- }
+ 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 support. */
+ printf_unfiltered (_("Process record and replay target doesn't "
+ "support ipc number %d\n"), (int) tmpulongest);
+ break;
+ }
break;
/* sys_fsync */
@@ -1060,30 +1363,30 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_timex))
+ return -1;
break;
/* sys_mprotect */
@@ -1092,9 +1395,10 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -1109,35 +1413,39 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_getpgid */
@@ -1150,15 +1458,15 @@ record_linux_system_call (int num, struc
/* sys_sysfs */
case 135:
- regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32);
- if (tmpu32 == 2)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- /*XXX the size of memory is not very clear. */
- if (record_arch_list_add_mem (tmpu32, 10))
- return -1;
- }
+ 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 ((CORE_ADDR) tmpulongest, 10))
+ return -1;
+ }
break;
/* sys_personality */
@@ -1173,37 +1481,43 @@ record_linux_system_call (int num, struc
/* 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;
+ 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:
{
- 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;
+ 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 */
@@ -1215,36 +1529,40 @@ record_linux_system_call (int num, struc
/* sys_readv */
case 145:
{
- uint32_t vec;
- uint32_t vlen;
- struct record_iovec
- {
- uint32_t iov_base;
- uint32_t iov_len;
- } iov;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec);
- if (vec)
- {
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & vlen);
- for (tmpu32 = 0; tmpu32 < vlen; tmpu32++)
- {
- if (target_read_memory
- (vec, (gdb_byte *) & iov, sizeof (struct record_iovec)))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading "
- "memory at addr = %s len = %lu.\n",
- paddress (gdbarch, vec),
- (unsigned long)sizeof (struct record_iovec));
- return -1;
- }
- if (record_arch_list_add_mem (iov.iov_base, iov.iov_len))
- return -1;
- vec += sizeof (struct record_iovec);
- }
- }
+ 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;
@@ -1270,9 +1588,9 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_int))
+ return -1;
break;
/* sys_sched_setscheduler */
@@ -1291,9 +1609,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_timespec))
+ return -1;
break;
/* sys_mremap */
@@ -1304,15 +1623,18 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_vm86 */
@@ -1323,32 +1645,32 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
- }
+ 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;
/* sys_setresgid16 */
@@ -1357,35 +1679,40 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
- }
+ 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;
/* sys_rt_sigreturn */
@@ -1394,36 +1721,39 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_siginfo_t))
+ return -1;
break;
/* sys_rt_sigqueueinfo */
@@ -1434,15 +1764,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_pwrite64 */
@@ -1453,22 +1782,22 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* sys_capset */
@@ -1477,16 +1806,18 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_off_t))
+ return -1;
break;
/* sys_ni_syscall */
@@ -1499,9 +1830,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_rlimit))
+ return -1;
break;
/* sys_mmap2 */
@@ -1520,9 +1852,10 @@ record_linux_system_call (int num, struc
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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_lchown */
@@ -1543,16 +1876,16 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_setgroups */
@@ -1565,15 +1898,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_setresgid */
@@ -1582,15 +1915,15 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_chown */
@@ -1609,9 +1942,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_PAGE_SIZE))
+ return -1;
break;
/* sys_madvise */
@@ -1621,30 +1955,32 @@ record_linux_system_call (int num, struc
/* sys_getdents64 */
case 220:
{
- uint32_t count;
- regcache_raw_read (regcache, tdep->arg2,
- (gdb_byte *) & tmpu32);
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count);
- if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count))
- return -1;
+ 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);
- if (tmpu32 == tdep->fcntl_F_GETLK64)
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (tmpulongest == tdep->fcntl_F_GETLK64)
{
- regcache_raw_read (regcache, tdep->arg3,
- (gdb_byte *) & tmpu32);
- if (record_arch_list_add_mem (tmpu32, tdep->size_flock64))
- return -1;
- }
- else if (tmpu32 != tdep->fcntl_F_SETLK64
- && tmpu32 != tdep->fcntl_F_SETLKW64)
+ 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;
- }
+ goto sys_fcntl;
+ }
break;
/* sys_ni_syscall */
@@ -1669,15 +2005,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_listxattr */
@@ -1686,15 +2021,14 @@ record_linux_system_call (int num, struc
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;
- }
+ 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;
/* sys_removexattr */
@@ -1709,9 +2043,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_loff_t))
+ return -1;
break;
/* sys_futex */
@@ -1722,35 +2057,36 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_long))
+ return -1;
break;
/* sys_io_destroy */
@@ -1759,49 +2095,57 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_io_submit */
case 248:
- regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32);
- if (tmpu32)
- {
- int32_t i, nr;
- uint32_t *iocbp;
- regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr);
- iocbp = (uint32_t *) alloca (nr * tdep->size_int);
- if (target_read_memory
- (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int))
- {
- if (record_debug)
- fprintf_unfiltered (gdb_stdlog,
- "Process record: error reading memory "
- "at addr = %s len = %u.\n",
- paddress (gdbarch, tmpu32),
- (int)(nr * tdep->size_int));
- return -1;
- }
- for (i = 0; i < nr; i++)
- {
- if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb))
- return -1;
- }
- }
+ 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;
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_io_event))
+ return -1;
break;
/* sys_fadvise64 */
@@ -1813,28 +2157,27 @@ record_linux_system_call (int num, struc
/* sys_exit_group */
case 252:
{
- int q;
- target_terminal_ours ();
- q =
- yquery (_("The next instruction is syscall exit_group. "
- "It will make the program exit. "
- "Do you want to stop the program?"));
- target_terminal_inferior ();
- if (q)
- return 1;
+ 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;
- }
+ 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;
/* sys_epoll_create */
@@ -1845,16 +2188,15 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_remap_file_pages */
@@ -1865,23 +2207,25 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_itimerspec))
+ return -1;
break;
/* sys_timer_getoverrun */
@@ -1894,32 +2238,36 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_statfs64))
+ return -1;
break;
/* sys_tgkill */
@@ -1936,18 +2284,18 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_set_mempolicy */
@@ -1962,18 +2310,18 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_mq_notify */
@@ -1982,9 +2330,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_mq_attr))
+ return -1;
break;
/* sys_kexec_load */
@@ -1993,12 +2342,14 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* sys_ni_syscall */
@@ -2011,20 +2362,20 @@ record_linux_system_call (int num, struc
/* 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;
- }
- }
+ 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;
/* sys_ioprio_set */
@@ -2053,9 +2404,10 @@ record_linux_system_call (int num, struc
/* 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;
+ regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
+ if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest,
+ tdep->size_stat64))
+ return -1;
break;
/* sys_unlinkat */
@@ -2070,15 +2422,14 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* sys_fchmodat */
@@ -2089,34 +2440,39 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_unshare */
@@ -2127,22 +2483,24 @@ record_linux_system_call (int num, struc
/* 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;
+ 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;
/* 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;
+ 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;
/* sys_sync_file_range */
@@ -2155,48 +2513,47 @@ record_linux_system_call (int num, struc
/* 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;
- }
+ 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;
/* 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;
+ 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;
/* 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;
- }
+ 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 %u\n"),
- (int)tmpu32);
+ "support syscall number %u\n"), num);
return -1;
break;
}
--- a/linux-record.h
+++ b/linux-record.h
@@ -23,6 +23,7 @@
struct linux_record_tdep
{
/* The size of the type that will be used in a system call. */
+ int size_pointer;
int size__old_kernel_stat;
int size_tms;
int size_loff_t;
@@ -81,7 +82,6 @@ struct linux_record_tdep
int size_itimerspec;
int size_mq_attr;
int size_siginfo;
-
int size_termios;
int size_termios2;
int size_pid_t;
@@ -89,6 +89,8 @@ struct linux_record_tdep
int size_serial_struct;
int size_serial_icounter_struct;
int size_hayes_esp_config;
+ int size_size_t;
+ int size_iovec;
/* The values of the second argument of system call "sys_ioctl". */
int ioctl_TCGETS;
@@ -171,6 +173,7 @@ struct linux_record_tdep
int arg3;
int arg4;
int arg5;
+ int arg6;
};
extern int record_linux_system_call (int num, struct regcache *regcache,
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3
2009-07-28 1:44 ` Hui Zhu
@ 2009-08-03 5:40 ` Hui Zhu
0 siblings, 0 replies; 8+ messages in thread
From: Hui Zhu @ 2009-08-03 5:40 UTC (permalink / raw)
To: Michael Snyder, Mark Kettenis; +Cc: gdb-patches ml
Ping.
On Tue, Jul 28, 2009 at 09:40, Hui Zhu<teawater@gmail.com> wrote:
> On Sun, Jul 26, 2009 at 06:14, Michael Snyder wrote: > Hui, I have just a few more small issues with this patch: > > >> linux-record.c | 2570 >> ++++++++++++++++++++++++++++++------------------------ > > [...] >> >> + case RECORD_SYS_ACCEPT: >> + case RECORD_SYS_GETSOCKNAME: >> + case
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2009-08-03 5:40 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-07-07 2:40 [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3 Hui Zhu
2009-07-13 2:26 ` Michael Snyder
2009-07-17 12:03 ` Hui Zhu
2009-07-18 3:04 ` Michael Snyder
2009-07-19 17:39 ` Hui Zhu
2009-07-26 7:46 ` Michael Snyder
2009-07-28 1:44 ` Hui Zhu
2009-08-03 5:40 ` Hui Zhu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox