From: Fabian Cenedese <Cenedese@indel.ch>
To: gdb@sources.redhat.com
Subject: Re: View registers from stack frames
Date: Tue, 05 Oct 2004 14:02:00 -0000 [thread overview]
Message-ID: <5.2.0.9.1.20041005154532.01d52ec0@NT_SERVER> (raw)
In-Reply-To: <4162A185.2070409@gnu.org>
>>With the stack commands (frame, up, down) I can select a different
>>stack frame. Local variables and arguments (even with same name)
>>have different values, depending on the stack frame number. But it
>>seems that registers aren't corrected for previous stack frames. Is
>>this correct? e.g. the PC and LR should change their value on every
>>frame, and the PC was the last LR. But "info reg" always shows the
>>same values. Is there any way to get the previous frame's registers?
>>When I do "info frame x" I get something like "saved pc 0x..." so at
>>least this information is available, why isn't this put into the register
>>overview? And what about the other SPRs and GPRs?
>
>You've just described the expected and correct behavior. That makes it sound like an architecture specific bug. Which architecture system is this on, and can you post a transcript.
I'm using a self built gdb-6.1.1 for PPC-targets and cygwin. The
communication with the target is over a stub-server to a PPC-board.
This is some sample session snippet:
(gdb) thread 21
[Switching to thread 21 (Thread 1578452)]#0 CMyWorkerTask::Test (
this=0x1815d4, str=@0x18d734)
at N:\Temp\SAMCLASS\Applicat\Src\Test1.cpp:476
476 while (uTest2 < 3000001){
(gdb) bt
#0 CMyWorkerTask::Test (this=0x1815d4, str=@0x18d734)
at N:\Temp\SAMCLASS\Applicat\Src\Test1.cpp:476
#1 0x00060564 in CMyWorkerTask::Test (this=0x1815d4, str=@0x18d734)
at N:\Temp\SAMCLASS\Applicat\Src\Test1.cpp:469
#2 0x00060408 in CMyWorkerTask::Action (this=0x1815d4)
at N:\Temp\SAMCLASS\Applicat\Src\Test1.cpp:433
#3 0x0008c8a8 in CINOSTask::MainLoop (this=0x1815d4)
at N:\Temp\SAMCLASS\os\inos\Src\Inos.cpp:823
#4 0x0008c6bc in CINOSTask::CINOSTask (this=0x1815d4,
aName=0x64646464 "|ù\022", aStackSize=1684300900, aPriority=1684300900,
aFloatingPoint=1684300900, aTimeSlice=1684300900,
aInterruptsDisabled=1684300900, apHandler=0x64646464, apObject=0x132fb8)
at N:\Temp\SAMCLASS\os\inos\Src\Inos.cpp:786
#5 0x32414000 in ?? ()
(gdb) p/x $pc
$1 = 0x6056c
(gdb) p/x $lr
$2 = 0x60564
(gdb) f 1
#1 0x00060564 in CMyWorkerTask::Test (this=0x1815d4, str=@0x18d734)
at N:\Temp\SAMCLASS\Applicat\Src\Test1.cpp:469
469 Test(str);
(gdb) info frame 1
Stack frame at 0x18d6b4:
pc = 0x60564 in CMyWorkerTask::Test(CINOSString &)
(N:\Temp\SAMCLASS\Applicat\Src\Test1.cpp:469); saved pc 0x60408
called by frame at 0x18d6fc, caller of frame at 0x18d66c
source language c++.
Arglist at 0x18d6b4, args: this=0x1815d4, str=@0x18d734
Locals at 0x18d6b4, Previous frame's sp in r1
(gdb) p/x $pc
$3 = 0x6056c
(gdb) p/x $lr
$4 = 0x60564
(gdb) frame 2
#2 0x00060408 in CMyWorkerTask::Action (this=0x1815d4)
at N:\Temp\SAMCLASS\Applicat\Src\Test1.cpp:433
433 Test(str);
(gdb) info frame 2
Stack frame at 0x18d6fc:
pc = 0x60408 in CMyWorkerTask::Action(void)
(N:\Temp\SAMCLASS\Applicat\Src\Test1.cpp:433); saved pc 0x8c8a8
called by frame at 0x18d7d4, caller of frame at 0x18d6b4
source language c++.
Arglist at 0x18d6fc, args: this=0x1815d4
Locals at 0x18d6fc, Previous frame's sp in r1
(gdb) p/x $pc
$5 = 0x6056c
(gdb) p/x $lr
$6 = 0x60564
My question is: why do pc and lr (and all other registers) always show the same
value even if I have selected another stack frame? I would have expected that pc
changes to 0x60564 in frame 1 and 0x60408 in frame 2, lr likewise to 0x60408
in frame 1 and 0x8c8a8 in frame 2. Why is this not the case? That's a little bit
misleading. I would like not only to see variables and arguments in previous
frames but also the registers.
Thanks
bye Fabi
next prev parent reply other threads:[~2004-10-05 13:53 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-10-05 12:48 Fabian Cenedese
2004-10-05 13:30 ` Andrew Cagney
2004-10-05 14:02 ` Fabian Cenedese [this message]
2004-10-05 14:03 ` Daniel Jacobowitz
2004-10-05 15:00 ` Fabian Cenedese
2004-10-05 17:57 ` Fabian Cenedese
2004-10-06 1:57 ` Andrew Cagney
2004-10-06 7:18 ` Fabian Cenedese
2004-10-06 16:41 ` Kevin Buettner
2004-10-07 9:04 ` Fabian Cenedese
2004-10-11 19:21 ` Kevin Buettner
2004-10-07 17:50 Xinan Tang
[not found] <5.2.0.9.1.20041007134711.01d12d90@NT_SERVER>
[not found] ` <20041007085738.45b5b55a@saguaro>
2004-10-08 10:14 ` Fabian Cenedese
2004-10-11 19:16 ` Kevin Buettner
2004-10-12 14:03 ` Fabian Cenedese
2004-10-16 15:11 ` Kevin Buettner
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=5.2.0.9.1.20041005154532.01d52ec0@NT_SERVER \
--to=cenedese@indel.ch \
--cc=gdb@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