mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-03 04:12:10 +08:00
2006-01-23 Andrew Stubbs <andrew.stubbs@st.com>
* sh-tdep.c: Include reggroups.h. (sh_register_reggroup_p): New function. (sh_gdbarch_init): Add call to set_gdbarch_register_reggroup_p. * Makefile.in (sh-tdep.o): Add dependency on reggroups.h.
This commit is contained in:
parent
4b505b1269
commit
dda6380765
@ -1,3 +1,10 @@
|
||||
2006-01-23 Andrew Stubbs <andrew.stubbs@st.com>
|
||||
|
||||
* sh-tdep.c: Include reggroups.h.
|
||||
(sh_register_reggroup_p): New function.
|
||||
(sh_gdbarch_init): Add call to set_gdbarch_register_reggroup_p.
|
||||
* Makefile.in (sh-tdep.o): Add dependency on reggroups.h.
|
||||
|
||||
2006-01-23 Andrew Stubbs <andrew.stubbs@st.com>
|
||||
|
||||
* cli/cli-cmds.c: Include fcntl.h.
|
||||
|
@ -2538,7 +2538,7 @@ sh-tdep.o: sh-tdep.c $(defs_h) $(frame_h) $(frame_base_h) $(frame_unwind_h) \
|
||||
$(value_h) $(dis_asm_h) $(inferior_h) $(gdb_string_h) \
|
||||
$(gdb_assert_h) $(arch_utils_h) $(floatformat_h) $(regcache_h) \
|
||||
$(doublest_h) $(osabi_h) $(sh_tdep_h) $(elf_bfd_h) $(solib_svr4_h) \
|
||||
$(elf_sh_h) $(gdb_sim_sh_h)
|
||||
$(elf_sh_h) $(gdb_sim_sh_h) $(reggroups_h)
|
||||
sol2-tdep.o: sol2-tdep.c $(defs_h) $(frame_h) $(symtab_h)
|
||||
solib-aix5.o: solib-aix5.c $(defs_h) $(gdb_string_h) $(elf_external_h) \
|
||||
$(symtab_h) $(bfd_h) $(symfile_h) $(objfiles_h) $(gdbcore_h) \
|
||||
|
@ -44,6 +44,7 @@
|
||||
#include "regcache.h"
|
||||
#include "doublest.h"
|
||||
#include "osabi.h"
|
||||
#include "reggroups.h"
|
||||
|
||||
#include "sh-tdep.h"
|
||||
|
||||
@ -1812,6 +1813,47 @@ sh_default_register_type (struct gdbarch *gdbarch, int reg_nr)
|
||||
return builtin_type_int;
|
||||
}
|
||||
|
||||
/* Is a register in a reggroup?
|
||||
The default code in reggroup.c doesn't identify system registers, some
|
||||
float registers or any of the vector registers.
|
||||
TODO: sh2a and dsp registers. */
|
||||
int
|
||||
sh_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
|
||||
struct reggroup *reggroup)
|
||||
{
|
||||
if (REGISTER_NAME (regnum) == NULL
|
||||
|| *REGISTER_NAME (regnum) == '\0')
|
||||
return 0;
|
||||
|
||||
if (reggroup == float_reggroup
|
||||
&& (regnum == FPUL_REGNUM
|
||||
|| regnum == FPSCR_REGNUM))
|
||||
return 1;
|
||||
|
||||
if (regnum >= FV0_REGNUM && regnum <= FV_LAST_REGNUM)
|
||||
{
|
||||
if (reggroup == vector_reggroup || reggroup == float_reggroup)
|
||||
return 1;
|
||||
if (reggroup == general_reggroup)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (regnum == VBR_REGNUM
|
||||
|| regnum == SR_REGNUM
|
||||
|| regnum == FPSCR_REGNUM
|
||||
|| regnum == SSR_REGNUM
|
||||
|| regnum == SPC_REGNUM)
|
||||
{
|
||||
if (reggroup == system_reggroup)
|
||||
return 1;
|
||||
if (reggroup == general_reggroup)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* The default code can cope with any other registers. */
|
||||
return default_register_reggroup_p (gdbarch, regnum, reggroup);
|
||||
}
|
||||
|
||||
/* On the sh4, the DRi pseudo registers are problematic if the target
|
||||
is little endian. When the user writes one of those registers, for
|
||||
instance with 'ser var $dr0=1', we want the double to be stored
|
||||
@ -2371,6 +2413,7 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
set_gdbarch_num_pseudo_regs (gdbarch, 0);
|
||||
|
||||
set_gdbarch_register_type (gdbarch, sh_default_register_type);
|
||||
set_gdbarch_register_reggroup_p (gdbarch, sh_register_reggroup_p);
|
||||
|
||||
set_gdbarch_breakpoint_from_pc (gdbarch, sh_breakpoint_from_pc);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user