This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [RFA] alpha_register_reggroup_p
- From: Andrew Cagney <ac131313 at redhat dot com>
- To: Richard Henderson <rth at twiddle dot net>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Sun, 01 Jun 2003 23:54:31 -0400
- Subject: Re: [RFA] alpha_register_reggroup_p
- References: <20030602032821.GA7199@twiddle.net>
The main object here is to get the FPCR to be considered
part of the FP state. It's not immediately clear what to
do with the PALcode UNIQ value, but "system" seems a good
choice.
* alpha-tdep.c (alpha_register_reggroup_p): New.
(alpha_gdbarch_init): Register it.
--- alpha-tdep.c.11 2003-06-01 20:11:56.000000000 -0700
+++ alpha-tdep.c 2003-06-01 20:15:28.000000000 -0700
@@ -20,6 +20,7 @@
Boston, MA 02111-1307, USA. */
#include "defs.h"
+#include "doublest.h"
#include "frame.h"
#include "frame-unwind.h"
#include "frame-base.h"
@@ -34,7 +35,7 @@
#include "gdb_string.h"
#include "linespec.h"
#include "regcache.h"
-#include "doublest.h"
+#include "reggroups.h"
#include "arch-utils.h"
#include "osabi.h"
#include "block.h"
@@ -102,6 +103,39 @@ alpha_register_virtual_type (int regno)
return builtin_type_int64;
}
+/* Is REGNUM a member of REGGROUP? */
+
+static int
+alpha_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
+ struct reggroup *group)
+{
+ /* Filter out any registers eliminated, but whose regnum is
+ reserved for backward compatibility, e.g. the vfp. */
+ if (REGISTER_NAME (regnum) == NULL || *REGISTER_NAME (regnum) == '\0')
+ return 0;
+
+ /* Since we implement no pseudo registers, save/restore is equal to all. */
+ if (group == all_reggroup
+ || group == save_reggroup
+ || group == restore_reggroup)
+ return 1;
Should UNIQ be in save/restore (I don't know, I'm just asking)?
+ /* All other groups are non-overlapping. */
+
+ /* Since this is really a PALcode memory slot... */
+ if (regnum == ALPHA_UNIQUE_REGNUM)
+ return group == system_reggroup;
+
+ /* Force the FPCR to be considered part of the floating point state. */
+ if (regnum == ALPHA_FPCR_REGNUM)
+ return group == float_reggroup;
Good. Finally a useful "info float".
+ if (regnum >= ALPHA_FP0_REGNUM && regnum < ALPHA_FP0_REGNUM + 31)
+ return group == float_reggroup;
+ else
+ return group == general_reggroup;
+}
yes, ok.
Andrew