diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2013-11-18 13:35:28 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2013-11-18 13:35:28 +0000 |
commit | 2dec498e093533df8de9b9c04e8027f1d5b764ac (patch) | |
tree | f22e0fd55ff5fc34cd72dc0a6f0847f89b8aaa03 /os/common/ports/e200/compilers/GCC/crt0.s | |
parent | 08b06b919db16c3b5871dd05a43adc8283ed08e8 (diff) | |
download | ChibiOS-2dec498e093533df8de9b9c04e8027f1d5b764ac.tar.gz ChibiOS-2dec498e093533df8de9b9c04e8027f1d5b764ac.tar.bz2 ChibiOS-2dec498e093533df8de9b9c04e8027f1d5b764ac.zip |
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6484 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/common/ports/e200/compilers/GCC/crt0.s')
-rw-r--r-- | os/common/ports/e200/compilers/GCC/crt0.s | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/os/common/ports/e200/compilers/GCC/crt0.s b/os/common/ports/e200/compilers/GCC/crt0.s new file mode 100644 index 000000000..07e870451 --- /dev/null +++ b/os/common/ports/e200/compilers/GCC/crt0.s @@ -0,0 +1,126 @@ +/*
+ ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
+ 2011,2012,2013 Giovanni Di Sirio.
+
+ This file is part of ChibiOS/RT.
+
+ ChibiOS/RT is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS/RT 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * @file PPC/crt0.s
+ * @brief Generic PowerPC startup file for ChibiOS/RT.
+ *
+ * @addtogroup PPC_CORE
+ * @{
+ */
+
+#if !defined(__DOXYGEN__)
+
+ .section .crt0, "ax"
+ .align 2
+ .globl _boot_address
+ .type _boot_address, @function
+_boot_address:
+ /*
+ * Stack setup.
+ */
+ lis %r1, __process_stack_end__@h
+ ori %r1, %r1, __process_stack_end__@l
+ li %r0, 0
+ stwu %r0, -8(%r1)
+ /*
+ * Small sections registers initialization.
+ */
+ lis %r2, __sdata2_start__@h
+ ori %r2, %r2, __sdata2_start__@l
+ lis %r13, __sdata_start__@h
+ ori %r13, %r13, __sdata_start__@l
+ /*
+ * Early initialization.
+ */
+ bl __early_init
+ /*
+ * BSS clearing.
+ */
+ lis %r4, __bss_start__@h
+ ori %r4, %r4, __bss_start__@l
+ lis %r5, __bss_end__@h
+ ori %r5, %r5, __bss_end__@l
+ li %r7, 0
+.bssloop:
+ cmpl cr0, %r4, %r5
+ bge cr0, .bssend
+ stw %r7, 0(%r4)
+ addi %r4, %r4, 4
+ b .bssloop
+.bssend:
+ /*
+ * DATA initialization.
+ */
+ lis %r4, __romdata_start__@h
+ ori %r4, %r4, __romdata_start__@l
+ lis %r5, __data_start__@h
+ ori %r5, %r5, __data_start__@l
+ lis %r6, __data_end__@h
+ ori %r6, %r6, __data_end__@l
+.dataloop:
+ cmpl cr0, %r5, %r6
+ bge cr0, .dataend
+ lwz %r7, 0(%r4)
+ addi %r4, %r4, 4
+ stw %r7, 0(%r5)
+ addi %r5, %r5, 4
+ b .dataloop
+.dataend:
+ /*
+ * Late initialization.
+ */
+ bl __late_init
+ /*
+ * Main program invocation.
+ */
+ bl main
+ b _main_exit_handler
+
+ /*
+ * Default main exit code, infinite loop.
+ */
+ .weak _main_exit_handler
+ .globl _main_exit_handler
+ .type _main_exit_handler, @function
+_main_exit_handler:
+ b _main_exit_handler
+
+ /*
+ * Default early initialization code, none.
+ */
+ .weak __early_init
+ .globl __early_init
+ .type __early_init, @function
+__early_init:
+ blr
+
+ /*
+ * Default late initialization code, none.
+ */
+ .weak __late_init
+ .globl __late_init
+ .type __late_init, @function
+__late_init:
+ blr
+
+#endif /* !defined(__DOXYGEN__) */
+
+/** @} */
|