From: Andrew STUBBS <andrew.stubbs@st.com>
To: Daniel Jacobowitz <drow@false.org>, gdb-patches@sources.redhat.com
Subject: Re: [SH] PATCH: Define the register groups
Date: Mon, 23 Jan 2006 15:51:00 -0000 [thread overview]
Message-ID: <43D4FADC.4070303@st.com> (raw)
In-Reply-To: <20060120233520.GJ21181@nevyn.them.org>
[-- Attachment #1: Type: text/plain, Size: 2176 bytes --]
Daniel Jacobowitz wrote:
> - Are the fv registers for floating point vectors? Since you
> put them in both info float and info vector. I'm guessing that
> they are. Makes sense.
Yes.
> - Can we reuse default_register_reggroup_p for most of this, and
> just handle the register numbers that it's likely to get
> wrong? e.g. we probably do need to handle FPUL here - but
> calling the default will handle dr0 just fine.
Yes, I hadn't thought of that, but I suppose it can. I attach an
implementation of this patch. Actually, FPUL is handled fine, but FPSCR
is not, and, more to the point, none of the vector registers are.
> - You've put a bunch of registers in system_reggroup (e.g. pc, pr)
> that other folks don't; but no one besides the TUI uses that
> anyway, so it doesn't really matter. I wouldn't have included
> those two. I don't remember what the other ones you listed do,
> so I've got no idea about them :-)
Well, there is, of course, a debate to be had over many of the
registers. I have included FPSCR, a system register, in the float
reggroup because (to the initiated) it helps you read the other float
registers. I'm not really sure what system_reggroup is supposed to be
for - I imagine sr (status register) that control various features (FPU,
exceptions etc.) of the CPU is a definite member of this group. Others
are less clear - how about spc and spr which are like pc and pr for
exceptions. Incidentally, insight also uses these groups.
The attached patch has pc and pr moved from system to general. I have
also moved GBR similarly. I had previously classified this as system
because it is not generally useful (the compiler does not normally
generate code that uses it), but on reflection it just isn't a system
register.
At the end of the day the important thing is that 'info registers',
'info float' and 'info vector' print the right thing.
OK?
Andrew Stubbs
P.S. Your email headers contain:
Mail-Followup-To: Andrew STUBBS <andrew.stubbs@st.com>,
gdb-patches@sources.redhat.com
which means I end up replying to myself! Is this deliberate? It is
slightly irritating.
[-- Attachment #2: sh_reggroups-2.patch --]
[-- Type: text/plain, Size: 3107 bytes --]
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.
Index: src/gdb/sh-tdep.c
===================================================================
--- src.orig/gdb/sh-tdep.c 2006-01-16 12:44:50.000000000 +0000
+++ src/gdb/sh-tdep.c 2006-01-23 14:42:11.000000000 +0000
@@ -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
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 inf
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);
Index: src/gdb/Makefile.in
===================================================================
--- src.orig/gdb/Makefile.in 2006-01-23 12:33:23.000000000 +0000
+++ src/gdb/Makefile.in 2006-01-23 12:39:55.000000000 +0000
@@ -2538,7 +2538,7 @@ sh-tdep.o: sh-tdep.c $(defs_h) $(frame_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) \
next prev parent reply other threads:[~2006-01-23 15:51 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-10-28 18:03 Andrew STUBBS
2005-11-07 18:57 ` Andrew STUBBS
2006-01-12 12:39 ` Andrew STUBBS
2006-01-20 23:35 ` Daniel Jacobowitz
2006-01-23 15:51 ` Andrew STUBBS [this message]
2006-01-23 16:07 ` Daniel Jacobowitz
2006-01-23 17:35 ` Andrew STUBBS
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=43D4FADC.4070303@st.com \
--to=andrew.stubbs@st.com \
--cc=drow@false.org \
--cc=gdb-patches@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox