[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 1/1] include/endian.h: Remove bswap* duplicate definitions


  • To: Razvan Deaconescu <razvan.deaconescu@xxxxxxxxx>
  • From: Vlad-Andrei BĂDOIU <vlad_andrei.badoiu@xxxxxx>
  • Date: Thu, 19 Nov 2020 23:37:58 +0200 (EET)
  • Cc: minios-devel <minios-devel@xxxxxxxxxxxxx>, felipe huici <felipe.huici@xxxxxxxxx>
  • Delivery-date: Thu, 19 Nov 2020 21:38:12 +0000
  • Dkim-filter: OpenDKIM Filter v2.10.3 mx.upb.ro E9BC6B561FA1
  • List-id: Mini-os development list <minios-devel.lists.xenproject.org>
  • Thread-index: t0vi84ifeViZym8i6Fb+6Dit0rZk9g==
  • Thread-topic: 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



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.