Sorry for the previous incomplete mail.
I was going through umem_strnlen function defined in sys/arch/arm/arm/locore.S :
mov r12, sp
stmdb sp!, {r4, r11, r12, lr, pc}
mov r4, r0
sub r11, r12, #4
cmp r0, #(UMEM_MAX)
bhi umem_fault
b 2f
1: add r0, r0, #1
2: subs r1, r1, #1
bcc 3f
known_fault3: /* May be fault here */
ldrb r3, [r0]
cmp r3, #0
bne 1b
3: rsb r0, r4, r0
str r0, [r2]
mov r0, #0 /* Set no error */
ldmia sp, {r4, r11, sp, pc}
At entry, r12 contains old sp pointer and 5 registers are pushed on
the stack. But at exit only 4 registers are popped out.
Why is pc pushed on the stack at entry ?
Regards,
Pradeep
On Wed, Jul 22, 2009 at 1:45 PM, pradeep
sawlani<[email protected]> wrote:
> Hello ,
> I was going through umem_strnlen function defined in
> sys/arch/arm/arm/locore.S :
>
> mov r12, sp
> stmdb sp!, {r4, r11, r12, lr, pc}
> mov r4, r0
> sub r11, r12, #4
> cmp r0, #(UMEM_MAX)
> bhi umem_fault
> b 2f
> 1: add r0, r0, #1
> 2: subs r1, r1, #1
> bcc 3f
> known_fault3: /* May be fault here */
> ldrb r3, [r0]
> cmp r3, #0
> bne 1b
> 3: rsb r0, r4, r0
> str r0, [r2]
> mov r0, #0 /* Set no error */
> ldmia sp, {r4, r11, sp, pc}
>
------------------------------------------------------------------------------
_______________________________________________
Prex-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/prex-devel