32 #define RECORD_PTRACE_PEEKTEXT 1 33 #define RECORD_PTRACE_PEEKDATA 2 34 #define RECORD_PTRACE_PEEKUSR 3 40 #define RECORD_SYS_SOCKET 1 41 #define RECORD_SYS_BIND 2 42 #define RECORD_SYS_CONNECT 3 43 #define RECORD_SYS_LISTEN 4 44 #define RECORD_SYS_ACCEPT 5 45 #define RECORD_SYS_GETSOCKNAME 6 46 #define RECORD_SYS_GETPEERNAME 7 47 #define RECORD_SYS_SOCKETPAIR 8 48 #define RECORD_SYS_SEND 9 49 #define RECORD_SYS_RECV 10 50 #define RECORD_SYS_SENDTO 11 51 #define RECORD_SYS_RECVFROM 12 52 #define RECORD_SYS_SHUTDOWN 13 53 #define RECORD_SYS_SETSOCKOPT 14 54 #define RECORD_SYS_GETSOCKOPT 15 55 #define RECORD_SYS_SENDMSG 16 56 #define RECORD_SYS_RECVMSG 17 62 #define RECORD_SEMOP 1 63 #define RECORD_SEMGET 2 64 #define RECORD_SEMCTL 3 65 #define RECORD_SEMTIMEDOP 4 66 #define RECORD_MSGSND 11 67 #define RECORD_MSGRCV 12 68 #define RECORD_MSGGET 13 69 #define RECORD_MSGCTL 14 70 #define RECORD_SHMAT 21 71 #define RECORD_SHMDT 22 72 #define RECORD_SHMGET 23 73 #define RECORD_SHMCTL 24 79 #define RECORD_Q_GETFMT 0x800004 80 #define RECORD_Q_GETINFO 0x800005 81 #define RECORD_Q_GETQUOTA 0x800007 82 #define RECORD_Q_XGETQSTAT (('5' << 8) + 5) 83 #define RECORD_Q_XGETQUOTA (('3' << 8) + 3) 85 #define OUTPUT_REG(val, num) phex_nz ((val), \ 86 TYPE_LENGTH (gdbarch_register_type (regcache->arch (), (num)))) 123 "Process record: error reading " 124 "memory at addr = 0x%s len = %d.\n",
130 if (addrlen <= 0 || addrlen >
tdep->size_sockaddr)
131 addrlen =
tdep->size_sockaddr;
160 "Process record: error reading " 161 "memory at addr = 0x%s " 170 a +=
tdep->size_pointer;
179 a +=
tdep->size_pointer;
183 a +=
tdep->size_pointer;
191 for (i = 0; i < len; i++)
197 "Process record: error " 213 addr +=
tdep->size_iovec;
216 a +=
tdep->size_size_t;
220 a +=
tdep->size_pointer;
257 if (
yquery (
_(
"The next instruction is syscall exit. " 258 "It will make the program exit. " 259 "Do you want to stop the program?")))
312 tdep->size__old_kernel_stat))
378 if (tmpulongest ==
tdep->ioctl_FIOCLEX
379 || tmpulongest ==
tdep->ioctl_FIONCLEX
380 || tmpulongest ==
tdep->ioctl_FIONBIO
381 || tmpulongest ==
tdep->ioctl_FIOASYNC
382 || tmpulongest ==
tdep->ioctl_TCSETS
383 || tmpulongest ==
tdep->ioctl_TCSETSW
384 || tmpulongest ==
tdep->ioctl_TCSETSF
385 || tmpulongest ==
tdep->ioctl_TCSETA
386 || tmpulongest ==
tdep->ioctl_TCSETAW
387 || tmpulongest ==
tdep->ioctl_TCSETAF
388 || tmpulongest ==
tdep->ioctl_TCSBRK
389 || tmpulongest ==
tdep->ioctl_TCXONC
390 || tmpulongest ==
tdep->ioctl_TCFLSH
391 || tmpulongest ==
tdep->ioctl_TIOCEXCL
392 || tmpulongest ==
tdep->ioctl_TIOCNXCL
393 || tmpulongest ==
tdep->ioctl_TIOCSCTTY
394 || tmpulongest ==
tdep->ioctl_TIOCSPGRP
395 || tmpulongest ==
tdep->ioctl_TIOCSTI
396 || tmpulongest ==
tdep->ioctl_TIOCSWINSZ
397 || tmpulongest ==
tdep->ioctl_TIOCMBIS
398 || tmpulongest ==
tdep->ioctl_TIOCMBIC
399 || tmpulongest ==
tdep->ioctl_TIOCMSET
400 || tmpulongest ==
tdep->ioctl_TIOCSSOFTCAR
401 || tmpulongest ==
tdep->ioctl_TIOCCONS
402 || tmpulongest ==
tdep->ioctl_TIOCSSERIAL
403 || tmpulongest ==
tdep->ioctl_TIOCPKT
404 || tmpulongest ==
tdep->ioctl_TIOCNOTTY
405 || tmpulongest ==
tdep->ioctl_TIOCSETD
406 || tmpulongest ==
tdep->ioctl_TCSBRKP
407 || tmpulongest ==
tdep->ioctl_TIOCTTYGSTRUCT
408 || tmpulongest ==
tdep->ioctl_TIOCSBRK
409 || tmpulongest ==
tdep->ioctl_TIOCCBRK
410 || tmpulongest ==
tdep->ioctl_TCSETS2
411 || tmpulongest ==
tdep->ioctl_TCSETSW2
412 || tmpulongest ==
tdep->ioctl_TCSETSF2
413 || tmpulongest ==
tdep->ioctl_TIOCSPTLCK
414 || tmpulongest ==
tdep->ioctl_TIOCSERCONFIG
415 || tmpulongest ==
tdep->ioctl_TIOCSERGWILD
416 || tmpulongest ==
tdep->ioctl_TIOCSERSWILD
417 || tmpulongest ==
tdep->ioctl_TIOCSLCKTRMIOS
418 || tmpulongest ==
tdep->ioctl_TIOCSERGETMULTI
419 || tmpulongest ==
tdep->ioctl_TIOCSERSETMULTI
420 || tmpulongest ==
tdep->ioctl_TIOCMIWAIT
421 || tmpulongest ==
tdep->ioctl_TIOCSHAYESESP)
425 else if (tmpulongest ==
tdep->ioctl_TCGETS
426 || tmpulongest ==
tdep->ioctl_TCGETA
427 || tmpulongest ==
tdep->ioctl_TIOCGLCKTRMIOS)
433 else if (tmpulongest ==
tdep->ioctl_TIOCGPGRP
434 || tmpulongest ==
tdep->ioctl_TIOCGSID)
439 else if (tmpulongest ==
tdep->ioctl_TIOCOUTQ
440 || tmpulongest ==
tdep->ioctl_TIOCMGET
441 || tmpulongest ==
tdep->ioctl_TIOCGSOFTCAR
442 || tmpulongest ==
tdep->ioctl_FIONREAD
443 || tmpulongest ==
tdep->ioctl_TIOCINQ
444 || tmpulongest ==
tdep->ioctl_TIOCGETD
445 || tmpulongest ==
tdep->ioctl_TIOCGPTN
446 || tmpulongest ==
tdep->ioctl_TIOCSERGETLSR)
451 else if (tmpulongest ==
tdep->ioctl_TIOCGWINSZ)
457 else if (tmpulongest ==
tdep->ioctl_TIOCLINUX)
463 else if (tmpulongest ==
tdep->ioctl_TIOCGSERIAL)
466 tdep->size_serial_struct))
469 else if (tmpulongest ==
tdep->ioctl_TCGETS2)
472 tdep->size_termios2))
475 else if (tmpulongest ==
tdep->ioctl_FIOQSIZE)
480 else if (tmpulongest ==
tdep->ioctl_TIOCGICOUNT)
483 tdep->size_serial_icounter_struct))
486 else if (tmpulongest ==
tdep->ioctl_TIOCGHAYESESP)
489 tdep->size_hayes_esp_config))
492 else if (tmpulongest ==
tdep->ioctl_TIOCSERGSTRUCT)
495 "support ioctl request TIOCSERGSTRUCT\n"));
501 "support ioctl request 0x%s.\n"),
511 if (tmpulongest ==
tdep->fcntl_F_GETLK)
525 tdep->size_oldold_utsname))
546 tdep->size_old_sigaction))
559 tdep->size_old_sigset_t))
594 tmpint =
tdep->size_old_gid_t * (int) gidsetsize;
605 unsigned long sz_sel_arg =
tdep->size_long +
tdep->size_pointer * 4;
617 "Process record: error reading memory " 618 "at addr = 0x%s len = %lu.\n",
624 a +=
tdep->size_long;
626 a +=
tdep->size_pointer;
628 a +=
tdep->size_pointer;
630 a +=
tdep->size_pointer;
656 if (
yquery (
_(
"The next instruction is syscall reboot. " 657 "It will restart the computer. " 658 "Do you want to stop the program?")))
680 The next instruction is syscall munmap.\n\ 681 It will free the memory addr = 0x%s len = %u.\n\ 682 It will make record target cannot record some memory change.\n\ 683 Do you want to stop the program?"),
765 "Process record: error reading " 766 "memory at addr = 0x%s " 803 tmpulongest +=
tdep->size_ulong;
805 tdep->size_ulong * 2))
809 "Process record: error reading " 810 "memory at addr = 0x%s len = %d.\n",
812 tdep->size_ulong * 2);
834 tmpulongest +=
tdep->size_ulong * 3;
840 "Process record: error reading " 841 "memory at addr = 0x%s len = %d.\n",
865 tmpulongest +=
tdep->size_ulong * 4;
867 tdep->size_ulong * 2))
871 "Process record: error reading " 872 "memory at addr = 0x%s len = %d.\n",
874 tdep->size_ulong * 2);
891 tmpulongest +=
tdep->size_ulong;
897 "Process record: error reading " 898 "memory at addr = 0x%s len = %d.\n",
907 a +=
tdep->size_ulong;
928 tmpulongest +=
tdep->size_ulong * 3;
930 tdep->size_ulong * 2))
934 "Process record: error reading " 935 "memory at addr = 0x%s len = %d.\n",
937 tdep->size_ulong * 2);
950 "Process record: error reading " 951 "memory at addr = 0x%s " 967 a +=
tdep->size_ulong;
989 tmpulongest +=
tdep->size_ulong;
995 "Process record: error reading " 996 "memory at addr = 0x%s len = %d.\n",
1010 "doesn't support socketcall call 0x%s\n"),
1046 tdep->size_old_utsname))
1098 tmpint = l +
tdep->size_long;
1111 tmpulongest &= 0xffff;
1112 switch (tmpulongest)
1128 tmpint = (int) second +
tdep->size_long;
1135 tdep->size_msqid_ds))
1144 tdep->size_shmid_ds))
1150 "support ipc number %s\n"),
1164 tdep->size_new_utsname))
1170 if (tmpulongest == 0 || tmpulongest == 2)
1190 tdep->size_old_sigset_t))
1202 switch (tmpulongest)
1211 tdep->size_mem_dqinfo))
1216 tdep->size_if_dqblk))
1222 tdep->size_fs_quota_stat))
1235 if (tmpulongest == 2)
1283 for (tmpulongest = 0; tmpulongest < vlen; tmpulongest++)
1290 "Process record: error reading " 1291 "memory at addr = 0x%s len = %d.\n",
1306 vec +=
tdep->size_iovec;
1348 tdep->size_old_uid_t)
1350 tdep->size_old_uid_t))
1366 tdep->size_pollfd * nfds))
1373 if (tmpulongest == 7 || tmpulongest == 8)
1377 if (tmpulongest == 7)
1378 rsize =
tdep->size_NFS_FHSIZE;
1380 rsize =
tdep->size_knfsd_fh;
1392 tdep->size_old_gid_t)
1394 tdep->size_old_gid_t))
1400 switch (tmpulongest)
1408 tdep->size_TASK_COMM_LEN))
1481 tdep->size_cap_user_data_t))
1539 tmpint =
tdep->size_gid_t * (int) gidsetsize;
1585 if (tmpulongest ==
tdep->fcntl_F_GETLK64)
1588 tdep->size_flock64))
1591 else if (tmpulongest !=
tdep->fcntl_F_SETLK64
1592 && tmpulongest !=
tdep->fcntl_F_SETLKW64)
1691 nr *
tdep->size_io_event))
1706 nr *
tdep->size_pointer))
1710 "Process record: error reading memory " 1711 "at addr = 0x%s len = %u.\n",
1713 (
int) (nr *
tdep->size_pointer));
1716 for (i = 0; i < nr; i++)
1724 iocbp +=
tdep->size_pointer;
1739 if (
yquery (
_(
"The next instruction is syscall exit_group. " 1740 "It will make the program exit. " 1741 "Do you want to stop the program?")))
1771 *
tdep->size_epoll_event)))
1838 maxnode *
tdep->size_long))
1888 if (tmpulongest == 6 || tmpulongest == 11)
1961 tdep->size_pollfd * nfds))
1997 nr_pages *
tdep->size_int))
2006 tdep->size_ulong * 2))
2017 tmpint = (int) maxevents *
tdep->size_epoll_event;
2034 "support syscall number %d\n"),
syscall);
#define RECORD_SYS_ACCEPT
struct gdbarch_tdep * tdep
static int record_mem_at_reg(struct regcache *regcache, int regnum, int len)
unsigned int record_debug
int yquery(const char *ctlstr,...)
#define RECORD_PTRACE_PEEKDATA
#define OUTPUT_REG(val, num)
#define RECORD_Q_XGETQSTAT
#define RECORD_SYS_SENDTO
#define RECORD_Q_GETQUOTA
int record_linux_system_call(enum gdb_syscall syscall, struct regcache *regcache, struct linux_record_tdep *tdep)
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
#define RECORD_SYS_LISTEN
#define RECORD_SYS_SETSOCKOPT
void fprintf_unfiltered(struct ui_file *stream, const char *format,...)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
char * pulongest(ULONGEST u)
#define RECORD_SYS_RECVMSG
#define RECORD_SYS_SENDMSG
#define RECORD_Q_XGETQUOTA
#define RECORD_SYS_GETPEERNAME
void printf_unfiltered(const char *format,...)
#define RECORD_SYS_GETSOCKOPT
int record_full_memory_query
#define RECORD_SYS_GETSOCKNAME
int record_full_arch_list_add_mem(CORE_ADDR addr, int len)
char * phex_nz(ULONGEST l, int sizeof_l)
#define RECORD_PTRACE_PEEKTEXT
#define RECORD_PTRACE_PEEKUSR
#define RECORD_SYS_CONNECT
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
#define RECORD_SYS_RECVFROM
static LONGEST extract_signed_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
unsigned long long ULONGEST
#define RECORD_SYS_SHUTDOWN
#define RECORD_SYS_SOCKETPAIR
enum register_status regcache_raw_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
static int record_linux_sockaddr(struct regcache *regcache, struct linux_record_tdep *tdep, ULONGEST addr, ULONGEST len)
#define RECORD_SEMTIMEDOP
enum bfd_endian byte_order
#define RECORD_SYS_SOCKET
static int record_linux_msghdr(struct regcache *regcache, struct linux_record_tdep *tdep, ULONGEST addr)
enum register_status regcache_raw_read_signed(struct regcache *regcache, int regnum, LONGEST *val)