Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Elena Zannoni <ezannoni@redhat.com>
To: gdb-patches@sources.redhat.com
Subject: [RFA/rfc] blockframe.c: dummy frames unwind and pseudoregs
Date: Thu, 22 Aug 2002 08:48:00 -0000	[thread overview]
Message-ID: <15717.1260.204796.69744@localhost.redhat.com> (raw)


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  <function called from gdb>
#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  <ezannoni@redhat.com>

	* 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);
     }
 }


             reply	other threads:[~2002-08-22 15:38 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-08-22  8:48 Elena Zannoni [this message]
2002-08-22 11:35 ` Andrew Cagney
2002-08-22 15:28   ` Elena Zannoni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=15717.1260.204796.69744@localhost.redhat.com \
    --to=ezannoni@redhat.com \
    --cc=gdb-patches@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox