About eabi and stack
Hua Ji
hji at netscreen.com
Sat Feb 10 10:08:05 EST 2001
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??
***************
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
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-embedded
mailing list