summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/system/builtins_begin_.h89
-rw-r--r--include/system/builtins_end_.h11
2 files changed, 35 insertions, 65 deletions
diff --git a/include/system/builtins_begin_.h b/include/system/builtins_begin_.h
index 92ea5e3a..2686c41c 100644
--- a/include/system/builtins_begin_.h
+++ b/include/system/builtins_begin_.h
@@ -1,94 +1,65 @@
// SPDX-License-Identifier: BSD-2-Clause-Patent
/**
- * macros to build builtin wrappers
+ * macros to build function declarations with the same types as builtins
+ * that we apparently really cannot depend on.
*/
-#ifndef mkbi_cat_
-#define mkbi_cat_(a, b) a##b
-#endif
-#ifdef SHIM_STRING_C_
+
+/*
+ * Clang's __builtin_whatever and __typeof__ are broken thusly:
+ * In file included from MokManager.c:2:
+ * In file included from shim.h:47:
+ * include/system/string.h:29:1: error: builtin functions must be directly called
+ * mkbi1_(long int, ffsl, long int, x)
+ * ^
+ */
+#if defined(__clang__)
#ifndef mkbi1_
-#define mkbi1_(rtype, x, typea, a) __typeof__(mkbi_cat_(__builtin_, x)) x;
+#define mkbi1_(rtype, x, typea, a) rtype x(typea a);
#endif
+
#ifndef mkbi2_
-#define mkbi2_(rtype, x, typea, a, typeb, b) __typeof__(mkbi_cat_(__builtin_, x)) x;
+#define mkbi2_(rtype, x, typea, a, typeb, b) rtype x(typea a, typeb b);
#endif
#ifndef mkbi3_
-#define mkbi3_(rtype, x, typea, a, typeb, b, typec, c) __typeof__(mkbi_cat_(__builtin_, x)) x;
+#define mkbi3_(rtype, x, typea, a, typeb, b, typec, c) rtype x(typea a, typeb b, typec c);
#endif
#ifndef mkdepbi1_
-#define mkdepbi1_(rtype, x, typea, a) __typeof__(mkbi_cat_(__builtin_, x)) x;
+#define mkdepbi1_(rtype, x, typea, a) rtype x(typea a);
#endif
#ifndef mkdepbi2_
-#define mkdepbi2_(rtype, x, typea, a, typeb, b) __typeof__(mkbi_cat_(__builtin_, x)) x;
+#define mkdepbi2_(rtype, x, typea, a, typeb, b) rtype x(typea a, typeb b);
#endif
-#else /* ! SHIM_STRING_C_ */
+#else /* !__clang__ */
+
+#ifndef mkbi_cat_
+#define mkbi_cat_(a, b) a##b
+#endif
#ifndef mkbi1_
-#define mkbi1_(rtype, x, typea, a) \
- static inline __attribute__((__unused__)) \
- rtype \
- x(typea a) \
- { \
- return mkbi_cat_(__builtin_, x)(a); \
- }
+#define mkbi1_(rtype, x, typea, a) __typeof__(mkbi_cat_(__builtin_, x)) x;
#endif
#ifndef mkbi2_
-#define mkbi2_(rtype, x, typea, a, typeb, b) \
- static inline __attribute__((__unused__)) \
- rtype \
- x(typea a, typeb b) \
- { \
- return mkbi_cat_(__builtin_, x)(a, b); \
- }
+#define mkbi2_(rtype, x, typea, a, typeb, b) __typeof__(mkbi_cat_(__builtin_, x)) x;
#endif
#ifndef mkbi3_
-#define mkbi3_(rtype, x, typea, a, typeb, b, typec, c) \
- static inline __attribute__((__unused__)) \
- rtype \
- x(typea a, typeb b, typec c) \
- { \
- return mkbi_cat_(__builtin_, x)(a, b,c); \
- }
-#endif
-
-#ifdef SHIM_DEPRECATE_STRLEN
-#ifndef mkdepbi_dep_
-#define mkdepbi_dep_ __attribute__((__deprecated__))
-#endif
-#else /* !SHIM_DEPRECATE_STRLEN */
-#ifndef mkdepbi_dep_
-#define mkdepbi_dep_
+#define mkbi3_(rtype, x, typea, a, typeb, b, typec, c) __typeof__(mkbi_cat_(__builtin_, x)) x;
#endif
-#endif /* SHIM_DEPRECATE_STRLEN */
#ifndef mkdepbi1_
-#define mkdepbi1_(rtype, x, typea, a) \
- static inline __attribute__((__unused__)) \
- mkdepbi_dep_ \
- rtype \
- x(typea a) \
- { \
- return mkbi_cat_(__builtin_, x)(a); \
- }
+#define mkdepbi1_(rtype, x, typea, a) __typeof__(mkbi_cat_(__builtin_, x)) x;
#endif
#ifndef mkdepbi2_
-#define mkdepbi2_(rtype, x, typea, a, typeb, b) \
- static inline __attribute__((__unused__)) \
- mkdepbi_dep_ \
- rtype \
- x(typea a, typeb b) \
- { \
- return mkbi_cat_(__builtin_, x)(a, b); \
- }
+#define mkdepbi2_(rtype, x, typea, a, typeb, b) __typeof__(mkbi_cat_(__builtin_, x)) x;
#endif
-#endif /* SHIM_STRING_C_ */
+
+#endif /* !__clang__ */
// vim:fenc=utf-8:tw=75:noet
diff --git a/include/system/builtins_end_.h b/include/system/builtins_end_.h
index 0a6ad60a..0bcd7661 100644
--- a/include/system/builtins_end_.h
+++ b/include/system/builtins_end_.h
@@ -3,26 +3,25 @@
#ifdef mkbi1_
#undef mkbi1_
#endif
+
#ifdef mkbi2_
#undef mkbi2_
#endif
+
#ifdef mkbi3_
#undef mkbi3_
#endif
+
#ifdef mkdepbi1_
#undef mkdepbi1_
#endif
+
#ifdef mkdepbi2_
#undef mkdepbi2_
#endif
-#ifdef mkdepbi_dep_
-#undef mkdepbi_dep_
-#endif
+
#ifdef mkbi_cat_
#undef mkbi_cat_
#endif
-#ifdef _BUILTINS_BEGIN__H
-#undef _BUILTINS_BEGIN__H
-#endif
// vim:fenc=utf-8:tw=75:noet