On Fri, 9 Feb 2001, Hua Ji wrote:

> Date: Fri, 9 Feb 2001 15:08:05 -0800
> From: Hua Ji <hji at netscreen.com>
> To: linuxppc-embedded at lists.linuxppc.org
> Subject: About eabi and stack
>
>
>  I got confused by the EABI stack usage. Help needed. Thanks in advance.
>
> What I did is:
>
> * Wrote a dummy c function and got its asm codes like below with objdump
> utility.

> * From EABI convention, I can understand that testStack function first
> move its stack pointer %r1 16 words down and meantime save the old
> stack position onto the lowest address. However, I can't understand
> where it puts the lr(link register). I can't understand the "stw r0,
> 20(r1)" instruction. I THOUGHT, we **only** moved the stack pointer
> **-16** down. How can we save the lr value with "20(r1)"??
>
> Hua
>
> ---------------------------------
>
>  void testStack(){
>
>
>       testFunction();
> }
>
> ---------------------------------
>  <testStack>:
>
>  2b8: 94 21 ff f0     stwu    r1,-16(r1)
>  2bc: 7c 08 02 a6     mflr    r0
>  2c0: 93 e1 00 0c     stw     r31,12(r1)
>                         ***************
>  2c4: 90 01 00 14     stw     r0,20(r1)   ???? Where 20(r1) will point
> to??
>                         ***************


According to the EABI standard, LR will be saved in the caller's stack
frame (that is the function which calls testStack()).

Before entry to testStack() SP points to the top of testStack() caller.
Suppose that this addr is A. After execution of stwu, SP will point to
A-16 (4 words "above" [lower addr] the caller's stack frame).

The stw at 2c4 will store the LR to A + 20 - 16 (= A+4) which is one word
below the top of the caller's stack frame.


>  2c8: 7c 3f 0b 78     mr      r31,r1
>  2cc: 48 00 00 01     bl      2cc <testStack+0x14>
>
> /* Below is to restrore stack and lr*/
>  2d0: 81 61 00 00     lwz     r11,0(r1)
>  2d4: 80 0b 00 04     lwz     r0,4(r11)
>  2d8: 7c 08 03 a6     mtlr    r0
>  2dc: 83 eb ff fc     lwz     r31,-4(r11)
>  2e0: 7d 61 5b 78     mr      r1,r11
>  2e4: 4e 80 00 20     blr
>
>

--
Hans Dulimarta, Ph.D. |                dulimart at computer.org
Research Associate    |     http://www.egr.msu.edu/~dulimart
P: 517-432-7589       |     http://corelinux.sourceforge.net
F: 760-281-7691     http://freshmeat.net/projects/snapsource
Elec. & Comp. Engg., Mich. State Univ., E. Lansing, MI 48824


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




Reply via email to