From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1230 invoked by alias); 7 Nov 2005 15:06:56 -0000 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 Received: (qmail 1215 invoked by uid 22791); 7 Nov 2005 15:06:52 -0000 Received: from fra-del-02.spheriq.net (HELO fra-del-02.spheriq.net) (195.46.51.98) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Mon, 07 Nov 2005 15:06:52 +0000 Received: from fra-out-02.spheriq.net (fra-out-02.spheriq.net [195.46.51.130]) by fra-del-02.spheriq.net with ESMTP id jA7F6n8X020611 for ; Mon, 7 Nov 2005 15:06:49 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 jA7F6im8028960 for ; Mon, 7 Nov 2005 15:06:44 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 jA7F6cW6011051 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=OK) for ; Mon, 7 Nov 2005 15:06:39 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 37A9DDA42 for ; Mon, 7 Nov 2005 15:06:38 +0000 (GMT) Received: by zeta.dmz-eu.st.com (STMicroelectronics, from userid 60012) id E56BD473F9; Mon, 7 Nov 2005 15:09:32 +0000 (GMT) Received: from zeta.dmz-eu.st.com (localhost [127.0.0.1]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id B8A4375995 for ; Mon, 7 Nov 2005 15:09:32 +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 B3A74473F6 for ; Mon, 7 Nov 2005 15:09:31 +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 CGG01460 (AUTH "andrew stubbs"); Mon, 7 Nov 2005 15:06:34 GMT Message-ID: <436F6CF7.1070003@st.com> Date: Mon, 07 Nov 2005 18:57:00 -0000 From: Andrew STUBBS User-Agent: Mozilla Thunderbird 1.0.2 (Windows/20050317) MIME-Version: 1.0 To: gdb-patches@sources.redhat.com Subject: Re: [SH] PATCH: Define the register groups References: <436105B8.7020605@st.com> In-Reply-To: <436105B8.7020605@st.com> Content-Type: multipart/mixed; boundary="------------000804050008020406050609" 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.1.07 X-SW-Source: 2005-11/txt/msg00081.txt.bz2 This is a multi-part message in MIME format. --------------000804050008020406050609 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 689 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 --------------000804050008020406050609 Content-Type: text/plain; name="sh_reggroups.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="sh_reggroups.patch" Content-length: 3416 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) \ --------------000804050008020406050609--