Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'libgloss/mn10300/crt0_redboot.S')
-rw-r--r--libgloss/mn10300/crt0_redboot.S97
1 files changed, 97 insertions, 0 deletions
diff --git a/libgloss/mn10300/crt0_redboot.S b/libgloss/mn10300/crt0_redboot.S
new file mode 100644
index 000000000..c3667c542
--- /dev/null
+++ b/libgloss/mn10300/crt0_redboot.S
@@ -0,0 +1,97 @@
+/*
+ * crt0_redboot.S -- Minimal startup file for MN10300 targets running Redboot.
+ *
+ * Copyright (c) 2001 Red Hat, Inc.
+ * Derived from crt0_cygmon.S - Copyright (c) 1995, 1996, 1997, 2000 Red Hat, Inc.
+ *
+ * The authors hereby grant permission to use, copy, modify, distribute,
+ * and license this software and its documentation for any purpose, provided
+ * that existing copyright notices are retained in all copies and that this
+ * notice is included verbatim in any distributions. No written agreement,
+ * license, or royalty fee is required for any of the authorized uses.
+ * Modifications to this software may be copyrighted by their authors
+ * and need not follow the licensing terms described here, provided that
+ * the new terms are clearly indicated on the first page of each file where
+ * they apply.
+ */
+
+/*
+ * This file contains the minimal startup code necessary.
+ * This will not do any hardware initialization. It is assumed that we are talking to Redboot
+ * and therefore the hardware will be initialized properly.
+ */
+
+/*
+ * Set up some room for a stack. We just grab a chunk of memory.
+ */
+#define STACK_SIZE 0x4000
+#define GLOBAL_SIZE 0x2000
+
+#define STARTUP_STACK_SIZE 0x0100
+
+ .comm __memsize, 12
+ .comm __lstack, STARTUP_STACK_SIZE
+ .comm __stackbase,4
+
+ .section .text
+ .global _start
+_start:
+ /*
+ * Setup a small stack so we can run some C code,
+ * and get the usable memory size.
+ */
+ mov __lstack,a0
+ add STARTUP_STACK_SIZE-4,a0
+ mov a0,sp
+
+ /*
+ * zero out the bss section.
+ */
+ .global __memsize
+ .global _get_mem_info
+zerobss:
+ mov __bss_start, a0 # These variables are defined in the linker script
+ mov _end, a1
+
+ cmp a0, a1 # If no bss, then do nothing
+ beq 7f
+
+ clr d0
+3:
+ movbu d0,(a0) # Clear a byte and bump pointer
+ inc a0
+ cmp a0, a1
+ bne 3b
+
+7:
+ /*
+ * Setup the stack pointer --
+ * get_mem_info returns the top of memory, so just use that In
+ * addition, we must subtract 24 bytes for the 3 8 byte
+ * arguments to main, in case main wants to write them back to
+ * the stack. The caller is supposed to allocate stack space
+ * for parameters in registers in the old MIPS ABIs. We must
+ * do this even though we aren't passing arguments, because
+ * main might be declared to have them.
+ * Some ports need a larger alignment for the stack, so we
+ * subtract 32, which satisifes the stack for the arguments and
+ * keeps the stack pointer better aligned.
+ */
+ mov __memsize, d0
+ call _get_mem_info,[],0
+
+ sub 32, a0
+ mov a0, sp
+
+ mov __stackbase, a1
+ mov a0, (a1) # keep this for future ref
+
+ call ___main,[],0 # Call __main to run ctors/dtors
+ clr d0
+ clr d1
+ mov d0, (4,sp)
+ or 0x0800,psw # Enable interrupts
+ call _main,[],0 # Call main program
+ call _exit,[],0
+
+/* EOF crt0_redboot.S */