GDB (xrefs)
Defines | Functions | Variables
/home/stan/gdb/src/gdb/i386-linux-tdep.c File Reference
#include "defs.h"
#include "gdbcore.h"
#include "frame.h"
#include "value.h"
#include "regcache.h"
#include "regset.h"
#include "inferior.h"
#include "osabi.h"
#include "reggroups.h"
#include "dwarf2-frame.h"
#include "gdb_string.h"
#include "i386-tdep.h"
#include "i386-linux-tdep.h"
#include "linux-tdep.h"
#include "glibc-tdep.h"
#include "solib-svr4.h"
#include "symtab.h"
#include "arch-utils.h"
#include "xml-syscall.h"
#include "i387-tdep.h"
#include "i386-xstate.h"
#include "record-full.h"
#include "linux-record.h"
#include <stdint.h>
#include "features/i386/i386-linux.c"
#include "features/i386/i386-mmx-linux.c"
#include "features/i386/i386-avx-linux.c"

Go to the source code of this file.

Defines

#define XML_SYSCALL_FILENAME_I386   "syscalls/i386-linux.xml"
#define LINUX_SIGTRAMP_INSN0   0x58 /* pop %eax */
#define LINUX_SIGTRAMP_OFFSET0   0
#define LINUX_SIGTRAMP_INSN1   0xb8 /* mov $NNNN, %eax */
#define LINUX_SIGTRAMP_OFFSET1   1
#define LINUX_SIGTRAMP_INSN2   0xcd /* int */
#define LINUX_SIGTRAMP_OFFSET2   6
#define LINUX_SIGTRAMP_LEN   (sizeof linux_sigtramp_code)
#define LINUX_RT_SIGTRAMP_INSN0   0xb8 /* mov $NNNN, %eax */
#define LINUX_RT_SIGTRAMP_OFFSET0   0
#define LINUX_RT_SIGTRAMP_INSN1   0xcd /* int */
#define LINUX_RT_SIGTRAMP_OFFSET1   5
#define LINUX_RT_SIGTRAMP_LEN   (sizeof linux_rt_sigtramp_code)
#define I386_LINUX_UCONTEXT_SIGCONTEXT_OFFSET   20
#define I386_LINUX_xstate   270
#define I386_LINUX_frame_size   732

Functions

static int i386_linux_register_reggroup_p (struct gdbarch *gdbarch, int regnum, struct reggroup *group)
static CORE_ADDR i386_linux_sigtramp_start (struct frame_info *this_frame)
static CORE_ADDR i386_linux_rt_sigtramp_start (struct frame_info *this_frame)
static int i386_linux_sigtramp_p (struct frame_info *this_frame)
static int i386_linux_dwarf_signal_frame_p (struct gdbarch *gdbarch, struct frame_info *this_frame)
static CORE_ADDR i386_linux_sigcontext_addr (struct frame_info *this_frame)
static void i386_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
static int i386_all_but_ip_registers_record (struct regcache *regcache)
static enum gdb_syscall i386_canonicalize_syscall (int syscall)
static int i386_linux_intx80_sysenter_syscall_record (struct regcache *regcache)
static int i386_linux_record_signal (struct gdbarch *gdbarch, struct regcache *regcache, enum gdb_signal signal)
static LONGEST i386_linux_get_syscall_number_from_regcache (struct regcache *regcache)
static LONGEST i386_linux_get_syscall_number (struct gdbarch *gdbarch, ptid_t ptid)
uint64_t i386_linux_core_read_xcr0 (bfd *abfd)
static struct target_desci386_linux_core_read_description (struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd)
static struct
displaced_step_closure
i386_linux_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
static void i386_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
void _initialize_i386_linux_tdep (void)

Variables

static struct core_regset_section i386_linux_regset_sections []
static struct core_regset_section i386_linux_sse_regset_sections []
static struct core_regset_section i386_linux_avx_regset_sections []
static const gdb_byte linux_sigtramp_code []
static const gdb_byte linux_rt_sigtramp_code []
static struct linux_record_tdep i386_linux_record_tdep
int i386_linux_gregset_reg_offset []
static int i386_linux_sc_reg_offset []

Define Documentation

#define I386_LINUX_frame_size   732

Definition at line 460 of file i386-linux-tdep.c.

Referenced by i386_linux_record_signal().

Definition at line 296 of file i386-linux-tdep.c.

Referenced by i386_linux_sigcontext_addr().

#define I386_LINUX_xstate   270

Definition at line 459 of file i386-linux-tdep.c.

Referenced by i386_linux_record_signal().

#define LINUX_RT_SIGTRAMP_INSN0   0xb8 /* mov $NNNN, %eax */

Definition at line 200 of file i386-linux-tdep.c.

Referenced by i386_linux_rt_sigtramp_start().

#define LINUX_RT_SIGTRAMP_INSN1   0xcd /* int */

Definition at line 202 of file i386-linux-tdep.c.

Referenced by i386_linux_rt_sigtramp_start().

Definition at line 211 of file i386-linux-tdep.c.

Referenced by i386_linux_rt_sigtramp_start().

#define LINUX_RT_SIGTRAMP_OFFSET0   0

Definition at line 201 of file i386-linux-tdep.c.

#define LINUX_RT_SIGTRAMP_OFFSET1   5

Definition at line 203 of file i386-linux-tdep.c.

Referenced by i386_linux_rt_sigtramp_start().

#define LINUX_SIGTRAMP_INSN0   0x58 /* pop %eax */

Definition at line 129 of file i386-linux-tdep.c.

Referenced by i386_linux_sigtramp_start().

#define LINUX_SIGTRAMP_INSN1   0xb8 /* mov $NNNN, %eax */

Definition at line 131 of file i386-linux-tdep.c.

Referenced by i386_linux_sigtramp_start().

#define LINUX_SIGTRAMP_INSN2   0xcd /* int */

Definition at line 133 of file i386-linux-tdep.c.

Referenced by i386_linux_sigtramp_start().

#define LINUX_SIGTRAMP_LEN   (sizeof linux_sigtramp_code)

Definition at line 143 of file i386-linux-tdep.c.

Referenced by i386_linux_sigtramp_start().

#define LINUX_SIGTRAMP_OFFSET0   0

Definition at line 130 of file i386-linux-tdep.c.

#define LINUX_SIGTRAMP_OFFSET1   1

Definition at line 132 of file i386-linux-tdep.c.

Referenced by i386_linux_sigtramp_start().

#define LINUX_SIGTRAMP_OFFSET2   6

Definition at line 134 of file i386-linux-tdep.c.

Referenced by i386_linux_sigtramp_start().

#define XML_SYSCALL_FILENAME_I386   "syscalls/i386-linux.xml"

Definition at line 45 of file i386-linux-tdep.c.

Referenced by i386_linux_init_abi().


Function Documentation

void _initialize_i386_linux_tdep ( void  )
static int i386_all_but_ip_registers_record ( struct regcache regcache) [static]
static enum gdb_syscall i386_canonicalize_syscall ( int  syscall) [static]

Definition at line 401 of file i386-linux-tdep.c.

Referenced by i386_linux_intx80_sysenter_syscall_record().

static struct target_desc* i386_linux_core_read_description ( struct gdbarch gdbarch,
struct target_ops target,
bfd *  abfd 
) [static, read]
uint64_t i386_linux_core_read_xcr0 ( bfd *  abfd)
static struct displaced_step_closure* i386_linux_displaced_step_copy_insn ( struct gdbarch gdbarch,
CORE_ADDR  from,
CORE_ADDR  to,
struct regcache regs 
) [static, read]
static int i386_linux_dwarf_signal_frame_p ( struct gdbarch gdbarch,
struct frame_info this_frame 
) [static]

Definition at line 278 of file i386-linux-tdep.c.

References find_pc_partial_function(), get_frame_pc(), and name.

Referenced by i386_linux_init_abi().

static LONGEST i386_linux_get_syscall_number ( struct gdbarch gdbarch,
ptid_t  ptid 
) [static]
static LONGEST i386_linux_get_syscall_number_from_regcache ( struct regcache regcache) [static]
static void i386_linux_init_abi ( struct gdbarch_info  info,
struct gdbarch gdbarch 
) [static]

Definition at line 707 of file i386-linux-tdep.c.

References linux_record_tdep::arg1, linux_record_tdep::arg2, linux_record_tdep::arg3, linux_record_tdep::arg4, linux_record_tdep::arg5, linux_record_tdep::arg6, displaced_step_at_entry_point(), dwarf2_frame_set_signal_frame_p(), linux_record_tdep::fcntl_F_GETLK, linux_record_tdep::fcntl_F_GETLK64, linux_record_tdep::fcntl_F_SETLK64, linux_record_tdep::fcntl_F_SETLKW64, find_solib_trampoline_target(), gdb_assert, gdbarch_int_bit(), gdbarch_long_bit(), gdbarch_ptr_bit(), gdbarch_tdep(), glibc_skip_solib_resolver(), gdbarch_tdep::gregset_num_regs, gdbarch_tdep::gregset_reg_offset, i386_displaced_step_fixup(), I386_EBP_REGNUM, I386_EBX_REGNUM, I386_ECX_REGNUM, I386_EDI_REGNUM, I386_EDX_REGNUM, i386_elf_init_abi(), I386_ESI_REGNUM, gdbarch_tdep::i386_intx80_record, i386_linux_core_read_description(), i386_linux_displaced_step_copy_insn(), i386_linux_dwarf_signal_frame_p(), i386_linux_get_syscall_number(), i386_linux_gregset_reg_offset, i386_linux_intx80_sysenter_syscall_record(), I386_LINUX_NUM_REGS, I386_LINUX_ORIG_EAX_REGNUM, i386_linux_record_signal(), i386_linux_record_tdep, i386_linux_register_reggroup_p(), i386_linux_sc_reg_offset, i386_linux_sigcontext_addr(), i386_linux_sigtramp_p(), i386_linux_write_pc(), I386_LINUX_XSAVE_XCR0_OFFSET, i386_process_record(), gdbarch_tdep::i386_syscall_record, gdbarch_tdep::i386_sysenter_record, linux_record_tdep::ioctl_FIOASYNC, linux_record_tdep::ioctl_FIOCLEX, linux_record_tdep::ioctl_FIONBIO, linux_record_tdep::ioctl_FIONCLEX, linux_record_tdep::ioctl_FIONREAD, linux_record_tdep::ioctl_FIOQSIZE, linux_record_tdep::ioctl_TCFLSH, linux_record_tdep::ioctl_TCGETA, linux_record_tdep::ioctl_TCGETS, linux_record_tdep::ioctl_TCGETS2, linux_record_tdep::ioctl_TCSBRK, linux_record_tdep::ioctl_TCSBRKP, linux_record_tdep::ioctl_TCSETA, linux_record_tdep::ioctl_TCSETAF, linux_record_tdep::ioctl_TCSETAW, linux_record_tdep::ioctl_TCSETS, linux_record_tdep::ioctl_TCSETS2, linux_record_tdep::ioctl_TCSETSF, linux_record_tdep::ioctl_TCSETSF2, linux_record_tdep::ioctl_TCSETSW, linux_record_tdep::ioctl_TCSETSW2, linux_record_tdep::ioctl_TCXONC, linux_record_tdep::ioctl_TIOCCBRK, linux_record_tdep::ioctl_TIOCCONS, linux_record_tdep::ioctl_TIOCEXCL, linux_record_tdep::ioctl_TIOCGETD, linux_record_tdep::ioctl_TIOCGHAYESESP, linux_record_tdep::ioctl_TIOCGICOUNT, linux_record_tdep::ioctl_TIOCGLCKTRMIOS, linux_record_tdep::ioctl_TIOCGPGRP, linux_record_tdep::ioctl_TIOCGPTN, linux_record_tdep::ioctl_TIOCGSERIAL, linux_record_tdep::ioctl_TIOCGSID, linux_record_tdep::ioctl_TIOCGSOFTCAR, linux_record_tdep::ioctl_TIOCGWINSZ, linux_record_tdep::ioctl_TIOCINQ, linux_record_tdep::ioctl_TIOCLINUX, linux_record_tdep::ioctl_TIOCMBIC, linux_record_tdep::ioctl_TIOCMBIS, linux_record_tdep::ioctl_TIOCMGET, linux_record_tdep::ioctl_TIOCMIWAIT, linux_record_tdep::ioctl_TIOCMSET, linux_record_tdep::ioctl_TIOCNOTTY, linux_record_tdep::ioctl_TIOCNXCL, linux_record_tdep::ioctl_TIOCOUTQ, linux_record_tdep::ioctl_TIOCPKT, linux_record_tdep::ioctl_TIOCSBRK, linux_record_tdep::ioctl_TIOCSCTTY, linux_record_tdep::ioctl_TIOCSERCONFIG, linux_record_tdep::ioctl_TIOCSERGETLSR, linux_record_tdep::ioctl_TIOCSERGETMULTI, linux_record_tdep::ioctl_TIOCSERGSTRUCT, linux_record_tdep::ioctl_TIOCSERGWILD, linux_record_tdep::ioctl_TIOCSERSETMULTI, linux_record_tdep::ioctl_TIOCSERSWILD, linux_record_tdep::ioctl_TIOCSETD, linux_record_tdep::ioctl_TIOCSHAYESESP, linux_record_tdep::ioctl_TIOCSLCKTRMIOS, linux_record_tdep::ioctl_TIOCSPGRP, linux_record_tdep::ioctl_TIOCSPTLCK, linux_record_tdep::ioctl_TIOCSSERIAL, linux_record_tdep::ioctl_TIOCSSOFTCAR, linux_record_tdep::ioctl_TIOCSTI, linux_record_tdep::ioctl_TIOCSWINSZ, linux_record_tdep::ioctl_TIOCTTYGSTRUCT, gdbarch_tdep::jb_pc_offset, linux_get_siginfo_type(), linux_init_abi(), gdbarch_tdep::register_reggroup_p, gdbarch_tdep::sc_num_regs, gdbarch_tdep::sc_reg_offset, set_gdbarch_core_read_description(), set_gdbarch_core_regset_sections(), set_gdbarch_displaced_step_copy_insn(), set_gdbarch_displaced_step_fixup(), set_gdbarch_displaced_step_free_closure(), set_gdbarch_displaced_step_location(), set_gdbarch_fetch_tls_load_module_address(), set_gdbarch_get_siginfo_type(), set_gdbarch_get_syscall_number(), set_gdbarch_num_regs(), set_gdbarch_process_record(), set_gdbarch_process_record_signal(), set_gdbarch_skip_solib_resolver(), set_gdbarch_skip_trampoline_code(), set_gdbarch_sofun_address_maybe_missing(), set_gdbarch_write_pc(), set_solib_svr4_fetch_link_map_offsets(), set_xml_syscall_file_name(), gdbarch_tdep::sigcontext_addr, gdbarch_tdep::sigtramp_p, simple_displaced_step_free_closure(), linux_record_tdep::size__old_kernel_stat, linux_record_tdep::size_cap_user_data_t, linux_record_tdep::size_dirent, linux_record_tdep::size_dirent64, linux_record_tdep::size_epoll_event, linux_record_tdep::size_fd_set, linux_record_tdep::size_flock, linux_record_tdep::size_flock64, linux_record_tdep::size_fs_quota_stat, linux_record_tdep::size_gid_t, linux_record_tdep::size_hayes_esp_config, linux_record_tdep::size_if_dqblk, linux_record_tdep::size_int, linux_record_tdep::size_io_event, linux_record_tdep::size_iocb, linux_record_tdep::size_iovec, linux_record_tdep::size_itimerspec, linux_record_tdep::size_itimerval, linux_record_tdep::size_knfsd_fh, linux_record_tdep::size_loff_t, linux_record_tdep::size_long, linux_record_tdep::size_mem_dqinfo, linux_record_tdep::size_mq_attr, linux_record_tdep::size_msghdr, linux_record_tdep::size_msqid_ds, linux_record_tdep::size_new_utsname, linux_record_tdep::size_NFS_FHSIZE, linux_record_tdep::size_off_t, linux_record_tdep::size_old_gid_t, linux_record_tdep::size_old_sigaction, linux_record_tdep::size_old_sigset_t, linux_record_tdep::size_old_uid_t, linux_record_tdep::size_old_utsname, linux_record_tdep::size_oldold_utsname, linux_record_tdep::size_PAGE_SIZE, linux_record_tdep::size_pid_t, linux_record_tdep::size_pointer, linux_record_tdep::size_pollfd, linux_record_tdep::size_rlimit, linux_record_tdep::size_rusage, linux_record_tdep::size_serial_icounter_struct, linux_record_tdep::size_serial_struct, linux_record_tdep::size_shmid_ds, linux_record_tdep::size_sigaction, linux_record_tdep::size_siginfo, linux_record_tdep::size_siginfo_t, linux_record_tdep::size_sigset_t, linux_record_tdep::size_size_t, linux_record_tdep::size_sockaddr, linux_record_tdep::size_stack_t, linux_record_tdep::size_stat, linux_record_tdep::size_stat64, linux_record_tdep::size_statfs, linux_record_tdep::size_statfs64, linux_record_tdep::size_sysinfo, linux_record_tdep::size_TASK_COMM_LEN, linux_record_tdep::size_termios, linux_record_tdep::size_termios2, linux_record_tdep::size_timespec, linux_record_tdep::size_timeval, linux_record_tdep::size_timex, linux_record_tdep::size_timezone, linux_record_tdep::size_tms, linux_record_tdep::size_uid_t, linux_record_tdep::size_ulong, linux_record_tdep::size_user_desc, linux_record_tdep::size_ustat, linux_record_tdep::size_winsize, gdbarch_tdep::sizeof_gregset, svr4_fetch_objfile_link_map(), svr4_ilp32_fetch_link_map_offsets(), gdbarch_info::target_desc, gdbarch_info::tdep_info, gdbarch_tdep::tdesc, tdesc_data, tdesc_find_feature(), tdesc_has_registers(), tdesc_i386_linux, tdesc_numbered_register(), XML_SYSCALL_FILENAME_I386, and gdbarch_tdep::xsave_xcr0_offset.

static int i386_linux_intx80_sysenter_syscall_record ( struct regcache regcache) [static]
static int i386_linux_record_signal ( struct gdbarch gdbarch,
struct regcache regcache,
enum gdb_signal  signal 
) [static]
static int i386_linux_register_reggroup_p ( struct gdbarch gdbarch,
int  regnum,
struct reggroup group 
) [static]
static CORE_ADDR i386_linux_rt_sigtramp_start ( struct frame_info this_frame) [static]
static CORE_ADDR i386_linux_sigcontext_addr ( struct frame_info this_frame) [static]
static int i386_linux_sigtramp_p ( struct frame_info this_frame) [static]
static CORE_ADDR i386_linux_sigtramp_start ( struct frame_info this_frame) [static]
static void i386_linux_write_pc ( struct regcache regcache,
CORE_ADDR  pc 
) [static]

Variable Documentation

Initial value:
{
  { ".reg", 68, "general-purpose" },
  { ".reg-xstate", I386_XSTATE_MAX_SIZE, "XSAVE extended state" },
  { NULL, 0 }
}

Definition at line 70 of file i386-linux-tdep.c.

Initial value:
{
  6 * 4,                        
  1 * 4,                        
  2 * 4,                        
  0 * 4,                        
  15 * 4,                       
  5 * 4,                        
  3 * 4,                        
  4 * 4,                        
  12 * 4,                       
  14 * 4,                       
  13 * 4,                       
  16 * 4,                       
  7 * 4,                        
  8 * 4,                        
  9 * 4,                        
  10 * 4,                       
  -1, -1, -1, -1, -1, -1, -1, -1,
  -1, -1, -1, -1, -1, -1, -1, -1,
  -1, -1, -1, -1, -1, -1, -1, -1,
  -1,
  -1, -1, -1, -1, -1, -1, -1, -1,
  11 * 4                        
}

Definition at line 549 of file i386-linux-tdep.c.

Referenced by fetch_register(), fill_gregset(), i386_linux_init_abi(), store_register(), and supply_gregset().

Initial value:
{
  { ".reg", 68, "general-purpose" },
  { ".reg2", 108, "floating-point" },
  { NULL, 0 }
}

Definition at line 56 of file i386-linux-tdep.c.

Initial value:
{
  11 * 4,                       
  10 * 4,                       
  9 * 4,                        
  8 * 4,                        
  7 * 4,                        
  6 * 4,                        
  5 * 4,                        
  4 * 4,                        
  14 * 4,                       
  16 * 4,                       
  15 * 4,                       
  18 * 4,                       
  3 * 4,                        
  2 * 4,                        
  1 * 4,                        
  0 * 4                         
}

Definition at line 579 of file i386-linux-tdep.c.

Referenced by i386_linux_init_abi().

Initial value:
{
  { ".reg", 68, "general-purpose" },
  { ".reg-xfp", 512, "extended floating-point" },
  { NULL, 0 }
}

Definition at line 63 of file i386-linux-tdep.c.

Initial value:
{
  LINUX_RT_SIGTRAMP_INSN0, 0xad, 0x00, 0x00, 0x00,      
  LINUX_RT_SIGTRAMP_INSN1, 0x80                         
}

Definition at line 205 of file i386-linux-tdep.c.

Referenced by i386_linux_rt_sigtramp_start().

Initial value:

Definition at line 136 of file i386-linux-tdep.c.

Referenced by i386_linux_sigtramp_start().

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines