ARM: Fix argc, argv and envp handling.
* lib/linux/arm-mes-mescc/crt1.c (_start): Fix argc, argv and envp handling. * lib/arm-mes/arm.M1 (add____%r2,%r0,%r1,lsl#2): Add macro. (add____%r2,%r0,%r1,lsl#4): Delete macro. (add____%r2,%r1,%r0,lsl#2): Add macro.
This commit is contained in:
parent
233bcf75ea
commit
b956dc152c
|
@ -264,7 +264,10 @@ DEFINE lsl____%r1,%r1,$i8 90a0e31119a0e1 # mov r9, #xx; lsl %r1, %r1, %r9
|
|||
DEFINE lsr____%r0,%r0,%r1 3001a0e1 # lsr %r0, %r0, %r1
|
||||
DEFINE ldr____%r0,(%sp,#$i8) 009de5 # ldr r0, [r13+xx]
|
||||
DEFINE ldr____%r1,(%sp,#$i8) 109de5 # ldr r1, [r13+xx]
|
||||
DEFINE add____%r2,%r0,%r1,lsl#4 012280e0
|
||||
#DEFINE add____%r2,%r0,%r1,lsl#4 012280e0
|
||||
# Without carry
|
||||
DEFINE add____%r2,%r0,%r1,lsl#2 012180e0
|
||||
DEFINE add____%r2,%r1,%r0,lsl#2 002181e0
|
||||
DEFINE add____%r2,$i8 2082e2
|
||||
DEFINE bl eb
|
||||
DEFINE b ea
|
||||
|
|
|
@ -32,7 +32,7 @@ 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.
|
||||
HOWEVER, the function entry already allocated space for locals on the stack (after saving lr and fp, which moved sp again). Hence, use fp instead of sp.
|
||||
*/
|
||||
|
||||
/* stdin = 0 */
|
||||
|
@ -52,9 +52,9 @@ HOWEVER, the function entry already allocated space for locals on the stack (aft
|
|||
|
||||
/* Add "environ" to main's arguments */
|
||||
|
||||
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 ("!8 ldr____%r0,(%fp,+#$i8)"); /* "argc" */
|
||||
asm ("!12 ldr____%r1,(%fp,+#$i8)"); /* "argv" */
|
||||
asm ("add____%r2,%r1,%r0,lsl#2"); /* "environ": argv + argc */
|
||||
asm ("!4 add____%r2,$i8"); /* "environ": argv + argc + 1 */
|
||||
|
||||
asm ("push___%r2");
|
||||
|
|
Loading…
Reference in New Issue