diff options
| -rw-r--r-- | include/system/builtins_begin_.h | 89 | ||||
| -rw-r--r-- | include/system/builtins_end_.h | 11 |
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 |
