]> Zhao Yanbai Git Server - minix.git/commitdiff
libcsu: store argc and argv on the stack
authorThomas Veerman <thomas@minix3.org>
Fri, 25 Jan 2013 13:29:29 +0000 (14:29 +0100)
committerThomas Veerman <thomas@minix3.org>
Fri, 25 Jan 2013 17:07:02 +0000 (17:07 +0000)
lib/csu/arch/earm/crt0.S

index 1359874bf91a1c1c4761f7dff66e771c81d1314c..67a87203123596b1794b0a778cf7838bd9c4282c 100644 (file)
@@ -36,16 +36,32 @@ RCSID("$NetBSD: crt0.S,v 1.1 2012/08/13 02:49:04 matt Exp $")
 STRONG_ALIAS(_start,__start)
 
 _ENTRY(__start)
+#ifdef __minix
+        mov     r5, r2          /* cleanup */
+        mov     r4, r1          /* obj_main */
+        mov     r3, r0          /* ps_strings */
+        /* Get argc, argv, and envp from stack */
+        ldr     r0, [sp, #0x0000]
+        add     r1, sp, #0x0004
+        add     r2, r1, r0, lsl #2
+        add     r2, r2, #0x0004
+#else
        /*
         * We need to swap ps_strings and cleanup
         */
        mov     ip, r0          /* ps_strings -> tmp */
        mov     r0, r2          /* cleanup -> ps_strings */
        mov     r2, ip          /* tmp -> ps_strings */
-
+#endif /* __minix */
        /* Ensure the stack is properly aligned before calling C code. */
        bic     sp, sp, #7
 
+#ifdef __minix
+       /* Store argc and argv on the stack */
+        sub     sp, sp, #8
+        str     r5, [sp, #4]
+        str     r4, [sp, #0]
+#endif
        /*
         * void ___start(void (*cleanup)(void),
         *    const Obj_Entry *obj,