This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: View registers from stack frames


>>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



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]