From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21469 invoked by alias); 4 Feb 2014 19:38:03 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 21457 invoked by uid 89); 4 Feb 2014 19:38:03 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 04 Feb 2014 19:37:44 +0000 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s14JbgWw029581 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 4 Feb 2014 14:37:42 -0500 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s14Jbe6e021088; Tue, 4 Feb 2014 14:37:41 -0500 Message-ID: <52F14184.9020803@redhat.com> Date: Tue, 04 Feb 2014 19:38:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130625 Thunderbird/17.0.7 MIME-Version: 1.0 To: Yoshinori Sato CC: gdb-patches@sourceware.org Subject: Re: [PATCH] h8300 "info registers" broken References: <8738k3j95o.wl%ysato@users.sourceforge.jp> In-Reply-To: <8738k3j95o.wl%ysato@users.sourceforge.jp> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-SW-Source: 2014-02/txt/msg00025.txt.bz2 On 02/01/2014 12:43 PM, Yoshinori Sato wrote: > Following result in h8300-elf-gdb. > > (gdb) info registers ccr > memory clobbered past end of allocated block > > This cause of missing register size. I'm guessing the patch makes the raw ccr register visible in info registers, because unnamed registers are hidden, and you're now naming it. infcmd.c:default_print_registers_info: /* If the register name is empty, it is undefined for this processor, so don't display anything. */ if (gdbarch_register_name (gdbarch, i) == NULL || *(gdbarch_register_name (gdbarch, i)) == '\0') continue; I don't know much about the h8300 port, but the fact that there's a pseudo ccr register makes me thing this patch isn't correct. E.g., static void h8300_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, int regno, int cpregs) { ... if (regno < 0) { for (regno = E_R0_REGNUM; regno <= E_SP_REGNUM; ++regno) h8300_print_register (gdbarch, file, frame, regno); h8300_print_register (gdbarch, file, frame, E_PSEUDO_CCR_REGNUM (gdbarch)); The loop prints all raw registers, and skips the raw ccr, and then we print the pseudo ccr. With your patch, I think we'll print the raw ccr register too. Can you explain the patch to me a little bit more, please? It's not obvious to me at all what the register names have to with the proposed change. Also, this would need a ChangeLog entry. > > diff --git a/gdb/h8300-tdep.c b/gdb/h8300-tdep.c > index ffffbc9..a21f7de 100644 > --- a/gdb/h8300-tdep.c > +++ b/gdb/h8300-tdep.c > @@ -946,7 +946,7 @@ h8300_register_name (struct gdbarch *gdbarch, int regno) > type is selected. */ > static char *register_names[] = { > "r0", "r1", "r2", "r3", "r4", "r5", "r6", > - "sp", "", "pc", "cycles", "tick", "inst", > + "sp", "ccr", "pc", "cycles", "tick", "inst", > "ccr", /* pseudo register */ > }; > if (regno < 0 > @@ -963,7 +963,7 @@ h8300s_register_name (struct gdbarch *gdbarch, int regno) > { > static char *register_names[] = { > "er0", "er1", "er2", "er3", "er4", "er5", "er6", > - "sp", "", "pc", "cycles", "", "tick", "inst", > + "sp", "ccr", "pc", "cycles", "exr", "tick", "inst", > "mach", "macl", > "ccr", "exr" /* pseudo registers */ > }; > @@ -981,7 +981,7 @@ h8300sx_register_name (struct gdbarch *gdbarch, int regno) > { > static char *register_names[] = { > "er0", "er1", "er2", "er3", "er4", "er5", "er6", > - "sp", "", "pc", "cycles", "", "tick", "inst", > + "sp", "ccr", "pc", "cycles", "exr", "tick", "inst", > "mach", "macl", "sbr", "vbr", > "ccr", "exr" /* pseudo registers */ > }; > @@ -1136,9 +1136,9 @@ h8300_register_type (struct gdbarch *gdbarch, int regno) > case E_FP_REGNUM: > return builtin_type (gdbarch)->builtin_data_ptr; > default: > - if (regno == E_PSEUDO_CCR_REGNUM (gdbarch)) > + if (regno == E_PSEUDO_CCR_REGNUM (gdbarch) || regno == E_CCR_REGNUM) > return builtin_type (gdbarch)->builtin_uint8; > - else if (regno == E_PSEUDO_EXR_REGNUM (gdbarch)) > + else if (regno == E_PSEUDO_EXR_REGNUM (gdbarch) || regno == E_EXR_REGNUM) > return builtin_type (gdbarch)->builtin_uint8; > else if (is_h8300hmode (gdbarch)) > return builtin_type (gdbarch)->builtin_int32; > -- Pedro Alves