/* Process record and replay target code for GNU/Linux.
- Copyright (C) 2008-2016 Free Software Foundation, Inc.
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
This file is part of GDB.
#include "record.h"
#include "record-full.h"
#include "linux-record.h"
+#include "gdbarch.h"
/* These macros are the values of the first argument of system call
"sys_ptrace". The values of these macros were obtained from Linux
#define RECORD_Q_XGETQUOTA (('3' << 8) + 3)
#define OUTPUT_REG(val, num) phex_nz ((val), \
- TYPE_LENGTH (gdbarch_register_type (get_regcache_arch (regcache), (num))))
+ TYPE_LENGTH (gdbarch_register_type (regcache->arch (), (num))))
/* Record a memory area of length LEN pointed to by register
REGNUM. */
{
gdb_byte *a;
int addrlen;
- struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ struct gdbarch *gdbarch = regcache->arch ();
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
if (!addr)
struct linux_record_tdep *tdep, ULONGEST addr)
{
gdb_byte *a;
- struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ struct gdbarch *gdbarch = regcache->arch ();
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
CORE_ADDR tmpaddr;
int tmpint;
struct regcache *regcache,
struct linux_record_tdep *tdep)
{
- struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ struct gdbarch *gdbarch = regcache->arch ();
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
ULONGEST tmpulongest;
CORE_ADDR tmpaddr;
break;
case gdb_sys_read:
+ case gdb_sys_readlink:
+ case gdb_sys_recv:
regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
if (record_mem_at_reg (regcache, tdep->arg2, (int) tmpulongest))
return -1;
break;
case gdb_sys_pipe:
+ case gdb_sys_pipe2:
if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int * 2))
return -1;
break;
}
else if (tmpulongest == tdep->ioctl_TIOCSERGSTRUCT)
{
- printf_unfiltered (_("Process record and replay target doesn't "
- "support ioctl request TIOCSERGSTRUCT\n"));
+ fprintf_unfiltered (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support ioctl request TIOCSERGSTRUCT\n"));
return 1;
}
else
{
- printf_unfiltered (_("Process record and replay target doesn't "
- "support ioctl request 0x%s.\n"),
- OUTPUT_REG (tmpulongest, tdep->arg2));
+ fprintf_unfiltered (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support ioctl request 0x%s.\n"),
+ OUTPUT_REG (tmpulongest, tdep->arg2));
return 1;
}
break;
case gdb_sys_symlink:
break;
- case gdb_sys_readlink:
- regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
- if (record_mem_at_reg (regcache, tdep->arg2, (int) tmpulongest))
- return -1;
- break;
-
case gdb_sys_uselib:
case gdb_sys_swapon:
break;
}
break;
- case gdb_sys_recv:
- regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
- if (record_mem_at_reg (regcache, tdep->arg2, (int) tmpulongest))
- return -1;
- break;
-
case gdb_sys_recvmsg:
regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
if (record_linux_msghdr (regcache, tdep, tmpulongest))
if (record_linux_sockaddr (regcache, tdep, tmpulongest, len))
return -1;
}
+ break;
case RECORD_SYS_RECV:
regcache_raw_read_unsigned (regcache, tdep->arg2,
&tmpulongest);
}
break;
default:
- printf_unfiltered (_("Process record and replay target "
- "doesn't support socketcall call 0x%s\n"),
- OUTPUT_REG (tmpulongest, tdep->arg1));
+ fprintf_unfiltered (gdb_stderr,
+ _("Process record and replay target "
+ "doesn't support socketcall call 0x%s\n"),
+ OUTPUT_REG (tmpulongest, tdep->arg1));
return -1;
break;
}
break;
default:
/* XXX RECORD_SEMCTL still not supported. */
- printf_unfiltered (_("Process record and replay target doesn't "
- "support ipc number %s\n"),
- pulongest (tmpulongest));
+ fprintf_unfiltered (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support ipc number %s\n"),
+ pulongest (tmpulongest));
break;
}
break;
case gdb_sys_dup3:
break;
- case gdb_sys_pipe2:
- if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int * 2))
- return -1;
- break;
-
case gdb_sys_inotify_init1:
break;
default:
- printf_unfiltered (_("Process record and replay target doesn't "
- "support syscall number %d\n"), syscall);
+ fprintf_unfiltered (gdb_stderr,
+ _("Process record and replay target doesn't "
+ "support syscall number %d\n"), syscall);
return -1;
break;
}