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