This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "uClibc-ng - small C library for embedded systems".
The branch, master has been updated
via 6e26587d1734d8071b6132fa9a4a6dc5110e4279 (commit)
from feb9f08cfe8ddd1fd4fb62265e17ee35147ab268 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 6e26587d1734d8071b6132fa9a4a6dc5110e4279
Author: Anthony G. Basile <blueness(a)gentoo.org>
Date: Fri Mar 25 16:35:46 2016 -0400
bits/byteswap-common.h: import recent headers from glibc
On systems where uClibc doesn't provide an arch specific byteswap.h,
we fall back on bits/byteswap-common.h. However, there is a bug
in this header in the __bswap_constant_64(x) macro. If, for example,
a double is passed, we get 'invalid operands to binary &' in which we
mismatch a 'double' and 'long long unsigned int'. The newer glibc
headers fix this and so we import them. Also, since the inclusion of
byteswap.h is not appropriate for assembly code, we guard a portion
of endian.h which uses byteswap.h from inclusion in any assembly.
This is needed, for example, for f2fs-tools 1.6.0 on 32-bit big
endian PowerPC.
Signed-off-by: Anthony G. Basile <blueness(a)gentoo.org>
-----------------------------------------------------------------------
Summary of changes:
include/endian.h | 2 +-
.../sysdeps/linux/common/bits/byteswap-16.h | 35 +++----
libc/sysdeps/linux/common/bits/byteswap-common.h | 109 +++++++++++----------
3 files changed, 72 insertions(+), 74 deletions(-)
copy libpthread/linuxthreads/sysdeps/unix/sysv/linux/raise.c =>
libc/sysdeps/linux/common/bits/byteswap-16.h (59%)
diff --git a/include/endian.h b/include/endian.h
index 23a2654..eb2039e 100644
--- a/include/endian.h
+++ b/include/endian.h
@@ -66,7 +66,7 @@
# endif
#endif
-#ifdef __USE_BSD
+#if defined(__USE_BSD) && !defined(__ASSEMBLER__)
/* Conversion interfaces. */
# include <byteswap.h>
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/raise.c
b/libc/sysdeps/linux/common/bits/byteswap-16.h
similarity index 59%
copy from libpthread/linuxthreads/sysdeps/unix/sysv/linux/raise.c
copy to libc/sysdeps/linux/common/bits/byteswap-16.h
index 1e11a48..8063aa8 100644
--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/raise.c
+++ b/libc/sysdeps/linux/common/bits/byteswap-16.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991, 1996, 2002, 2003, 2005 Free Software Foundation, Inc.
+/* Macros to swap the order of bytes in 16-bit integer values.
+ Copyright (C) 2012-2016 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -15,27 +16,19 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include <signal.h>
-#include <unistd.h>
-
-#ifndef IS_IN_rtld
-# include <bits/libc-lock.h>
-
-# ifndef SHARED
-weak_extern (__pthread_raise)
-# endif
+#ifndef _BITS_BYTESWAP_H
+# error "Never use <bits/byteswap-16.h> directly; include <byteswap.h>
instead."
#endif
-/* Raise the signal SIG. */
-int
-raise (sig)
- int sig;
-{
-#ifdef IS_IN_rtld
- return __kill (__getpid (), sig);
+#ifdef __GNUC__
+# define __bswap_16(x) \
+ (__extension__ \
+ ({ unsigned short int __bsx = (unsigned short int) (x); \
+ __bswap_constant_16 (__bsx); }))
#else
- return __libc_maybe_call2 (pthread_raise, (sig),
- __kill (__getpid (), sig));
-#endif
+static __inline unsigned short int
+__bswap_16 (unsigned short int __bsx)
+{
+ return __bswap_constant_16 (__bsx);
}
-libc_hidden_def (raise)
+#endif
diff --git a/libc/sysdeps/linux/common/bits/byteswap-common.h
b/libc/sysdeps/linux/common/bits/byteswap-common.h
index 4941d47..0effea6 100644
--- a/libc/sysdeps/linux/common/bits/byteswap-common.h
+++ b/libc/sysdeps/linux/common/bits/byteswap-common.h
@@ -1,5 +1,5 @@
/* Macros to swap the order of bytes in integer values.
- Copyright (C) 1997,1998,2000,2001,2002,2005 Free Software Foundation, Inc.
+ Copyright (C) 1997-2016 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -16,54 +16,40 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#if !defined _BYTESWAP_H && !defined _NETINET_IN_H
+#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H
# error "Never use <bits/byteswap.h> directly; include <byteswap.h>
instead."
#endif
#ifndef _BITS_BYTESWAP_H
#define _BITS_BYTESWAP_H 1
+#include <features.h>
+#include <bits/types.h>
+
/* Swap bytes in 16 bit value. */
#define __bswap_constant_16(x) \
- ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8))
+ ((unsigned short int)((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8)))
-#ifndef __bswap_non_constant_16
-# define __bswap_non_constant_16(x) __bswap_constant_16(x)
-#endif
-#ifdef __GNUC__
-# define __bswap_16(x) \
- (__extension__ \
- ({ unsigned short int __bsv, __bsx = (x); \
- if (__builtin_constant_p (__bsx)) \
- __bsv = __bswap_constant_16 (__bsx); \
- else \
- __bsv = __bswap_non_constant_16 (__bsx); \
- __bsv; }))
-#else
-static __inline unsigned short int
-__bswap_16 (unsigned short int __bsx)
-{
- return __bswap_constant_16 (__bsx);
-}
-#endif
+/* Get __bswap_16. */
+#include <bits/byteswap-16.h>
/* Swap bytes in 32 bit value. */
#define __bswap_constant_32(x) \
((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) |
\
(((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24))
-#ifndef __bswap_non_constant_32
-# define __bswap_non_constant_32(x) __bswap_constant_32(x)
-#endif
#ifdef __GNUC__
-# define __bswap_32(x) \
- (__extension__ \
- ({ unsigned int __bsv, __bsx = (x); \
- if (__builtin_constant_p (__bsx)) \
- __bsv = __bswap_constant_32 (__bsx); \
- else \
- __bsv = __bswap_non_constant_32 (__bsx); \
- __bsv; }))
+# if __GNUC_PREREQ (4, 3)
+static __inline unsigned int
+__bswap_32 (unsigned int __bsx)
+{
+ return __builtin_bswap32 (__bsx);
+}
+# else
+# define __bswap_32(x) \
+ (__extension__ \
+ ({ unsigned int __bsx = (x); __bswap_constant_32 (__bsx); }))
+# endif
#else
static __inline unsigned int
__bswap_32 (unsigned int __bsx)
@@ -72,8 +58,40 @@ __bswap_32 (unsigned int __bsx)
}
#endif
-#if defined __GNUC__ && __GNUC__ >= 2
/* Swap bytes in 64 bit value. */
+#if __GNUC_PREREQ (2, 0)
+# define __bswap_constant_64(x) \
+ (__extension__ ((((x) & 0xff00000000000000ull) >> 56) \
+ | (((x) & 0x00ff000000000000ull) >> 40) \
+ | (((x) & 0x0000ff0000000000ull) >> 24) \
+ | (((x) & 0x000000ff00000000ull) >> 8) \
+ | (((x) & 0x00000000ff000000ull) << 8) \
+ | (((x) & 0x0000000000ff0000ull) << 24) \
+ | (((x) & 0x000000000000ff00ull) << 40) \
+ | (((x) & 0x00000000000000ffull) << 56)))
+
+# if __GNUC_PREREQ (4, 3)
+static __inline __uint64_t
+__bswap_64 (__uint64_t __bsx)
+{
+ return __builtin_bswap64 (__bsx);
+}
+# else
+# define __bswap_64(x) \
+ (__extension__ \
+ ({ union { __extension__ __uint64_t __ll; \
+ unsigned int __l[2]; } __w, __r; \
+ if (__builtin_constant_p (x)) \
+ __r.__ll = __bswap_constant_64 (x); \
+ else \
+ { \
+ __w.__ll = (x); \
+ __r.__l[0] = __bswap_32 (__w.__l[1]); \
+ __r.__l[1] = __bswap_32 (__w.__l[0]); \
+ } \
+ __r.__ll; }))
+# endif
+#else
# define __bswap_constant_64(x) \
((((x) & 0xff00000000000000ull) >> 56) \
| (((x) & 0x00ff000000000000ull) >> 40) \
@@ -84,24 +102,11 @@ __bswap_32 (unsigned int __bsx)
| (((x) & 0x000000000000ff00ull) << 40) \
| (((x) & 0x00000000000000ffull) << 56))
-# ifndef __bswap_non_constant_64
-# define __bswap_non_constant_64(x) \
- (__extension__ \
- ({ union { __extension__ unsigned long long int __ll; \
- unsigned int __l[2]; } __w, __r; \
- __w.__ll = (x); \
- __r.__l[0] = __bswap_non_constant_32 (__w.__l[1]); \
- __r.__l[1] = __bswap_non_constant_32 (__w.__l[0]); \
- __r.__ll; }))
-# endif
-# define __bswap_64(x) \
- (__extension__ \
- ({ __extension__ unsigned long long int __ll; \
- if (__builtin_constant_p (x)) \
- __ll = __bswap_constant_64 (x); \
- else \
- __ll = __bswap_non_constant_64 (x); \
- __ll; }))
+static __inline __uint64_t
+__bswap_64 (__uint64_t __bsx)
+{
+ return __bswap_constant_64 (__bsx);
+}
#endif
#endif /* _BITS_BYTESWAP_H */
hooks/post-receive
--
uClibc-ng - small C library for embedded systems