diff --git a/lib/linux/arm-mes-mescc/crt1.c b/lib/linux/arm-mes-mescc/crt1.c index d2f61c64..0601a415 100644 --- a/lib/linux/arm-mes-mescc/crt1.c +++ b/lib/linux/arm-mes-mescc/crt1.c @@ -32,9 +32,9 @@ sp -> argc environ = &argv[argc + 1] +HOWEVER, the function entry already allocated space for locals on the stack (after saving fp, which moved sp again). Hence, use fp instead of sp. */ - /* stdin = 0 */ asm ("!0 mov____$i8,%r0"); @@ -52,8 +52,8 @@ environ = &argv[argc + 1] /* Add "environ" to main's arguments */ - asm ("!0 ldr____%r0,(%sp,#$i8)"); /* "argc" */ - asm ("!4 ldr____%r1,(%sp,#$i8)"); /* "argv" */ + asm ("!4 ldr____%r0,(%fp,+#$i8)"); /* "argc" */ + asm ("!8 ldr____%r1,(%fp,+#$i8)"); /* "argv" */ asm ("add____%r2,%r0,%r1,lsl#4"); /* "environ": argv + argc */ asm ("!4 add____%r2,$i8"); /* "environ": argv + argc + 1 */