summaryrefslogtreecommitdiffstats
path: root/module/os
diff options
context:
space:
mode:
authorArvind Sankar <[email protected]>2020-06-17 16:02:34 -0400
committerBrian Behlendorf <[email protected]>2020-06-18 12:21:46 -0700
commitc0673571d03a51d9ac014ecb8cbb7a6ca9dee384 (patch)
tree2b01ddaac134dc07cecdfb6324dc8b757961a860 /module/os
parenteebba5d8f486fd069e9fccd9e653894a7d635cdd (diff)
Switch off -Wmissing-prototypes for libgcc math functions
spl-generic.c defines some of the libgcc integer library functions on 32-bit. Don't bother checking -Wmissing-prototypes since nothing should directly call these functions from C code. Reviewed-by: Ryan Moeller <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Arvind Sankar <[email protected]> Closes #10470
Diffstat (limited to 'module/os')
-rw-r--r--module/os/linux/spl/spl-generic.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/module/os/linux/spl/spl-generic.c b/module/os/linux/spl/spl-generic.c
index aa74f6042..820fb86c3 100644
--- a/module/os/linux/spl/spl-generic.c
+++ b/module/os/linux/spl/spl-generic.c
@@ -173,6 +173,7 @@ random_get_pseudo_bytes(uint8_t *ptr, size_t len)
EXPORT_SYMBOL(random_get_pseudo_bytes);
#if BITS_PER_LONG == 32
+
/*
* Support 64/64 => 64 division on a 32-bit platform. While the kernel
* provides a div64_u64() function for this we do not use it because the
@@ -220,6 +221,14 @@ __div_u64(uint64_t u, uint32_t v)
}
/*
+ * Turn off missing prototypes warning for these functions. They are
+ * replacements for libgcc-provided functions and will never be called
+ * directly.
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wmissing-prototypes"
+
+/*
* Implementation of 64-bit unsigned division for 32-bit machines.
*
* First the procedure takes care of the case in which the divisor is a
@@ -294,6 +303,26 @@ __umoddi3(uint64_t dividend, uint64_t divisor)
}
EXPORT_SYMBOL(__umoddi3);
+/* 64-bit signed modulo for 32-bit machines. */
+int64_t
+__moddi3(int64_t n, int64_t d)
+{
+ int64_t q;
+ boolean_t nn = B_FALSE;
+
+ if (n < 0) {
+ nn = B_TRUE;
+ n = -n;
+ }
+ if (d < 0)
+ d = -d;
+
+ q = __umoddi3(n, d);
+
+ return (nn ? -q : q);
+}
+EXPORT_SYMBOL(__moddi3);
+
/*
* Implementation of 64-bit unsigned division/modulo for 32-bit machines.
*/
@@ -397,6 +426,9 @@ __aeabi_ldivmod(int64_t u, int64_t v)
}
EXPORT_SYMBOL(__aeabi_ldivmod);
#endif /* __arm || __arm__ */
+
+#pragma GCC diagnostic pop
+
#endif /* BITS_PER_LONG */
/*