summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/sh64/crt0.S
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2003-08-13 20:08:30 +0000
committerEric Andersen <andersen@codepoet.org>2003-08-13 20:08:30 +0000
commit533d76fbc420a8cdca389dbea0d86eb64e0e8096 (patch)
tree122e91e59f3b0d1b346a30c2b90320980db0935d /libc/sysdeps/linux/sh64/crt0.S
parentae3cf778c3155c085468fe72a47ddd696a1b5a00 (diff)
Patch from Paul Mundt adding uClibc sh64 support:
Here's a patch that implements the beginnings of a rudimentary sh64 port. So far, this only works static, as I haven't done any of the ldso work yet. I've also not touched the libpthread stuff yet either, so that's also disabled for now. This port was based off of some work that Sean McGoogan at SuperH did for his initial port, but the this patch doesn't carry over too much from there (basically the libc/sysdeps/linux/sh64/Makefile (or rather, parts of it), the setjmp/longjmp stuff (which I had to rewrite portions of it to work with the new toolchains), etc.). However, for static, everything appears to work correcly, at least in a hello world type application.
Diffstat (limited to 'libc/sysdeps/linux/sh64/crt0.S')
-rw-r--r--libc/sysdeps/linux/sh64/crt0.S78
1 files changed, 78 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/sh64/crt0.S b/libc/sysdeps/linux/sh64/crt0.S
new file mode 100644
index 000000000..bd54ba5e2
--- /dev/null
+++ b/libc/sysdeps/linux/sh64/crt0.S
@@ -0,0 +1,78 @@
+/* Startup code for SH5 & ELF.
+ Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 2001 Hewlett-Packard Australia
+
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* This is the canonical entry point, usually the first thing in the text
+ segment.
+
+ At this entry point, most registers' values are unspecified, except:
+
+ sp The stack contains the arguments and environment:
+ 0(sp) argc
+ 4(sp) argv[0]
+ ...
+ (4*argc)(sp) NULL
+ (4*(argc+1))(sp) envp[0]
+ ...
+ NULL
+*/
+
+ .file "crt0.S"
+
+ .globl _start
+ .globl __main
+
+ .type __uClibc_start_main,@function
+
+ .section .text64,"xa"
+ .align 2 /* 2^2 = 4 */
+
+_start:
+ /* Clear the frame pointer since this is the outermost frame. */
+### mov #0, r14 # qqq
+
+ /* Pop argc off the stack and save a pointer to argv */
+ ld.l r15, 0, r2 /* argc */
+ addi r15, 4, r3 /* argv */
+
+ /* set up the value for the environment pointer r4 = (argc+1)*4+argv */
+ addi r2, 1, r4 /* envp = argc + 1 */
+ shlli r4, 2, r4 /* envp = envp * 4 */
+ add r3, r4, r4 /* envp = envp + argv */
+
+ /* call main() */
+ movi __uClibc_start_main,r17
+ ptabs/l r17,tr0
+ blink tr0,r18
+
+ /* should never get here....*/
+### movi abort@lh,r17
+### shori abort@ll,r17
+ ptabs/l r17,tr0
+ blink tr0,r63 /* call abort() => (r63) do not come back ... */
+
+ /*
+ * The following is a stub to stop the GNU toolchain
+ * from calling its C-RTL initialization routines.
+ */
+__main:
+ ptabs/l r18,tr0
+ blink tr0,r63
+