From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29404 invoked by alias); 2 Jun 2003 03:28:23 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 29368 invoked from network); 2 Jun 2003 03:28:22 -0000 Received: from unknown (HELO are.twiddle.net) (64.81.246.98) by sources.redhat.com with SMTP; 2 Jun 2003 03:28:22 -0000 Received: from are.twiddle.net (localhost.localdomain [127.0.0.1]) by are.twiddle.net (8.12.8/8.12.8) with ESMTP id h523SLLH007207 for ; Sun, 1 Jun 2003 20:28:21 -0700 Received: (from rth@localhost) by are.twiddle.net (8.12.8/8.12.8/Submit) id h523SLEr007205 for gdb-patches@sources.redhat.com; Sun, 1 Jun 2003 20:28:21 -0700 X-Authentication-Warning: are.twiddle.net: rth set sender to rth@twiddle.net using -f Date: Mon, 02 Jun 2003 03:28:00 -0000 From: Richard Henderson To: gdb-patches@sources.redhat.com Subject: [RFA] alpha_register_reggroup_p Message-ID: <20030602032821.GA7199@twiddle.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i X-SW-Source: 2003-06/txt/msg00042.txt.bz2 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. Ok? r~ * 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; + + /* 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; + + if (regnum >= ALPHA_FP0_REGNUM && regnum < ALPHA_FP0_REGNUM + 31) + return group == float_reggroup; + else + return group == general_reggroup; +} + static int alpha_register_byte (int regno) { @@ -1418,6 +1452,8 @@ alpha_gdbarch_init (struct gdbarch_info alpha_register_convert_to_virtual); set_gdbarch_register_convert_to_raw (gdbarch, alpha_register_convert_to_raw); + set_gdbarch_register_reggroup_p (gdbarch, alpha_register_reggroup_p); + /* Prologue heuristics. */ set_gdbarch_skip_prologue (gdbarch, alpha_skip_prologue);