aboutsummaryrefslogtreecommitdiffstats
path: root/os/common/startup/ARM/compilers/GCC/vectors.S
diff options
context:
space:
mode:
Diffstat (limited to 'os/common/startup/ARM/compilers/GCC/vectors.S')
-rw-r--r--os/common/startup/ARM/compilers/GCC/vectors.S98
1 files changed, 98 insertions, 0 deletions
diff --git a/os/common/startup/ARM/compilers/GCC/vectors.S b/os/common/startup/ARM/compilers/GCC/vectors.S
new file mode 100644
index 000000000..39bd6db73
--- /dev/null
+++ b/os/common/startup/ARM/compilers/GCC/vectors.S
@@ -0,0 +1,98 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file ARM/compilers/GCC/vectors.s
+ * @brief Interrupt vectors for ARM devices.
+ *
+ * @defgroup ARM_VECTORS ARM Exception Vectors
+ * @{
+ */
+
+#if defined(__DOXYGEN__)
+/**
+ * @brief Unhandled exceptions handler.
+ * @details Any undefined exception vector points to this function by default.
+ * This function simply stops the system into an infinite loop.
+ * @note The default implementation is a weak symbol, the application
+ * can override the default implementation.
+ *
+ * @notapi
+ */
+void _unhandled_exception(void) {}
+#endif
+
+#if !defined(__DOXYGEN__)
+
+ .section .vectors, "ax"
+ .code 32
+ .balign 4
+
+/*
+ * System entry points.
+ */
+ .global _start
+_start:
+ ldr pc, _reset
+ ldr pc, _undefined
+ ldr pc, _swi
+ ldr pc, _prefetch
+ ldr pc, _abort
+ nop
+ ldr pc, _irq
+ ldr pc, _fiq
+
+_reset:
+ .word Reset_Handler
+_undefined:
+ .word Und_Handler
+_swi:
+ .word Swi_Handler
+_prefetch:
+ .word Prefetch_Handler
+_abort:
+ .word Abort_Handler
+_fiq:
+ .word Fiq_Handler
+_irq:
+ .word Irq_Handler
+
+/*
+ * Default exceptions handlers. The handlers are declared weak in order to be
+ * replaced by the real handling code. Everything is defaulted to an infinite
+ * loop.
+ */
+ .weak Reset_Handler
+Reset_Handler:
+ .weak Und_Handler
+Und_Handler:
+ .weak Swi_Handler
+Swi_Handler:
+ .weak Prefetch_Handler
+Prefetch_Handler:
+ .weak Abort_Handler
+Abort_Handler:
+ .weak Fiq_Handler
+Fiq_Handler:
+ .weak Irq_Handler
+Irq_Handler:
+ .weak _unhandled_exception
+_unhandled_exception:
+ b _unhandled_exception
+
+#endif
+
+/** @} */