svn commit: trunk/uClibc/libc/sysdeps/linux/cris
vapier at uclibc.org
vapier at uclibc.org
Fri Jan 27 00:08:17 UTC 2006
Author: vapier
Date: 2006-01-26 16:08:15 -0800 (Thu, 26 Jan 2006)
New Revision: 13630
Log:
try at crt1 code by tweaking crt0.c and utilizing the -S output of gcc
Added:
trunk/uClibc/libc/sysdeps/linux/cris/crt1.S
Changeset:
Added: trunk/uClibc/libc/sysdeps/linux/cris/crt1.S
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/cris/crt1.S 2006-01-26 23:52:22 UTC (rev 13629)
+++ trunk/uClibc/libc/sysdeps/linux/cris/crt1.S 2006-01-27 00:08:15 UTC (rev 13630)
@@ -0,0 +1,58 @@
+/* Startup code compliant to the ELF CRIS ABI */
+
+#include <features.h>
+
+/* The first piece of initialized data. */
+.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
+#if defined(__UCLIBC_CTOR_DTOR__)
+.type _init,%function
+.type _fini,%function
+#else
+.weak _init
+.weak _fini
+#endif
+.type main,%function
+.type __uClibc_main,%function
+
+/*
+ * On the stack we have argc. We can calculate argv/envp
+ * from that and the succeeding stack location, but fix so
+ * we get the right calling convention (regs in r10/r11).
+ *
+ * Please view linux/fs/binfmt_elf.c for a complete
+ * understanding of this.
+ */
+
+/*
+ * Need to call __uClibc_main(main, argc, argv, _init, _fini)
+ */
+
+_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
+ /* Leave control to the libc */
+ jsr __uClibc_main
+.size _start,.-_start
More information about the uClibc-cvs
mailing list