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:
Danny Milosavljevic 2019-08-25 16:00:19 +02:00 committed by Jan Nieuwenhuizen
parent 233bcf75ea
commit b956dc152c
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
2 changed files with 8 additions and 5 deletions

View File

@ -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

View File

@ -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");