From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24991 invoked by alias); 22 Aug 2002 15:38:07 -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 24983 invoked from network); 22 Aug 2002 15:38:07 -0000 Received: from unknown (HELO localhost.redhat.com) (66.30.197.194) by sources.redhat.com with SMTP; 22 Aug 2002 15:38:07 -0000 Received: by localhost.redhat.com (Postfix, from userid 469) id AAA6910DCC; Thu, 22 Aug 2002 11:36:12 -0400 (EDT) From: Elena Zannoni MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15717.1260.204796.69744@localhost.redhat.com> Date: Thu, 22 Aug 2002 08:48:00 -0000 To: gdb-patches@sources.redhat.com Subject: [RFA/rfc] blockframe.c: dummy frames unwind and pseudoregs X-SW-Source: 2002-08/txt/msg00690.txt.bz2 On the e500, the general registers are pseudo registers. Such registers are used in the debug info to find the address of paramters and variables. In the event that you do the following, you get an internal error: (gdb) b main Breakpoint 1 at 0x100002a4: file /es/scratch/ezannoni/uberbaum/src/gdb/testsuite/gdb.base/break.c, line 75. (gdb) tar sim Connected to the simulator. (gdb) lo (gdb) r Starting program: /es/scratch/ezannoni/uberbaum/H-sparc-sun-solaris2.5-x-powerpc-eabispe-2/gdb/testsuite/gdb.base/break Breakpoint 1, main (argc=1, argv=0xdffffb38, envp=0xdffffb40) at /es/scratch/ezannoni/uberbaum/src/gdb/testsuite/gdb.base/break.c:75 75 if (argc == 12345) { /* an unlikely value < 2^16, in case uninited */ (gdb) info addr argc Symbol "argc" is an argument at offset 8 from register r31. (gdb) b marker2 Breakpoint 2 at 0x1000021c: file /es/scratch/ezannoni/uberbaum/src/gdb/testsuite/gdb.base/break.c, line 49. (gdb) p marker2(44) Breakpoint 2, 0x1000021c in marker2 (a=268560764) at /es/scratch/ezannoni/uberbaum/src/gdb/testsuite/gdb.base/break.c:49 49 int marker2 (a) int a; { return (1); } The program being debugged stopped while in a function called from GDB. When the function (marker2) is done executing, GDB will silently stop (instead of continuing to evaluate the expression containing the function call). (gdb) bt #0 0x1000021c in marker2 (a=268560764) at /es/scratch/ezannoni/uberbaum/src/gdb/testsuite/gdb.base/break.c:49 #1 #2 main (/es/scratch/ezannoni/uberbaum/src/gdb/regcache.c:638: gdb-internal-error: regcache_raw_read: Assertion `regnum >= 0 && regnum < regcache->descr->nr_raw_registers' failed. argc=An internal GDB error was detected. This may make further debugging unreliable. Quit this debugging session? (y or n) argc is computerd using r31 which is a pseudo register on this target. This is because the generic_call_dummy_register_unwind() doesn't deal with pseudo registers. It has this comment: /* Return the actual value. */ /* FIXME: cagney/2002-06-26: This should be via the gdbarch_register_read() method so that it, on the fly, constructs either a raw or pseudo register from the raw register cache. */ regcache_raw_read (registers, regnum, bufferp); If instead of raw reads I do cooked reads, I don't get the error. I wonder though if, based of the comment, this could be a problem for other targets. Thoughts? Elena 2002-08-22 Elena Zannoni * blockframe.c (generic_call_dummy_register_unwind): Use regcache_cooked_read to catch cases in which the variable is stored in a pseudo register. Index: blockframe.c =================================================================== RCS file: /cvs/uberbaum/gdb/blockframe.c,v retrieving revision 1.37 diff -u -p -r1.37 blockframe.c --- blockframe.c 18 Aug 2002 22:40:15 -0000 1.37 +++ blockframe.c 22 Aug 2002 15:35:27 -0000 @@ -1406,7 +1406,7 @@ generic_call_dummy_register_unwind (stru gdbarch_register_read() method so that it, on the fly, constructs either a raw or pseudo register from the raw register cache. */ - regcache_raw_read (registers, regnum, bufferp); + regcache_cooked_read (registers, regnum, bufferp); } }