From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15492 invoked by alias); 24 Oct 2007 18:08:08 -0000 Received: (qmail 14191 invoked by uid 22791); 24 Oct 2007 18:07:52 -0000 X-Spam-Check-By: sourceware.org Received: from dmz.mips-uk.com (HELO dmz.mips-uk.com) (194.74.144.194) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 24 Oct 2007 18:07:48 +0000 Received: from internal-mx1 ([192.168.192.240] helo=ukservices1.mips.com) by dmz.mips-uk.com with esmtp (Exim 3.35 #1 (Debian)) id 1Ikkds-0005xv-00; Wed, 24 Oct 2007 19:07:44 +0100 Received: from perivale.mips.com ([192.168.192.200]) by ukservices1.mips.com with esmtp (Exim 3.36 #1 (Debian)) id 1Ikkdn-0005PB-00; Wed, 24 Oct 2007 19:07:39 +0100 Received: from macro (helo=localhost) by perivale.mips.com with local-esmtp (Exim 4.63) (envelope-from ) id 1Ikkdn-0006LB-NG; Wed, 24 Oct 2007 19:07:39 +0100 Date: Wed, 24 Oct 2007 18:12:00 -0000 From: "Maciej W. Rozycki" To: Daniel Jacobowitz cc: gdb-patches@sourceware.org, David Ung , "Maciej W. Rozycki" Subject: Re: infcmd.c: Output user registers correctly In-Reply-To: <20071024164221.GA4025@caradoc.them.org> Message-ID: References: <20071024164221.GA4025@caradoc.them.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-MIPS-Technologies-UK-MailScanner: Found to be clean X-MIPS-Technologies-UK-MailScanner-From: macro@mips.com 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 X-SW-Source: 2007-10/txt/msg00595.txt.bz2 On Wed, 24 Oct 2007, Daniel Jacobowitz wrote: > On Wed, Oct 24, 2007 at 04:59:47PM +0100, Maciej W. Rozycki wrote: > > 2007-10-24 David Ung > > Maciej W. Rozycki > > > > * infcmd.c (registers_info): Check for a user register before > > calling target's gdbarch_print_registers_info(). If found to be > > so, extract the implicit value of user register and call > > print_scalar_formatted(). > > * value.h (value_of_user_reg): Add prototype. > > > > OK to apply? > > OK, thanks. This also fixes PR exp/1926. There may be another one > too, but that's the only one I can find at present. I have just checked and value_of_user_reg() is already declared in user-regs.h. I am inclined to commit this change instead so as to avoid having prototypes in two different places. OK? 2007-10-24 David Ung Maciej W. Rozycki PR exp/1926 * infcmd.c (registers_info): Check for a user register before calling target's gdbarch_print_registers_info(). If found to be so, extract the implicit value of user register and call print_scalar_formatted(). * Makefile.in: (infcmd.o): Add $(user_regs_h). Maciej Index: binutils-quilt/src/gdb/infcmd.c =================================================================== --- binutils-quilt.orig/src/gdb/infcmd.c 2007-10-24 16:50:07.000000000 +0100 +++ binutils-quilt/src/gdb/infcmd.c 2007-10-24 18:51:16.000000000 +0100 @@ -47,6 +47,7 @@ #include "gdb_assert.h" #include "observer.h" #include "target-descriptions.h" +#include "user-regs.h" /* Functions exported for general use, in inferior.h: */ @@ -1705,21 +1706,35 @@ while ((*addr_exp) != '\0' && !isspace ((*addr_exp))) addr_exp++; end = addr_exp; - + /* Figure out what we've found and display it. */ /* A register name? */ { - int regnum = frame_map_name_to_regnum (frame, - start, end - start); + int regnum = frame_map_name_to_regnum (frame, start, end - start); if (regnum >= 0) { - gdbarch_print_registers_info (gdbarch, gdb_stdout, - frame, regnum, fpregs); + /* User registers lie completely outside of the range of + normal registers. Catch them early so that the target + never sees them. */ + if (regnum >= gdbarch_num_regs (gdbarch) + + gdbarch_num_pseudo_regs (gdbarch)) + { + struct value *val = value_of_user_reg (regnum, frame); + + printf_filtered ("%s: ", start); + print_scalar_formatted (value_contents (val), + check_typedef (value_type (val)), + 'x', 0, gdb_stdout); + printf_filtered ("\n"); + } + else + gdbarch_print_registers_info (gdbarch, gdb_stdout, + frame, regnum, fpregs); continue; } } - + /* A register number? (how portable is this one?). */ { char *endptr; Index: binutils-quilt/src/gdb/Makefile.in =================================================================== --- binutils-quilt.orig/src/gdb/Makefile.in 2007-10-24 17:01:15.000000000 +0100 +++ binutils-quilt/src/gdb/Makefile.in 2007-10-24 18:50:03.000000000 +0100 @@ -2204,7 +2204,8 @@ $(symfile_h) $(gdbcore_h) $(target_h) $(language_h) $(symfile_h) \ $(objfiles_h) $(completer_h) $(ui_out_h) $(event_top_h) \ $(parser_defs_h) $(regcache_h) $(reggroups_h) $(block_h) \ - $(solib_h) $(gdb_assert_h) $(observer_h) $(target_descriptions_h) + $(solib_h) $(gdb_assert_h) $(observer_h) $(target_descriptions_h) \ + $(user_regs_h) inf-loop.o: inf-loop.c $(defs_h) $(inferior_h) $(target_h) $(event_loop_h) \ $(event_top_h) $(inf_loop_h) $(remote_h) $(exceptions_h) inflow.o: inflow.c $(defs_h) $(frame_h) $(inferior_h) $(command_h) \