From d57e5e46c374c8d125cb45517d72cb8ea9b10fd4 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sat, 16 Nov 2019 23:03:51 -0800 Subject: [PATCH 1/2] kcapi-kdf: Move code to fix clang build warning Fixes clang build unused function '_bswap32' [-Werror,-Wunused-function] Signed-off-by: Khem Raj --- lib/kcapi-kdf.c | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/lib/kcapi-kdf.c b/lib/kcapi-kdf.c index ea39846..93c7c74 100644 --- a/lib/kcapi-kdf.c +++ b/lib/kcapi-kdf.c @@ -54,6 +54,20 @@ #include "kcapi.h" #include "internal.h" +#define GCC_VERSION (__GNUC__ * 10000 \ + + __GNUC_MINOR__ * 100 \ + + __GNUC_PATCHLEVEL__) +#if GCC_VERSION >= 40400 +# define __HAVE_BUILTIN_BSWAP32__ +#endif + +/* Endian dependent byte swap operations. */ +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +# define be_bswap32(x) ((uint32_t)(x)) +#elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +# ifdef __HAVE_BUILTIN_BSWAP32__ +# define be_bswap32(x) (uint32_t)__builtin_bswap32((uint32_t)(x)) +# else static inline uint32_t rol32(uint32_t x, int n) { return ( (x << (n&(32-1))) | (x >> ((32-n)&(32-1))) ); @@ -68,27 +82,10 @@ static inline uint32_t _bswap32(uint32_t x) { return ((rol32(x, 8) & 0x00ff00ffL) | (ror32(x, 8) & 0xff00ff00L)); } - -#define GCC_VERSION (__GNUC__ * 10000 \ - + __GNUC_MINOR__ * 100 \ - + __GNUC_PATCHLEVEL__) -#if GCC_VERSION >= 40400 -# define __HAVE_BUILTIN_BSWAP32__ -#endif - -#ifdef __HAVE_BUILTIN_BSWAP32__ -# define _swap32(x) (uint32_t)__builtin_bswap32((uint32_t)(x)) -#else -# define _swap32(x) _bswap32(x) -#endif - -/* Endian dependent byte swap operations. */ -#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -# define be_bswap32(x) ((uint32_t)(x)) -#elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ -# define be_bswap32(x) _swap32(x) +# define be_bswap32(x) _bswap32(x) +# endif #else -#error "Endianess not defined" +# error "Endianess not defined" #endif DSO_PUBLIC From a44913874c3d4a36afad7bd1043e06492d330b8d Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Wed, 20 Nov 2019 13:41:39 -0800 Subject: [PATCH 2/2] Use __builtin_bswap32 on Clang if supported clang pretends to be gcc 4.2.1 so GCC_VERSION macro will decide that __builtin_bswap32 is not supported on clang, whereas in reality it might so its better to add a check for enquiring clang if it supports __builtin_bswap32 or not Signed-off-by: Khem Raj --- lib/kcapi-kdf.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/kcapi-kdf.c b/lib/kcapi-kdf.c index 93c7c74..fb440ea 100644 --- a/lib/kcapi-kdf.c +++ b/lib/kcapi-kdf.c @@ -54,10 +54,14 @@ #include "kcapi.h" #include "internal.h" +#ifndef __has_builtin +# define __has_builtin(x) 0 +#endif + #define GCC_VERSION (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100 \ + __GNUC_PATCHLEVEL__) -#if GCC_VERSION >= 40400 +#if GCC_VERSION >= 40400 || (defined(__clang__) && __has_builtin(__builtin_bswap32)) # define __HAVE_BUILTIN_BSWAP32__ #endif