summaryrefslogtreecommitdiff
path: root/lib/builtins/arm/aeabi_div0.c
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2014-09-06 21:34:02 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2014-09-06 21:34:02 +0000
commit2b2f4db4cd6a28a0259ba7298f8599c07fb4ec59 (patch)
treea8974302a04c807c79d4ff746ab535ba16b2250f /lib/builtins/arm/aeabi_div0.c
parent8554b6b336c08d813b59a4f2383e31b22f30e4dd (diff)
builtins: add AEABI div0 functions
Add the missing AEABI functions that are part of the base platform ABI specification. The provided implementation does the bare minimum to avoid requiring libc headers. This permits the use of compiler-rt on bare-metal environments which conform to EABI. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@217322 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/builtins/arm/aeabi_div0.c')
-rw-r--r--lib/builtins/arm/aeabi_div0.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/builtins/arm/aeabi_div0.c b/lib/builtins/arm/aeabi_div0.c
new file mode 100644
index 000000000..ef604c253
--- /dev/null
+++ b/lib/builtins/arm/aeabi_div0.c
@@ -0,0 +1,43 @@
+/* ===-- aeabi_div0.c - ARM Runtime ABI support routines for compiler-rt ---===
+ *
+ * The LLVM Compiler Infrastructure
+ *
+ * This file is dual licensed under the MIT and the University of Illinois Open
+ * Source Licenses. See LICENSE.TXT for details.
+ *
+ * ===----------------------------------------------------------------------===
+ *
+ * This file implements the division by zero helper routines as specified by the
+ * Run-time ABI for the ARM Architecture.
+ *
+ * ===----------------------------------------------------------------------===
+ */
+
+/*
+ * ยง4.3.2 - Division by zero
+ *
+ * The *div0 functions:
+ * - Return the value passed to them as a parameter
+ * - Or, return a fixed value defined by the execution environment (such as 0)
+ * - Or, raise a signal (often SIGFPE) or throw an exception, and do not return
+ *
+ * An application may provide its own implementations of the *div0 functions to
+ * for a particular behaviour from the *div and *divmod functions called out of
+ * line.
+ */
+
+/* provide an unused declaration to pacify pendantic compilation */
+extern unsigned char declaration;
+
+#if defined(__ARM_EABI__)
+int __attribute__((weak)) __attribute__((visibility("hidden")))
+__aeabi_idiv0(int return_value) {
+ return return_value;
+}
+
+long long __attribute__((weak)) __attribute__((visibility("hidden")))
+__aeabi_ldiv0(long long return_value) {
+ return return_value;
+}
+#endif
+