|
@@ -1,24 +1,22 @@
|
|
|
-/* $Id: crt0.c,v 1.1 2002/09/16 08:08:33 tobiasa Exp $ */
|
|
|
|
|
-
|
|
|
|
|
-/* C base for Linux/CRIS 2.0/2.4
|
|
|
|
|
- */
|
|
|
|
|
-
|
|
|
|
|
-//#define DEBUG
|
|
|
|
|
|
|
+/* Startup code compliant to the ELF CRIS ABI */
|
|
|
|
|
|
|
|
/* The first piece of initialized data. */
|
|
/* The first piece of initialized data. */
|
|
|
int __data_start = 0;
|
|
int __data_start = 0;
|
|
|
|
|
|
|
|
-/* N.B.: It is important that this be the first function.
|
|
|
|
|
- This file is the first thing in the text section. */
|
|
|
|
|
-
|
|
|
|
|
|
|
+/*
|
|
|
|
|
+ * It is important that this be the first function.
|
|
|
|
|
+ * This file is the first thing in the text section.
|
|
|
|
|
+ */
|
|
|
void
|
|
void
|
|
|
_start ()
|
|
_start ()
|
|
|
{
|
|
{
|
|
|
- /* on the stack we have argc. we can calculate argv/envp
|
|
|
|
|
|
|
+ /*
|
|
|
|
|
+ * On the stack we have argc. We can calculate argv/envp
|
|
|
* from that and the succeeding stack location, but fix so
|
|
* from that and the succeeding stack location, but fix so
|
|
|
- * we get the right calling convention (regs in r10/r11)
|
|
|
|
|
|
|
+ * we get the right calling convention (regs in r10/r11).
|
|
|
*
|
|
*
|
|
|
- * to understand this you really ought to read fs/binfmt_elf.c
|
|
|
|
|
|
|
+ * Please view linux/fs/binfmt_elf.c for a complete
|
|
|
|
|
+ * understanding of this.
|
|
|
*/
|
|
*/
|
|
|
__asm__ volatile("pop $r10");
|
|
__asm__ volatile("pop $r10");
|
|
|
__asm__ volatile("move.d $sp, $r11");
|
|
__asm__ volatile("move.d $sp, $r11");
|
|
@@ -36,14 +34,17 @@ start1 (int argc, char **argv)
|
|
|
/* The environment starts just after ARGV. */
|
|
/* The environment starts just after ARGV. */
|
|
|
environ = &argv[argc + 1];
|
|
environ = &argv[argc + 1];
|
|
|
|
|
|
|
|
- /* If the first thing after ARGV is the arguments
|
|
|
|
|
- themselves, there is no environment. */
|
|
|
|
|
|
|
+ /*
|
|
|
|
|
+ * If the first thing after ARGV is the arguments
|
|
|
|
|
+ * themselves, there is no environment.
|
|
|
|
|
+ */
|
|
|
if ((char *) environ == *argv)
|
|
if ((char *) environ == *argv)
|
|
|
- /* The environment is empty. Make environ
|
|
|
|
|
- point at ARGV[ARGC], which is NULL. */
|
|
|
|
|
|
|
+ /*
|
|
|
|
|
+ * The environment is empty. Make environ
|
|
|
|
|
+ * point at ARGV[ARGC], which is NULL.
|
|
|
|
|
+ */
|
|
|
--environ;
|
|
--environ;
|
|
|
|
|
|
|
|
/* Leave control to the libc */
|
|
/* Leave control to the libc */
|
|
|
-
|
|
|
|
|
__uClibc_main(argc, argv, environ);
|
|
__uClibc_main(argc, argv, environ);
|
|
|
}
|
|
}
|