* config/i386/tm-i386.h (STAB_REG_TO_REGNUM, SDB_REG_TO_REGNUM,
DWARF_REG_TO_REGNUM, DWARF2_REG_TO_REGNUM): New defines. (i386_stab_reg_to_regnum, i386_dwarf_reg_to_regnum): New prototypes. * config/i386/tm-fbsd.h, config/i386/tm-i386gnu.h, config/i386/tm-linux.h (STAB_REG_TO_REGNUM): Redefine to call i386_dwarf_reg_to_regnum. * i386-tdep.c (i386_stab_reg_to_regnum, i386_dwarf_reg_to_regnum): New functions.
This commit is contained in:
parent
3d2615808f
commit
85540d8c4a
|
@ -1,5 +1,15 @@
|
|||
2001-07-28 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* config/i386/tm-i386.h (STAB_REG_TO_REGNUM, SDB_REG_TO_REGNUM,
|
||||
DWARF_REG_TO_REGNUM, DWARF2_REG_TO_REGNUM): New defines.
|
||||
(i386_stab_reg_to_regnum, i386_dwarf_reg_to_regnum): New
|
||||
prototypes.
|
||||
* config/i386/tm-fbsd.h, config/i386/tm-i386gnu.h,
|
||||
config/i386/tm-linux.h (STAB_REG_TO_REGNUM): Redefine to call
|
||||
i386_dwarf_reg_to_regnum.
|
||||
* i386-tdep.c (i386_stab_reg_to_regnum, i386_dwarf_reg_to_regnum):
|
||||
New functions.
|
||||
|
||||
* i386-tdep.c: Include "gdb_assert.h"
|
||||
(i386_register_convert_to_virtual): Fix such that it can handle
|
||||
conversion to any floating-point type. Assert that we are dealing
|
||||
|
|
|
@ -24,6 +24,14 @@
|
|||
#define HAVE_I387_REGS
|
||||
#include "i386/tm-i386.h"
|
||||
|
||||
/* FreeBSD/ELF uses stabs-in-ELF with the DWARF register numbering
|
||||
scheme by default, so we must redefine STAB_REG_TO_REGNUM. This
|
||||
messes up the floating-point registers for a.out, but there is not
|
||||
much we can do about that. */
|
||||
|
||||
#undef STAB_REG_TO_REGNUM
|
||||
#define STAB_REG_TO_REGNUM(reg) i386_dwarf_reg_to_regnum ((reg))
|
||||
|
||||
/* FreeBSD uses the old gcc convention for struct returns. */
|
||||
|
||||
#define USE_STRUCT_CONVENTION(gcc_p, type) \
|
||||
|
|
|
@ -42,6 +42,11 @@
|
|||
#define HAVE_I387_REGS
|
||||
#include "i386/tm-i386.h"
|
||||
|
||||
/* We use stabs-in-ELF with the DWARF register numbering scheme. */
|
||||
|
||||
#undef STAB_REG_TO_REGNUM
|
||||
#define STAB_REG_TO_REGNUM(reg) i386_dwarf_reg_to_regnum ((reg))
|
||||
|
||||
/* Offset to saved PC in sigcontext. */
|
||||
#define SIGCONTEXT_PC_OFFSET 68
|
||||
|
||||
|
|
|
@ -59,6 +59,68 @@ int i386_register_raw_size[MAX_NUM_REGS] = {
|
|||
/* i386_register_virtual_size[i] is the size in bytes of the virtual
|
||||
type of register i. */
|
||||
int i386_register_virtual_size[MAX_NUM_REGS];
|
||||
|
||||
/* Convert stabs register number REG to the appropriate register
|
||||
number used by GDB. */
|
||||
|
||||
int
|
||||
i386_stab_reg_to_regnum (int reg)
|
||||
{
|
||||
/* This implements what GCC calls the "default" register map. */
|
||||
if (reg >= 0 && reg <= 7)
|
||||
{
|
||||
/* General registers. */
|
||||
return reg;
|
||||
}
|
||||
else if (reg >= 12 && reg <= 19)
|
||||
{
|
||||
/* Floating-point registers. */
|
||||
return reg - 12 + FP0_REGNUM;
|
||||
}
|
||||
else if (reg >= 21 && reg <= 28)
|
||||
{
|
||||
/* SSE registers. */
|
||||
return reg - 21 + XMM0_REGNUM;
|
||||
}
|
||||
else if (reg >= 29 && reg <= 36)
|
||||
{
|
||||
/* MMX registers. */
|
||||
/* FIXME: kettenis/2001-07-28: Should we have the MMX registers
|
||||
as pseudo-registers? */
|
||||
return reg - 29 + FP0_REGNUM;
|
||||
}
|
||||
|
||||
/* This will hopefully provoke a warning. */
|
||||
return NUM_REGS + NUM_PSEUDO_REGS;
|
||||
}
|
||||
|
||||
/* Convert Dwarf register number REG to the appropriate register
|
||||
number used by GDB. */
|
||||
|
||||
int
|
||||
i386_dwarf_reg_to_regnum (int reg)
|
||||
{
|
||||
/* The DWARF register numbering includes %eip and %eflags, and
|
||||
numbers the floating point registers differently. */
|
||||
if (reg >= 0 && reg <= 9)
|
||||
{
|
||||
/* General registers. */
|
||||
return reg;
|
||||
}
|
||||
else if (reg >= 11 && reg <= 18)
|
||||
{
|
||||
/* Floating-point registers. */
|
||||
return reg - 11 + FP0_REGNUM;
|
||||
}
|
||||
else if (reg >= 21)
|
||||
{
|
||||
/* The SSE and MMX registers have identical numbers as in stabs. */
|
||||
return i386_stab_reg_to_regnum (reg);
|
||||
}
|
||||
|
||||
/* This will hopefully provoke a warning. */
|
||||
return NUM_REGS + NUM_PSEUDO_REGS;
|
||||
}
|
||||
|
||||
|
||||
/* This is the variable that is set with "set disassembly-flavor", and
|
||||
|
|
Loading…
Reference in New Issue