[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 1/1] include/endian.h: Remove bswap* duplicate definitions
Hi Razvan, This patch is great. I've tried it with the other clang patches and newlib is working all right. Thank you! Reviewed-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxx> ----- Original Message ----- From: "Razvan Deaconescu" <razvan.deaconescu@xxxxxxxxx> To: "minios-devel" <minios-devel@xxxxxxxxxxxxx> Cc: "felipe huici" <felipe.huici@xxxxxxxxx>, "Razvan Deaconescu" <razvan.deaconescu@xxxxxxxxx> Sent: Friday, September 18, 2020 2:32:51 PM Subject: [PATCH v2 1/1] include/endian.h: Remove bswap* duplicate definitions Using Clang results in compilation errors regarding the `__bswapXY` and `__builtin_bswapXY` functions. There are simultaneously a definition of a macro `__bswapXY` and a definition of a function `__bswapXY`; GCC doesn't complain, but Clang does. This is happening in Unikraft because the Unikraft core libraries are using a minimized Unikraft newlib library[4], while the Unikraft app is using the upstream (complete) newlib library[5]. In the end there are two `endian.h` files: one in the Unikraft newlib[6], another one in the upstream newlib (<repo>/newlib/libc/include/machine/endian.h). The Unikraft newlib version of `endian.h` defines `__bswapXY` as inline functions, whereas the upstream newlib defines them as macros. This results in an error from Clang; GCC doesn't mind, though it's an issue having multiple definitions for the same thing (even if one is a macro or one is a function). This commit fixes the issue. It removes the `__bswapXY` parts from the Unikraft version of `endian.h` and includes the upstream version of `endian.h`. Signed-off-by: Razvan Deaconescu <razvan.deaconescu@xxxxxxxxx> --- include/endian.h | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/include/endian.h b/include/endian.h index 3c8a752..f09c312 100644 --- a/include/endian.h +++ b/include/endian.h @@ -27,6 +27,8 @@ #ifndef _ENDIAN_H #define _ENDIAN_H +#include <machine/endian.h> + #define __LITTLE_ENDIAN 1234 #define __BIG_ENDIAN 4321 #define __PDP_ENDIAN 3412 @@ -41,21 +43,6 @@ #include <stdint.h> -static inline uint16_t __bswap16(uint16_t __x) -{ - return __x<<8 | __x>>8; -} - -static inline uint32_t __bswap32(uint32_t __x) -{ - return __x>>24 | (__x>>8&0xff00) | (__x<<8&0xff0000) | __x<<24; -} - -static inline uint64_t __bswap64(uint64_t __x) -{ - return (__bswap32(__x)+0ULL)<<32 | __bswap32(__x>>32); -} - #if __BYTE_ORDER == __LITTLE_ENDIAN #define htobe16(x) __bswap16(x) #define be16toh(x) __bswap16(x) -- 2.17.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |