* 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:
Mark Kettenis 2001-07-28 17:03:38 +00:00
parent 3d2615808f
commit 85540d8c4a
4 changed files with 85 additions and 0 deletions

View File

@ -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

View File

@ -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) \

View File

@ -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

View File

@ -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