linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* Stack Frame Calc Problem in head_4xx.S
@ 2003-05-03 21:20 Jerry Walden
  2003-05-03 22:21 ` Gary D. Thomas
  2003-05-05  1:41 ` Erik Christiansen
  0 siblings, 2 replies; 4+ messages in thread
From: Jerry Walden @ 2003-05-03 21:20 UTC (permalink / raw)
  To: Linux PPC embedded


Greetings:

I am having trouble understanding what is happening to my stack pointer.

At line 1 r1 = 0x03f9_ebe8

After line 15 executes r1 = 0xc00f4ff0
which seems fine so far (according to the map file it is pointing to the
proper location)

After line 16 executes r1=0xc00f6ff0
which is still within the bounds of init_task_union

After line 17 execute r1 = 0xc00f6fe0 which seems like a problem to me,
because it is not with the
bounds of init_task_union - (see map file below)

I would expect r1 to be within the bounds of init_task_union after this code
is executed -
is my guess correct?  If so how is it possible that line 17 comes up with
the result
that it did?

TASK_UNION_SIZE = 8192
STACK_FRAME_OVERHEAD = 16

Thanks for any help

Jerry

1 start_here:
2
3	/* ptr to current */
4	lis	r2,init_task_union@h
5	ori	r2,r2,init_task_union@l
6
7	/* ptr to phys current thread */
8	tophys(r4,r2)
9	addi	r4,r4,THREAD	/* init task's THREAD */
10	mtspr	SPRG3,r4
11	li	r3,0
12	mtspr	SPRG2,r3	/* 0 => r1 has kernel sp */
13
14	/* stack */
15	addi	r1,r2,TASK_UNION_SIZE
16	li	r0,0
17	stwu	r0,-STACK_FRAME_OVERHEAD(r1)


c00f4ff0 D init_task_union
c00f6ff0 d aligninfo
c00f70f0 D cpuinfo_op
c00f7100 D cpu_specs
c00f7280 D ppc_htab_operations



Jerry Walden
Program Manager
Digital Atlantic Inc
http://www.digitalatlantic.com
jwalden@digitalatlantic.com
1-877-494-6073 x407
cell - 703-431-2413


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Stack Frame Calc Problem in head_4xx.S
  2003-05-03 21:20 Stack Frame Calc Problem in head_4xx.S Jerry Walden
@ 2003-05-03 22:21 ` Gary D. Thomas
  2003-05-03 23:08   ` Jerry Walden
  2003-05-05  1:41 ` Erik Christiansen
  1 sibling, 1 reply; 4+ messages in thread
From: Gary D. Thomas @ 2003-05-03 22:21 UTC (permalink / raw)
  To: jwalden; +Cc: Linux PPC embedded


On Sat, 2003-05-03 at 15:20, Jerry Walden wrote:
> Greetings:
>
> I am having trouble understanding what is happening to my stack pointer.
>
> At line 1 r1 = 0x03f9_ebe8
>
> After line 15 executes r1 = 0xc00f4ff0
> which seems fine so far (according to the map file it is pointing to the
> proper location)
>
> After line 16 executes r1=0xc00f6ff0
> which is still within the bounds of init_task_union
>
> After line 17 execute r1 = 0xc00f6fe0 which seems like a problem to me,
> because it is not with the
> bounds of init_task_union - (see map file below)
>

Why do you think this?  It seems that init_task_union comprises the
space from 0xc00f4ff0..0xc00f6ff0.  That value is certainly within
that range.

> I would expect r1 to be within the bounds of init_task_union after this code
> is executed -
> is my guess correct?  If so how is it possible that line 17 comes up with
> the result
> that it did?

Read how 'stwu' works.  After the store takes place, r1 is updated
with the new value.  In other words
  stwu r0,-STACK_FRAME_OVERHEAD(r1)
means
  [r1] = r0
  r1 = r1 - STACK_FRAME_OVERHEAD(r1)
which is exactly the results you are getting.

>
> TASK_UNION_SIZE = 8192
> STACK_FRAME_OVERHEAD = 16
>
> Thanks for any help
>
> Jerry
>
> 1 start_here:
> 2
> 3	/* ptr to current */
> 4	lis	r2,init_task_union@h
> 5	ori	r2,r2,init_task_union@l
> 6
> 7	/* ptr to phys current thread */
> 8	tophys(r4,r2)
> 9	addi	r4,r4,THREAD	/* init task's THREAD */
> 10	mtspr	SPRG3,r4
> 11	li	r3,0
> 12	mtspr	SPRG2,r3	/* 0 => r1 has kernel sp */
> 13
> 14	/* stack */
> 15	addi	r1,r2,TASK_UNION_SIZE
> 16	li	r0,0
> 17	stwu	r0,-STACK_FRAME_OVERHEAD(r1)
>
>
> c00f4ff0 D init_task_union
> c00f6ff0 d aligninfo
> c00f70f0 D cpuinfo_op
> c00f7100 D cpu_specs
> c00f7280 D ppc_htab_operations
>
>
>
> Jerry Walden
> Program Manager
> Digital Atlantic Inc
> http://www.digitalatlantic.com
> jwalden@digitalatlantic.com
> 1-877-494-6073 x407
> cell - 703-431-2413
>
>
--
Gary D. Thomas <gary.thomas@mind.be>


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: Stack Frame Calc Problem in head_4xx.S
  2003-05-03 22:21 ` Gary D. Thomas
@ 2003-05-03 23:08   ` Jerry Walden
  0 siblings, 0 replies; 4+ messages in thread
From: Jerry Walden @ 2003-05-03 23:08 UTC (permalink / raw)
  To: Gary D. Thomas; +Cc: Linux PPC embedded


Duh! - I was debugging late last night, and I must have misread the value
in r1.

Thanks for pointing out the obvious, and correcting me.

The problem I am having is that I set a breakpoint with my
BDI-2000 at start kernel, and the first instruction is:

stwu r1, -32(r1)

If I step through that instruction, I get a debug exception.
If I just "go" the console hangs, and when I halt the processor
with the BDI, it is still at a debug exception (PC=0x2204).

I can't figure out what is going on.  I've been trolling through
the lists for other folks that may have had a similar problem,
and have found several with a similar problem - I found a response
from Wolfgang Denk:

"Well, did you (a) follow the description in the BDI2000 manual and
initialize the page table pointer manually, or (b) did you use a
kernel which has the necessary extension to do it automagically?
Wolfgang Denk"

and my answer is that I am running with the Monta Vista Linux
2.4.18_MVL30, with V1.11 of the BDI-2000 firmware, and I am
booting with the latest version of u-boot.  The kernel
in head_4xx.S has "the automagic extension" that sets the
Abatron PTE pointers.

So I am tearing my hair out...


Jerry Walden
-----Original Message-----
From: owner-linuxppc-embedded@lists.linuxppc.org
[mailto:owner-linuxppc-embedded@lists.linuxppc.org]On Behalf Of Gary D.
Thomas
Sent: Saturday, May 03, 2003 6:22 PM
To: jwalden@digitalatlantic.com
Cc: Linux PPC embedded
Subject: Re: Stack Frame Calc Problem in head_4xx.S



On Sat, 2003-05-03 at 15:20, Jerry Walden wrote:
> Greetings:
>
> I am having trouble understanding what is happening to my stack pointer.
>
> At line 1 r1 = 0x03f9_ebe8
>
> After line 15 executes r1 = 0xc00f4ff0
> which seems fine so far (according to the map file it is pointing to the
> proper location)
>
> After line 16 executes r1=0xc00f6ff0
> which is still within the bounds of init_task_union
>
> After line 17 execute r1 = 0xc00f6fe0 which seems like a problem to me,
> because it is not with the
> bounds of init_task_union - (see map file below)
>

Why do you think this?  It seems that init_task_union comprises the
space from 0xc00f4ff0..0xc00f6ff0.  That value is certainly within
that range.

> I would expect r1 to be within the bounds of init_task_union after this
code
> is executed -
> is my guess correct?  If so how is it possible that line 17 comes up with
> the result
> that it did?

Read how 'stwu' works.  After the store takes place, r1 is updated
with the new value.  In other words
  stwu r0,-STACK_FRAME_OVERHEAD(r1)
means
  [r1] = r0
  r1 = r1 - STACK_FRAME_OVERHEAD(r1)
which is exactly the results you are getting.

>
> TASK_UNION_SIZE = 8192
> STACK_FRAME_OVERHEAD = 16
>
> Thanks for any help
>
> Jerry
>
> 1 start_here:
> 2
> 3	/* ptr to current */
> 4	lis	r2,init_task_union@h
> 5	ori	r2,r2,init_task_union@l
> 6
> 7	/* ptr to phys current thread */
> 8	tophys(r4,r2)
> 9	addi	r4,r4,THREAD	/* init task's THREAD */
> 10	mtspr	SPRG3,r4
> 11	li	r3,0
> 12	mtspr	SPRG2,r3	/* 0 => r1 has kernel sp */
> 13
> 14	/* stack */
> 15	addi	r1,r2,TASK_UNION_SIZE
> 16	li	r0,0
> 17	stwu	r0,-STACK_FRAME_OVERHEAD(r1)
>
>
> c00f4ff0 D init_task_union
> c00f6ff0 d aligninfo
> c00f70f0 D cpuinfo_op
> c00f7100 D cpu_specs
> c00f7280 D ppc_htab_operations
>
>
>
> Jerry Walden
> Program Manager
> Digital Atlantic Inc
> http://www.digitalatlantic.com
> jwalden@digitalatlantic.com
> 1-877-494-6073 x407
> cell - 703-431-2413
>
>
--
Gary D. Thomas <gary.thomas@mind.be>


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Stack Frame Calc Problem in head_4xx.S
  2003-05-03 21:20 Stack Frame Calc Problem in head_4xx.S Jerry Walden
  2003-05-03 22:21 ` Gary D. Thomas
@ 2003-05-05  1:41 ` Erik Christiansen
  1 sibling, 0 replies; 4+ messages in thread
From: Erik Christiansen @ 2003-05-05  1:41 UTC (permalink / raw)
  To: Jerry Walden; +Cc: Linux PPC embedded


On Sat, May 03, 2003 at 05:20:51PM -0400, Jerry Walden wrote:
>
> After line 15 executes r1 = 0xc00f4ff0
> which seems fine so far (according to the map file it is pointing to the
> proper location)
>
> After line 16 executes r1=0xc00f6ff0
> which is still within the bounds of init_task_union
>
> After line 17 execute r1 = 0xc00f6fe0 which seems like a problem to me,

   The code seems to be doing exactly what you ask it to.

   stwu updates r1 by the offset, after completing the store. (That's
   what the "u" is for.)

   Given:

> STACK_FRAME_OVERHEAD = 16

   How can you expect any other result?:

> 17	stwu	r0,-STACK_FRAME_OVERHEAD(r1)

   If this is as intended, then your problem lies earlier, it appears.
   (But it sounds a little like you're unaware that you're modifying the
   stack pointer, not just indexing from it.)

Regards,
Erik

--
 _,-_|\    Erik Christiansen
/      \   Registered (Debian) Linux User #216862
\_,-.__/
      v

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2003-05-05  1:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-05-03 21:20 Stack Frame Calc Problem in head_4xx.S Jerry Walden
2003-05-03 22:21 ` Gary D. Thomas
2003-05-03 23:08   ` Jerry Walden
2003-05-05  1:41 ` Erik Christiansen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).