From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18436 invoked by alias); 12 Jan 2006 12:39:51 -0000 Received: (qmail 18426 invoked by uid 22791); 12 Jan 2006 12:39:50 -0000 X-Spam-Check-By: sourceware.org Received: from fra-del-03.spheriq.net (HELO fra-del-03.spheriq.net) (195.46.51.99) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 12 Jan 2006 12:39:47 +0000 Received: from fra-out-02.spheriq.net (fra-out-02.spheriq.net [195.46.51.130]) by fra-del-03.spheriq.net with ESMTP id k0CCdh91016961 for ; Thu, 12 Jan 2006 12:39:43 GMT Received: from fra-cus-01.spheriq.net (fra-cus-01.spheriq.net [195.46.51.37]) by fra-out-02.spheriq.net with ESMTP id k0CCdg24017378 for ; Thu, 12 Jan 2006 12:39:42 GMT Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by fra-cus-01.spheriq.net with ESMTP id k0CCdeUx030375 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=OK) for ; Thu, 12 Jan 2006 12:39:42 GMT Received: from zeta.dmz-eu.st.com (ns2.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 7415CDA5C for ; Thu, 12 Jan 2006 12:39:32 +0000 (GMT) Received: by zeta.dmz-eu.st.com (STMicroelectronics, from userid 60012) id 736C147422; Thu, 12 Jan 2006 12:42:46 +0000 (GMT) Received: from zeta.dmz-eu.st.com (localhost [127.0.0.1]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 445C375994 for ; Thu, 12 Jan 2006 12:42:46 +0000 (UTC) Received: from mail1.bri.st.com (mail1.bri.st.com [164.129.8.218]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id A520647465 for ; Thu, 12 Jan 2006 12:42:45 +0000 (GMT) Received: from [164.129.15.13] (terrorhawk.bri.st.com [164.129.15.13]) by mail1.bri.st.com (MOS 3.5.8-GR) with ESMTP id CHD06381 (AUTH stubbsa); Thu, 12 Jan 2006 12:39:18 GMT Message-ID: <43C64D7F.3020204@st.com> Date: Thu, 12 Jan 2006 12:39:00 -0000 From: Andrew STUBBS User-Agent: Mozilla Thunderbird 1.0.7 (Windows/20050923) MIME-Version: 1.0 To: gdb-patches@sources.redhat.com Subject: Re: [SH] PATCH: Define the register groups References: <436105B8.7020605@st.com> <436F6CF7.1070003@st.com> In-Reply-To: <436F6CF7.1070003@st.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-O-Spoofed: Not Scanned X-O-General-Status: No X-O-Spam1-Status: Not Scanned X-O-Spam2-Status: Not Scanned X-O-URL-Status: Not Scanned X-O-Virus1-Status: No X-O-Virus2-Status: Not Scanned X-O-Virus3-Status: No X-O-Virus4-Status: No X-O-Virus5-Status: Not Scanned X-O-Image-Status: Not Scanned X-O-Attach-Status: Not Scanned X-SpheriQ-Ver: 4.2.0 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2006-01/txt/msg00124.txt.bz2 Ping! This was first posted in October and then in November. Nobody has ever said anything about it. I don't think there are any SH specific maintainers. Andrew Stubbs wrote: > Andrew Stubbs wrote: > >> Hi all, >> >> The SH port does not currently define any register groups. Instead, it >> just relies on the default in reggroup.c. This is not quite adequate >> as it is not always clear from the type where a register should >> naturally sit. In particular the 'fv' vector registers are classified >> as general, not float or vector. >> >> The attached patch adds a function to do the register classification. >> >> It does not know about all the registers of sh2a or any of the dsp >> variants (because I don't), but should not make the situation any >> worse for those. > > > Is this patch OK? > > I attach an updated patch with the Makefile properly adjusted. > > Andrew Stubbs > > > ------------------------------------------------------------------------ > > 2005-11-07 Andrew Stubbs > > * 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 2005-11-07 11:50:24.000000000 +0000 > +++ src/gdb/sh-tdep.c 2005-11-07 14:57:31.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,51 @@ 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 == all_reggroup) > + return 1; > + if (reggroup == save_reggroup || reggroup == restore_reggroup) > + return regnum < NUM_REGS; /* i.e. not pseudo regs */ > + > + if (FP0_REGNUM != -1 > + && ((regnum >= FP0_REGNUM && regnum <= FP_LAST_REGNUM) > + || (regnum >= DR0_REGNUM && regnum <= DR_LAST_REGNUM) > + || (regnum >= FV0_REGNUM && regnum <= FV_LAST_REGNUM) > + || (regnum == FPUL_REGNUM) > + || (regnum == FPSCR_REGNUM))) > + { > + if (reggroup == float_reggroup) > + return 1; > + if (regnum >= FV0_REGNUM && regnum <= FV_LAST_REGNUM > + && reggroup == vector_reggroup) > + return 1; > + } > + else if (reggroup == system_reggroup > + && (regnum == PC_REGNUM > + || regnum == PR_REGNUM > + || regnum == GBR_REGNUM > + || regnum == VBR_REGNUM > + || regnum == SR_REGNUM > + || regnum == FPSCR_REGNUM > + || regnum == SSR_REGNUM > + || regnum == SPC_REGNUM)) > + return 1; > + else if (reggroup == general_reggroup) > + return 1; > + > + return 0; > +} > + > /* 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 > @@ -2549,6 +2595,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_print_registers_info (gdbarch, sh_print_registers_info); > > Index: src/gdb/Makefile.in > =================================================================== > --- src.orig/gdb/Makefile.in 2005-11-07 14:50:50.000000000 +0000 > +++ src/gdb/Makefile.in 2005-11-07 14:58:39.000000000 +0000 > @@ -2535,7 +2535,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) > solib-aix5.o: solib-aix5.c $(defs_h) $(gdb_string_h) $(elf_external_h) \ > $(symtab_h) $(bfd_h) $(symfile_h) $(objfiles_h) $(gdbcore_h) \ > $(command_h) $(target_h) $(frame_h) $(gdb_regex_h) $(inferior_h) \