diff options
author | Vineet Gupta <vgupta@synopsys.com> | 2013-12-13 14:49:25 +0530 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2013-12-20 14:38:23 +0100 |
commit | 917b9eebbc6dd580e2fa5a4e2b18ea609655b19e (patch) | |
tree | c1b6c5c73db18a0daaca8327d28a0d5babd0f5cc /libc/sysdeps/linux/arc/crt1.S | |
parent | 1ce639990b6340a8b9f18d076c427fcf5a93695e (diff) |
ARC port to uClibc
For this port, I would like to give due credit to:
- Folks from Codito technologies (Sameer, Amit, Kanika, Ramana,...)
who did the very first port
- ARC UK from 2007-2009 (Joern, Irfan, Khurram, Phil...
- Late Brendan Kehoe (may he RIP)
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'libc/sysdeps/linux/arc/crt1.S')
-rw-r--r-- | libc/sysdeps/linux/arc/crt1.S | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/arc/crt1.S b/libc/sysdeps/linux/arc/crt1.S new file mode 100644 index 000000000..d78a96dcc --- /dev/null +++ b/libc/sysdeps/linux/arc/crt1.S @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com) + * + * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. + */ + +#include <features.h> +#include <sysdep.h> + +.text + +#ifndef __UCLIBC_CTOR_DTOR__ + .weak _init + .weak _fini +#endif + +/* Stick in a dummy reference to main(), so that if an application + * is linking when the main() function is in a static library (.a) + * we can be sure that main() actually gets linked in + */ + .type main,@function + .type _main,@function + + +/* When we enter this piece of code, the program stack looks like this: + argc argument counter (integer) + argv[0] program name (pointer) + argv[1...N] program args (pointers) + argv[argc-1] end of args (integer) + NULL + env[0...N] environment variables (pointers) + NULL +*/ +ENTRY(__start) + mov fp, 0 + ld_s r1, [sp] ; argc + + mov_s r5, r0 ; rltd_fini + add_s r2, sp, 4 ; argv + + mov_s r0, main + mov_s r3, _init + mov r4, _fini + + and sp, sp, -8 + mov r6, sp + + /* __uClibc_main (main, argc, argv, init, fini, rtld_fini, stack_end) */ + bl __uClibc_main + + /* Should never get here.... */ + flag 1 +END(__start) +libc_hidden_def(__start) |