X-Git-Url: http://drtracing.org/?a=blobdiff_plain;ds=sidebyside;f=gdb%2Fi386-tdep.h;h=b3fef438964fb5875becef964fb4d4af108ea507;hb=e17a4113357102b55cfa5b80557d590a46a43300;hp=c4735f4ae8af6004a1d7cfb24f6d6a2c15e0e91b;hpb=20a6ec495b38548cc88165e7c18203d6d387d55d;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/i386-tdep.h b/gdb/i386-tdep.h index c4735f4ae8..b3fef43896 100644 --- a/gdb/i386-tdep.h +++ b/gdb/i386-tdep.h @@ -1,6 +1,6 @@ /* Target-dependent code for the i386. - Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007, 2008 + Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GDB. @@ -104,8 +104,17 @@ struct gdbarch_tdep int sc_sp_offset; /* ISA-specific data types. */ + struct type *i386_eflags_type; + struct type *i386_mxcsr_type; struct type *i386_mmx_type; struct type *i386_sse_type; + struct type *i387_ext_type; + + /* Process record/replay target. */ + /* Parse intx80 args. */ + int (*i386_intx80_record) (struct regcache *regcache); + /* Parse sysenter args. */ + int (*i386_sysenter_record) (struct regcache *regcache); }; /* Floating-point registers. */ @@ -153,19 +162,28 @@ enum i386_regnum #define I386_MAX_REGISTER_SIZE 16 /* Types for i386-specific registers. */ -extern struct type *i386_eflags_type; -extern struct type *i386_mxcsr_type; - +extern struct type *i386_eflags_type (struct gdbarch *gdbarch); +extern struct type *i386_mxcsr_type (struct gdbarch *gdbarch); extern struct type *i386_mmx_type (struct gdbarch *gdbarch); extern struct type *i386_sse_type (struct gdbarch *gdbarch); +extern struct type *i387_ext_type (struct gdbarch *gdbarch); /* Segment selectors. */ #define I386_SEL_RPL 0x0003 /* Requester's Privilege Level mask. */ #define I386_SEL_UPL 0x0003 /* User Privilige Level. */ #define I386_SEL_KPL 0x0000 /* Kernel Privilige Level. */ +/* The length of the longest i386 instruction (according to + include/asm-i386/kprobes.h in Linux 2.6. */ +#define I386_MAX_INSN_LEN (16) + /* Functions exported from i386-tdep.c. */ -extern CORE_ADDR i386_pe_skip_trampoline_code (CORE_ADDR pc, char *name); +extern CORE_ADDR i386_pe_skip_trampoline_code (struct frame_info *frame, + CORE_ADDR pc, char *name); +extern CORE_ADDR i386_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc); + +/* Return whether the THIS_FRAME corresponds to a sigtramp routine. */ +extern int i386_sigtramp_p (struct frame_info *this_frame); /* Return the name of register REGNUM. */ extern char const *i386_register_name (struct gdbarch * gdbarch, int regnum); @@ -195,11 +213,20 @@ extern const struct regset * i386_regset_from_core_section (struct gdbarch *gdbarch, const char *sect_name, size_t sect_size); + +extern void i386_displaced_step_fixup (struct gdbarch *gdbarch, + struct displaced_step_closure *closure, + CORE_ADDR from, CORE_ADDR to, + struct regcache *regs); + /* Initialize a basic ELF architecture variant. */ extern void i386_elf_init_abi (struct gdbarch_info, struct gdbarch *); /* Initialize a SVR4 architecture variant. */ extern void i386_svr4_init_abi (struct gdbarch_info, struct gdbarch *); + +extern int i386_process_record (struct gdbarch *gdbarch, + struct regcache *regcache, CORE_ADDR addr); /* Functions and variables exported from i386bsd-tdep.c. */