mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-04 13:57:12 +08:00
2009-08-10 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.
This commit is contained in:
@ -1,3 +1,19 @@
|
||||
2009-08-10 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.
|
||||
|
||||
2009-08-10 Hui Zhu <teawater@gmail.com>
|
||||
|
||||
Add AMD64 process record instruction set support.
|
||||
|
@ -371,6 +371,13 @@ i386_linux_intx80_sysenter_record (struct regcache *regcache)
|
||||
|
||||
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);
|
||||
if (ret)
|
||||
@ -481,6 +488,8 @@ i386_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
/* 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 info, struct gdbarch *gdbarch)
|
||||
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 info, struct gdbarch *gdbarch)
|
||||
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 info, struct gdbarch *gdbarch)
|
||||
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 info, struct gdbarch *gdbarch)
|
||||
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;
|
||||
|
1711
gdb/linux-record.c
1711
gdb/linux-record.c
File diff suppressed because it is too large
Load Diff
@ -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,
|
||||
|
Reference in New Issue
Block a user