[compiler-rt] r217322 - builtins: add AEABI div0 functions

Saleem Abdulrasool compnerd at compnerd.org
Sat Sep 6 14:34:02 PDT 2014


Author: compnerd
Date: Sat Sep  6 16:34:02 2014
New Revision: 217322

URL: http://llvm.org/viewvc/llvm-project?rev=217322&view=rev
Log:
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.

Added:
    compiler-rt/trunk/lib/builtins/arm/aeabi_div0.c
Modified:
    compiler-rt/trunk/lib/builtins/CMakeLists.txt

Modified: compiler-rt/trunk/lib/builtins/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/CMakeLists.txt?rev=217322&r1=217321&r2=217322&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/CMakeLists.txt (original)
+++ compiler-rt/trunk/lib/builtins/CMakeLists.txt Sat Sep  6 16:34:02 2014
@@ -167,6 +167,7 @@ set(arm_SOURCES
   arm/adddf3vfp.S
   arm/addsf3vfp.S
   arm/aeabi_dcmp.S
+  arm/aeabi_div0.c
   arm/aeabi_fcmp.S
   arm/aeabi_idivmod.S
   arm/aeabi_ldivmod.S

Added: compiler-rt/trunk/lib/builtins/arm/aeabi_div0.c
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_div0.c?rev=217322&view=auto
==============================================================================
--- compiler-rt/trunk/lib/builtins/arm/aeabi_div0.c (added)
+++ compiler-rt/trunk/lib/builtins/arm/aeabi_div0.c Sat Sep  6 16:34:02 2014
@@ -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
+





More information about the llvm-commits mailing list