From 917b9eebbc6dd580e2fa5a4e2b18ea609655b19e Mon Sep 17 00:00:00 2001 From: Vineet Gupta Date: Fri, 13 Dec 2013 14:49:25 +0530 Subject: 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 Signed-off-by: Bernhard Reutner-Fischer --- libc/sysdeps/linux/arc/crt1.S | 54 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 libc/sysdeps/linux/arc/crt1.S (limited to 'libc/sysdeps/linux/arc/crt1.S') 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 +#include + +.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) -- cgit v1.2.3