summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libc/sysdeps/linux/cris/crt1.S60
-rw-r--r--libc/sysdeps/linux/cris/crti.S57
-rw-r--r--libc/sysdeps/linux/cris/crtn.S42
3 files changed, 73 insertions, 86 deletions
diff --git a/libc/sysdeps/linux/cris/crt1.S b/libc/sysdeps/linux/cris/crt1.S
index e0ba8a4dd..b07e36b51 100644
--- a/libc/sysdeps/linux/cris/crt1.S
+++ b/libc/sysdeps/linux/cris/crt1.S
@@ -2,28 +2,30 @@
#include <features.h>
+ .syntax no_register_prefix
+
/* The first piece of initialized data. */
-.data
-.global __data_start
-.align 2
-.type __data_start, @object
-.size __data_start, 4
+ .data
+ .global __data_start
+ .align 2
+ .type __data_start, @object
+ .size __data_start, 4
__data_start:
.dword 0
-.text
-.align 1
-.global _start
-.type _start,%function
+ .text
+ .align 1
+ .global _start
+ .type _start, %function
#if defined(__UCLIBC_CTOR_DTOR__)
-.type _init,%function
-.type _fini,%function
+ .type _init, %function
+ .type _fini, %function
#else
-.weak _init
-.weak _fini
+ .weak _init
+ .weak _fini
#endif
-.type main,%function
-.type __uClibc_main,%function
+ .type main, %function
+ .type __uClibc_main, %function
/*
* On the stack we have argc. We can calculate argv/envp
@@ -39,20 +41,16 @@ __data_start:
*/
_start:
- pop $r10
- move.d $sp, $r11
- jump .L1
-
-.L1:
- Push $srp
- Subq 4,$sp
- move.d $r10,$r9
- move.d $r11,$r12
- move.d _fini,$r13
- move.d $r13,[$sp]
- move.d main,$r10
- move.d $r9,$r11
- move.d _init,$r13
+ move.d main, r10
+ move.d [sp+], r11
+ move.d sp, r12
+ subq 4, sp
+ move srp, [sp]
+ subq 4, sp
+ move.d _fini, r13
+ move.d r13, [sp]
+ move.d _init, r13
/* Leave control to the libc */
- jsr __uClibc_main
-.size _start,.-_start
+ jsr __uClibc_main
+ nop
+ .size _start, .-_start
diff --git a/libc/sysdeps/linux/cris/crti.S b/libc/sysdeps/linux/cris/crti.S
index 78a1862ef..0740c765d 100644
--- a/libc/sysdeps/linux/cris/crti.S
+++ b/libc/sysdeps/linux/cris/crti.S
@@ -1,36 +1,29 @@
-#NO_APP
- .file "initfini.c"
-#APP
-
- .section .init
-#NO_APP
- .align 1
- .global _init
+/* glibc's sysdeps/cris/elf/initfini.c used for reference [PROLOG] */
+
+ .section .init
+ .align 1
+ .global _init
.type _init, @function
_init:
- Push $srp
- subq 4,$sp
- movem $r0,[$sp]
- move.d $pc,$r0
- sub.d .:GOTOFF,$r0
-#APP
-
- .align 1
-
-
- .section .fini
-#NO_APP
- .align 1
- .global _fini
+ subq 4,$sp
+ move.d $r1,[$sp]
+ move $srp,$r1
+ subq 4,$sp
+ move.d $r0,[$sp]
+ move.d $pc,$r0
+ sub.d .:GOTOFF,$r0
+ .align 1
+
+ .section .fini
+ .align 1
+ .global _fini
.type _fini, @function
_fini:
- Push $srp
- subq 4,$sp
- movem $r0,[$sp]
- move.d $pc,$r0
- sub.d .:GOTOFF,$r0
-#APP
- .align 1
-
-
-/*@TRAILER_BEGINS*/
+ subq 4,$sp
+ move.d $r1,[$sp]
+ move $srp,$r1
+ subq 4,$sp
+ move.d $r0,[$sp]
+ move.d $pc,$r0
+ sub.d .:GOTOFF,$r0
+ .align 1
diff --git a/libc/sysdeps/linux/cris/crtn.S b/libc/sysdeps/linux/cris/crtn.S
index e9d8a963f..951ae5449 100644
--- a/libc/sysdeps/linux/cris/crtn.S
+++ b/libc/sysdeps/linux/cris/crtn.S
@@ -1,27 +1,23 @@
-#NO_APP
- .file "initfini.c"
-#APP
-
- .section .init
-#NO_APP
- .align 1
- .global _init
+/* glibc's sysdeps/cris/elf/initfini.c used for reference [EPILOG] */
+
+ .section .init
+ .align 1
+ .global _init
.type _init, @function
-#NO_APP
- movem [$sp+],$r0
- Jump [$sp+]
+ move.d [$sp+],$r0
+ move $r1,$srp
+ move.d [$sp+],$r1
+ Ret
+ nop
.size _init, .-_init
-#APP
-
- .section .fini
-#NO_APP
- .align 1
- .global _fini
+
+ .section .fini
+ .align 1
+ .global _fini
.type _fini, @function
-#NO_APP
- movem [$sp+],$r0
- Jump [$sp+]
+ move.d [$sp+],$r0
+ move $r1,$srp
+ move.d [$sp+],$r1
+ Ret
+ nop
.size _fini, .-_fini
-#APP
-
-/*@TRAILER_BEGINS*/