mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-13 14:50:17 +00:00
Merge release/2.26/master into ibm/2.26/master
This commit is contained in:
commit
c9df582f3a
82
ChangeLog
82
ChangeLog
@ -1,3 +1,85 @@
|
|||||||
|
2017-08-21 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
[BZ #21972]
|
||||||
|
* assert/assert.h (assert): Use static_cast (bool) for C++.
|
||||||
|
Use the ternary operator in the warning branch for GNU C.
|
||||||
|
* assert/Makefile (tests): Add tst-assert-c++, tst-assert-g++.
|
||||||
|
(CFLAGS-tst-assert-c++.o): Compile in C++11 mode.
|
||||||
|
(CFLAGS-tst-assert-g++.o): Compile in GnU C++11 mode.
|
||||||
|
(LDLIBS-tst-assert-c++, LDLIBS-tst-assert-g++): Link with libstdc++.
|
||||||
|
* assert/tst-assert-c++.cc, assert/tst-assert-g++.cc: New files.
|
||||||
|
|
||||||
|
2017-08-18 Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
|
||||||
|
|
||||||
|
* misc/sys/cdefs.h (__HAVE_GENERIC_SELECTION): Define to 0, if
|
||||||
|
in C++ mode.
|
||||||
|
|
||||||
|
2017-08-18 Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
|
||||||
|
|
||||||
|
[BZ #21930]
|
||||||
|
* math/math.h (isinf): Check if in C or C++ mode before using
|
||||||
|
__builtin_types_compatible_p, since this is a C mode feature.
|
||||||
|
|
||||||
|
2017-08-10 Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
|
||||||
|
|
||||||
|
[BZ #21941]
|
||||||
|
* sysdeps/powerpc/fpu/math_private.h (__ieee754_sqrtf128): Since
|
||||||
|
xssqrtqp requires operands to be in Vector Registers
|
||||||
|
(Altivec/VMX), replace the register constraint 'wq' with 'v'.
|
||||||
|
* sysdeps/powerpc/powerpc64le/power9/fpu/e_sqrtf128.c
|
||||||
|
(__ieee754_sqrtf128): Likewise.
|
||||||
|
|
||||||
|
2017-08-11 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
[BZ #21242]
|
||||||
|
* assert/assert.h [__GNUC__ && !__STRICT_ANSI__] (assert):
|
||||||
|
Suppress pedantic warning resulting from statement expression.
|
||||||
|
(__ASSERT_FUNCTION): Add missing __extension__.
|
||||||
|
|
||||||
|
2017-08-10 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
* malloc/malloc.c (get_max_fast): Reimplement as an inline
|
||||||
|
function which calls __builtin_unreachable.
|
||||||
|
|
||||||
|
2017-08-09 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
[BZ #21932]
|
||||||
|
* nss/getXXbyYY_r.c (REENTRANT_NAME): Call __resolv_context_put
|
||||||
|
before early return.
|
||||||
|
|
||||||
|
2017-08-09 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||||
|
|
||||||
|
[BZ #21780]
|
||||||
|
* sysdeps/posix/preadv2.c (preadv2): Use ENOTSUP instead of
|
||||||
|
EOPNOTSUPP.
|
||||||
|
* sysdeps/posix/preadv64v2.c (preadv64v2): Likewise.
|
||||||
|
* sysdeps/posix/pwritev2.c (pwritev2): Likewise.
|
||||||
|
* sysdeps/posix/pwritev64v2.c (pwritev64v2): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/preadv2.c (preadv2): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/preadv64v2.c (preadv64v2): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/pwritev2.c (pwritev2): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/pwritev64v2.c (pwritev64v2): Likewise.
|
||||||
|
|
||||||
|
2017-08-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
[BZ #21871]
|
||||||
|
* sysdeps/x86/cpu-features.c (init_cpu_features): Set
|
||||||
|
bit_arch_Use_dl_runtime_resolve_opt only with AVX512F.
|
||||||
|
|
||||||
|
2017-08-03 Aurelien Jarno <aurelien@aurel32.net>
|
||||||
|
|
||||||
|
* stdlib/getentropy.c (getentropy): Change return type to int.
|
||||||
|
|
||||||
|
2017-08-03 Aurelien Jarno <aurelien@aurel32.net>
|
||||||
|
|
||||||
|
* sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Regenerated.
|
||||||
|
|
||||||
|
2017-08-03 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
[BZ #21885]
|
||||||
|
* sysdeps/posix/getaddrinfo.c (gethosts): Release resolver context
|
||||||
|
on memory allocation failure.
|
||||||
|
|
||||||
2017-08-02 Siddhesh Poyarekar <siddhesh@sourceware.org>
|
2017-08-02 Siddhesh Poyarekar <siddhesh@sourceware.org>
|
||||||
|
|
||||||
* version.h (RELEASE): Set to "stable"
|
* version.h (RELEASE): Set to "stable"
|
||||||
|
13
NEWS
13
NEWS
@ -5,6 +5,19 @@ See the end for copying conditions.
|
|||||||
Please send GNU C library bug reports via <http://sourceware.org/bugzilla/>
|
Please send GNU C library bug reports via <http://sourceware.org/bugzilla/>
|
||||||
using `glibc' in the "product" field.
|
using `glibc' in the "product" field.
|
||||||
|
|
||||||
|
Version 2.26.1
|
||||||
|
|
||||||
|
The following bugs are resolved with this release:
|
||||||
|
|
||||||
|
[21242] assert: Suppress pedantic warning caused by statement expression
|
||||||
|
[21780] posix: Set p{read,write}v2 to return ENOTSUP
|
||||||
|
[21871] x86-64: Use _dl_runtime_resolve_opt only with AVX512F
|
||||||
|
[21885] getaddrinfo: Release resolver context on error in gethosts
|
||||||
|
[21930] Do not use __builtin_types_compatible_p in C++ mode
|
||||||
|
[21932] Unpaired __resolv_context_get in generic get*_r implementation
|
||||||
|
[21941] powerpc: Restrict xssqrtqp operands to Vector Registers
|
||||||
|
[21972] assert macro requires operator== (int) for its argument type
|
||||||
|
|
||||||
Version 2.26
|
Version 2.26
|
||||||
|
|
||||||
Major new features:
|
Major new features:
|
||||||
|
@ -25,6 +25,15 @@ include ../Makeconfig
|
|||||||
headers := assert.h
|
headers := assert.h
|
||||||
|
|
||||||
routines := assert assert-perr __assert
|
routines := assert assert-perr __assert
|
||||||
tests := test-assert test-assert-perr
|
tests := test-assert test-assert-perr tst-assert-c++ tst-assert-g++
|
||||||
|
|
||||||
include ../Rules
|
include ../Rules
|
||||||
|
|
||||||
|
ifeq ($(have-cxx-thread_local),yes)
|
||||||
|
CFLAGS-tst-assert-c++.o = -std=c++11
|
||||||
|
LDLIBS-tst-assert-c++ = -lstdc++
|
||||||
|
CFLAGS-tst-assert-g++.o = -std=gnu++11
|
||||||
|
LDLIBS-tst-assert-g++ = -lstdc++
|
||||||
|
else
|
||||||
|
tests-unsupported += tst-assert-c++ tst-assert-g++
|
||||||
|
endif
|
||||||
|
@ -85,19 +85,29 @@ __END_DECLS
|
|||||||
/* When possible, define assert so that it does not add extra
|
/* When possible, define assert so that it does not add extra
|
||||||
parentheses around EXPR. Otherwise, those added parentheses would
|
parentheses around EXPR. Otherwise, those added parentheses would
|
||||||
suppress warnings we'd expect to be detected by gcc's -Wparentheses. */
|
suppress warnings we'd expect to be detected by gcc's -Wparentheses. */
|
||||||
# if !defined __GNUC__ || defined __STRICT_ANSI__
|
# if defined __cplusplus
|
||||||
|
# define assert(expr) \
|
||||||
|
(static_cast <bool> (expr) \
|
||||||
|
? void (0) \
|
||||||
|
: __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
|
||||||
|
# elif !defined __GNUC__ || defined __STRICT_ANSI__
|
||||||
# define assert(expr) \
|
# define assert(expr) \
|
||||||
((expr) \
|
((expr) \
|
||||||
? __ASSERT_VOID_CAST (0) \
|
? __ASSERT_VOID_CAST (0) \
|
||||||
: __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
|
: __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
|
||||||
# else
|
# else
|
||||||
|
/* The first occurrence of EXPR is not evaluated due to the sizeof,
|
||||||
|
but will trigger any pedantic warnings masked by the __extension__
|
||||||
|
for the second occurrence. The ternary operator is required to
|
||||||
|
support function pointers and bit fields in this context, and to
|
||||||
|
suppress the evaluation of variable length arrays. */
|
||||||
# define assert(expr) \
|
# define assert(expr) \
|
||||||
({ \
|
((void) sizeof ((expr) ? 1 : 0), __extension__ ({ \
|
||||||
if (expr) \
|
if (expr) \
|
||||||
; /* empty */ \
|
; /* empty */ \
|
||||||
else \
|
else \
|
||||||
__assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION); \
|
__assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION); \
|
||||||
})
|
}))
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef __USE_GNU
|
# ifdef __USE_GNU
|
||||||
@ -113,7 +123,7 @@ __END_DECLS
|
|||||||
C9x has a similar variable called __func__, but prefer the GCC one since
|
C9x has a similar variable called __func__, but prefer the GCC one since
|
||||||
it demangles C++ function names. */
|
it demangles C++ function names. */
|
||||||
# if defined __cplusplus ? __GNUC_PREREQ (2, 6) : __GNUC_PREREQ (2, 4)
|
# if defined __cplusplus ? __GNUC_PREREQ (2, 6) : __GNUC_PREREQ (2, 4)
|
||||||
# define __ASSERT_FUNCTION __PRETTY_FUNCTION__
|
# define __ASSERT_FUNCTION __extension__ __PRETTY_FUNCTION__
|
||||||
# else
|
# else
|
||||||
# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
|
# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
|
||||||
# define __ASSERT_FUNCTION __func__
|
# define __ASSERT_FUNCTION __func__
|
||||||
|
78
assert/tst-assert-c++.cc
Normal file
78
assert/tst-assert-c++.cc
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
/* Tests for interactions between C++ and assert.
|
||||||
|
Copyright (C) 2017 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
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with the GNU C Library; if not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
/* The C++ standard requires that if the assert argument is a constant
|
||||||
|
subexpression, then the assert itself is one, too. */
|
||||||
|
constexpr int
|
||||||
|
check_constexpr ()
|
||||||
|
{
|
||||||
|
return (assert (true), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Objects of this class can be contextually converted to bool, but
|
||||||
|
cannot be compared to int. */
|
||||||
|
struct no_int
|
||||||
|
{
|
||||||
|
no_int () = default;
|
||||||
|
no_int (const no_int &) = delete;
|
||||||
|
|
||||||
|
explicit operator bool () const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator! () const; /* No definition. */
|
||||||
|
template <class T> bool operator== (T) const; /* No definition. */
|
||||||
|
template <class T> bool operator!= (T) const; /* No definition. */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This class tests that operator== is not used by assert. */
|
||||||
|
struct bool_and_int
|
||||||
|
{
|
||||||
|
bool_and_int () = default;
|
||||||
|
bool_and_int (const no_int &) = delete;
|
||||||
|
|
||||||
|
explicit operator bool () const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator! () const; /* No definition. */
|
||||||
|
template <class T> bool operator== (T) const; /* No definition. */
|
||||||
|
template <class T> bool operator!= (T) const; /* No definition. */
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
do_test ()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
no_int value;
|
||||||
|
assert (value);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
bool_and_int value;
|
||||||
|
assert (value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <support/test-driver.c>
|
19
assert/tst-assert-g++.cc
Normal file
19
assert/tst-assert-g++.cc
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/* Tests for interactions between C++ and assert. GNU C++11 version.
|
||||||
|
Copyright (C) 2017 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
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with the GNU C Library; if not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <tst-assert-c++.cc>
|
@ -1658,6 +1658,9 @@ typedef struct malloc_chunk *mfastbinptr;
|
|||||||
#define arena_is_corrupt(A) (((A)->flags & ARENA_CORRUPTION_BIT))
|
#define arena_is_corrupt(A) (((A)->flags & ARENA_CORRUPTION_BIT))
|
||||||
#define set_arena_corrupt(A) ((A)->flags |= ARENA_CORRUPTION_BIT)
|
#define set_arena_corrupt(A) ((A)->flags |= ARENA_CORRUPTION_BIT)
|
||||||
|
|
||||||
|
/* Maximum size of memory handled in fastbins. */
|
||||||
|
static INTERNAL_SIZE_T global_max_fast;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Set value of max_fast.
|
Set value of max_fast.
|
||||||
Use impossibly small value if 0.
|
Use impossibly small value if 0.
|
||||||
@ -1668,8 +1671,20 @@ typedef struct malloc_chunk *mfastbinptr;
|
|||||||
#define set_max_fast(s) \
|
#define set_max_fast(s) \
|
||||||
global_max_fast = (((s) == 0) \
|
global_max_fast = (((s) == 0) \
|
||||||
? SMALLBIN_WIDTH : ((s + SIZE_SZ) & ~MALLOC_ALIGN_MASK))
|
? SMALLBIN_WIDTH : ((s + SIZE_SZ) & ~MALLOC_ALIGN_MASK))
|
||||||
#define get_max_fast() global_max_fast
|
|
||||||
|
|
||||||
|
static inline INTERNAL_SIZE_T
|
||||||
|
get_max_fast (void)
|
||||||
|
{
|
||||||
|
/* Tell the GCC optimizers that global_max_fast is never larger
|
||||||
|
than MAX_FAST_SIZE. This avoids out-of-bounds array accesses in
|
||||||
|
_int_malloc after constant propagation of the size parameter.
|
||||||
|
(The code never executes because malloc preserves the
|
||||||
|
global_max_fast invariant, but the optimizers may not recognize
|
||||||
|
this.) */
|
||||||
|
if (global_max_fast > MAX_FAST_SIZE)
|
||||||
|
__builtin_unreachable ();
|
||||||
|
return global_max_fast;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
----------- Internal state representation and initialization -----------
|
----------- Internal state representation and initialization -----------
|
||||||
@ -1797,9 +1812,6 @@ static struct malloc_par mp_ =
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Maximum size of memory handled in fastbins. */
|
|
||||||
static INTERNAL_SIZE_T global_max_fast;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Initialize a malloc_state struct.
|
Initialize a malloc_state struct.
|
||||||
|
|
||||||
|
@ -442,8 +442,12 @@ enum
|
|||||||
|
|
||||||
/* Return nonzero value if X is positive or negative infinity. */
|
/* Return nonzero value if X is positive or negative infinity. */
|
||||||
# if __HAVE_DISTINCT_FLOAT128 && !__GNUC_PREREQ (7,0) \
|
# if __HAVE_DISTINCT_FLOAT128 && !__GNUC_PREREQ (7,0) \
|
||||||
&& !defined __SUPPORT_SNAN__
|
&& !defined __SUPPORT_SNAN__ && !defined __cplusplus
|
||||||
/* __builtin_isinf_sign is broken for float128 only before GCC 7.0. */
|
/* Since __builtin_isinf_sign is broken for float128 before GCC 7.0,
|
||||||
|
use the helper function, __isinff128, with older compilers. This is
|
||||||
|
only provided for C mode, because in C++ mode, GCC has no support
|
||||||
|
for __builtin_types_compatible_p (and when in C++ mode, this macro is
|
||||||
|
not used anyway, because libstdc++ headers undefine it). */
|
||||||
# define isinf(x) \
|
# define isinf(x) \
|
||||||
(__builtin_types_compatible_p (__typeof (x), _Float128) \
|
(__builtin_types_compatible_p (__typeof (x), _Float128) \
|
||||||
? __isinff128 (x) : __builtin_isinf_sign (x))
|
? __isinff128 (x) : __builtin_isinf_sign (x))
|
||||||
|
@ -464,17 +464,18 @@
|
|||||||
# define __glibc_macro_warning(msg)
|
# define __glibc_macro_warning(msg)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Support for generic selection (ISO C11) is available in GCC since
|
/* Generic selection (ISO C11) is a C-only feature, available in GCC
|
||||||
version 4.9. Previous versions do not provide generic selection,
|
since version 4.9. Previous versions do not provide generic
|
||||||
even though they might set __STDC_VERSION__ to 201112L, when in
|
selection, even though they might set __STDC_VERSION__ to 201112L,
|
||||||
-std=c11 mode. Thus, we must check for !defined __GNUC__ when
|
when in -std=c11 mode. Thus, we must check for !defined __GNUC__
|
||||||
testing __STDC_VERSION__ for generic selection support.
|
when testing __STDC_VERSION__ for generic selection support.
|
||||||
On the other hand, Clang also defines __GNUC__, so a clang-specific
|
On the other hand, Clang also defines __GNUC__, so a clang-specific
|
||||||
check is required to enable the use of generic selection. */
|
check is required to enable the use of generic selection. */
|
||||||
#if __GNUC_PREREQ (4, 9) \
|
#if !defined __cplusplus \
|
||||||
|| __glibc_clang_has_extension (c_generic_selections) \
|
&& (__GNUC_PREREQ (4, 9) \
|
||||||
|| (!defined __GNUC__ && defined __STDC_VERSION__ \
|
|| __glibc_clang_has_extension (c_generic_selections) \
|
||||||
&& __STDC_VERSION__ >= 201112L)
|
|| (!defined __GNUC__ && defined __STDC_VERSION__ \
|
||||||
|
&& __STDC_VERSION__ >= 201112L))
|
||||||
# define __HAVE_GENERIC_SELECTION 1
|
# define __HAVE_GENERIC_SELECTION 1
|
||||||
#else
|
#else
|
||||||
# define __HAVE_GENERIC_SELECTION 0
|
# define __HAVE_GENERIC_SELECTION 0
|
||||||
|
@ -234,6 +234,9 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
|
|||||||
H_ERRNO_VAR_P))
|
H_ERRNO_VAR_P))
|
||||||
{
|
{
|
||||||
case -1:
|
case -1:
|
||||||
|
# ifdef NEED__RES
|
||||||
|
__resolv_context_put (res_ctx);
|
||||||
|
# endif
|
||||||
return errno;
|
return errno;
|
||||||
case 1:
|
case 1:
|
||||||
#ifdef NEED_H_ERRNO
|
#ifdef NEED_H_ERRNO
|
||||||
@ -253,7 +256,12 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
|
|||||||
nscd_status = NSCD_NAME (ADD_VARIABLES, resbuf, buffer, buflen, result
|
nscd_status = NSCD_NAME (ADD_VARIABLES, resbuf, buffer, buflen, result
|
||||||
H_ERRNO_VAR);
|
H_ERRNO_VAR);
|
||||||
if (nscd_status >= 0)
|
if (nscd_status >= 0)
|
||||||
return nscd_status;
|
{
|
||||||
|
# ifdef NEED__RES
|
||||||
|
__resolv_context_put (res_ctx);
|
||||||
|
# endif
|
||||||
|
return nscd_status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
/* Write LENGTH bytes of randomness starting at BUFFER. Return 0 on
|
/* Write LENGTH bytes of randomness starting at BUFFER. Return 0 on
|
||||||
success and -1 on failure. */
|
success and -1 on failure. */
|
||||||
ssize_t
|
int
|
||||||
getentropy (void *buffer, size_t length)
|
getentropy (void *buffer, size_t length)
|
||||||
{
|
{
|
||||||
__set_errno (ENOSYS);
|
__set_errno (ENOSYS);
|
||||||
|
@ -58,7 +58,7 @@ double: 1
|
|||||||
float128: 2
|
float128: 2
|
||||||
idouble: 1
|
idouble: 1
|
||||||
ifloat128: 2
|
ifloat128: 2
|
||||||
ildouble: 4
|
ildouble: 5
|
||||||
ldouble: 3
|
ldouble: 3
|
||||||
|
|
||||||
Function: "asin":
|
Function: "asin":
|
||||||
@ -1154,8 +1154,8 @@ float128: 4
|
|||||||
idouble: 3
|
idouble: 3
|
||||||
ifloat: 3
|
ifloat: 3
|
||||||
ifloat128: 4
|
ifloat128: 4
|
||||||
ildouble: 7
|
ildouble: 8
|
||||||
ldouble: 7
|
ldouble: 8
|
||||||
|
|
||||||
Function: Imaginary part of "clog10_upward":
|
Function: Imaginary part of "clog10_upward":
|
||||||
double: 1
|
double: 1
|
||||||
@ -2013,8 +2013,8 @@ double: 3
|
|||||||
float: 4
|
float: 4
|
||||||
idouble: 3
|
idouble: 3
|
||||||
ifloat: 4
|
ifloat: 4
|
||||||
ildouble: 5
|
ildouble: 6
|
||||||
ldouble: 5
|
ldouble: 6
|
||||||
|
|
||||||
Function: "hypot":
|
Function: "hypot":
|
||||||
double: 1
|
double: 1
|
||||||
@ -2205,8 +2205,8 @@ float128: 8
|
|||||||
idouble: 3
|
idouble: 3
|
||||||
ifloat: 4
|
ifloat: 4
|
||||||
ifloat128: 8
|
ifloat128: 8
|
||||||
ildouble: 5
|
ildouble: 6
|
||||||
ldouble: 5
|
ldouble: 6
|
||||||
|
|
||||||
Function: "log":
|
Function: "log":
|
||||||
double: 1
|
double: 1
|
||||||
|
@ -255,6 +255,8 @@ convert_hostent_to_gaih_addrtuple (const struct addrinfo *req,
|
|||||||
break; \
|
break; \
|
||||||
if (!scratch_buffer_grow (tmpbuf)) \
|
if (!scratch_buffer_grow (tmpbuf)) \
|
||||||
{ \
|
{ \
|
||||||
|
__resolv_context_enable_inet6 (res_ctx, res_enable_inet6); \
|
||||||
|
__resolv_context_put (res_ctx); \
|
||||||
result = -EAI_MEMORY; \
|
result = -EAI_MEMORY; \
|
||||||
goto free_and_return; \
|
goto free_and_return; \
|
||||||
} \
|
} \
|
||||||
|
@ -28,7 +28,7 @@ preadv2 (int fd, const struct iovec *vector, int count, OFF_T offset,
|
|||||||
{
|
{
|
||||||
if (flags != 0)
|
if (flags != 0)
|
||||||
{
|
{
|
||||||
__set_errno (EOPNOTSUPP);
|
__set_errno (ENOTSUP);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ preadv64v2 (int fd, const struct iovec *vector, int count, OFF_T offset,
|
|||||||
{
|
{
|
||||||
if (flags != 0)
|
if (flags != 0)
|
||||||
{
|
{
|
||||||
__set_errno (EOPNOTSUPP);
|
__set_errno (ENOTSUP);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ pwritev2 (int fd, const struct iovec *vector, int count, OFF_T offset,
|
|||||||
{
|
{
|
||||||
if (flags != 0)
|
if (flags != 0)
|
||||||
{
|
{
|
||||||
__set_errno (EOPNOTSUPP);
|
__set_errno (ENOTSUP);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ pwritev64v2 (int fd, const struct iovec *vector, int count, OFF_T offset,
|
|||||||
{
|
{
|
||||||
if (flags != 0)
|
if (flags != 0)
|
||||||
{
|
{
|
||||||
__set_errno (EOPNOTSUPP);
|
__set_errno (ENOTSUP);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ extern __always_inline _Float128
|
|||||||
__ieee754_sqrtf128 (_Float128 __x)
|
__ieee754_sqrtf128 (_Float128 __x)
|
||||||
{
|
{
|
||||||
_Float128 __z;
|
_Float128 __z;
|
||||||
asm ("xssqrtqp %0,%1" : "=wq" (__z) : "wq" (__x));
|
asm ("xssqrtqp %0,%1" : "=v" (__z) : "v" (__x));
|
||||||
return __z;
|
return __z;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -30,7 +30,7 @@ __float128
|
|||||||
__ieee754_sqrtf128 (__float128 a)
|
__ieee754_sqrtf128 (__float128 a)
|
||||||
{
|
{
|
||||||
__float128 z;
|
__float128 z;
|
||||||
asm ("xssqrtqp %0,%1" : "=wq" (z) : "wq" (a));
|
asm ("xssqrtqp %0,%1" : "=v" (z) : "v" (a));
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
strong_alias (__ieee754_sqrtf128, __sqrtf128_finite)
|
strong_alias (__ieee754_sqrtf128, __sqrtf128_finite)
|
||||||
|
@ -32,7 +32,7 @@ preadv2 (int fd, const struct iovec *vector, int count, off_t offset,
|
|||||||
# ifdef __NR_preadv2
|
# ifdef __NR_preadv2
|
||||||
ssize_t result = SYSCALL_CANCEL (preadv2, fd, vector, count,
|
ssize_t result = SYSCALL_CANCEL (preadv2, fd, vector, count,
|
||||||
LO_HI_LONG (offset), flags);
|
LO_HI_LONG (offset), flags);
|
||||||
if (result >= 0 || errno != ENOSYS)
|
if (result >= 0)
|
||||||
return result;
|
return result;
|
||||||
# endif
|
# endif
|
||||||
/* Trying to emulate the preadv2 syscall flags is troublesome:
|
/* Trying to emulate the preadv2 syscall flags is troublesome:
|
||||||
@ -46,7 +46,7 @@ preadv2 (int fd, const struct iovec *vector, int count, off_t offset,
|
|||||||
|
|
||||||
if (flags != 0)
|
if (flags != 0)
|
||||||
{
|
{
|
||||||
__set_errno (EOPNOTSUPP);
|
__set_errno (ENOTSUP);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return preadv (fd, vector, count, offset);
|
return preadv (fd, vector, count, offset);
|
||||||
|
@ -30,7 +30,7 @@ preadv64v2 (int fd, const struct iovec *vector, int count, off64_t offset,
|
|||||||
#ifdef __NR_preadv64v2
|
#ifdef __NR_preadv64v2
|
||||||
ssize_t result = SYSCALL_CANCEL (preadv64v2, fd, vector, count,
|
ssize_t result = SYSCALL_CANCEL (preadv64v2, fd, vector, count,
|
||||||
LO_HI_LONG (offset), flags);
|
LO_HI_LONG (offset), flags);
|
||||||
if (result >= 0 || errno != ENOSYS)
|
if (result >= 0)
|
||||||
return result;
|
return result;
|
||||||
#endif
|
#endif
|
||||||
/* Trying to emulate the preadv2 syscall flags is troublesome:
|
/* Trying to emulate the preadv2 syscall flags is troublesome:
|
||||||
@ -44,7 +44,7 @@ preadv64v2 (int fd, const struct iovec *vector, int count, off64_t offset,
|
|||||||
|
|
||||||
if (flags != 0)
|
if (flags != 0)
|
||||||
{
|
{
|
||||||
__set_errno (EOPNOTSUPP);
|
__set_errno (ENOTSUP);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return preadv64 (fd, vector, count, offset);
|
return preadv64 (fd, vector, count, offset);
|
||||||
|
@ -28,7 +28,7 @@ pwritev2 (int fd, const struct iovec *vector, int count, off_t offset,
|
|||||||
# ifdef __NR_pwritev2
|
# ifdef __NR_pwritev2
|
||||||
ssize_t result = SYSCALL_CANCEL (pwritev2, fd, vector, count,
|
ssize_t result = SYSCALL_CANCEL (pwritev2, fd, vector, count,
|
||||||
LO_HI_LONG (offset), flags);
|
LO_HI_LONG (offset), flags);
|
||||||
if (result >= 0 || errno != ENOSYS)
|
if (result >= 0)
|
||||||
return result;
|
return result;
|
||||||
# endif
|
# endif
|
||||||
/* Trying to emulate the pwritev2 syscall flags is troublesome:
|
/* Trying to emulate the pwritev2 syscall flags is troublesome:
|
||||||
@ -42,7 +42,7 @@ pwritev2 (int fd, const struct iovec *vector, int count, off_t offset,
|
|||||||
|
|
||||||
if (flags != 0)
|
if (flags != 0)
|
||||||
{
|
{
|
||||||
__set_errno (EOPNOTSUPP);
|
__set_errno (ENOTSUP);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return pwritev (fd, vector, count, offset);
|
return pwritev (fd, vector, count, offset);
|
||||||
|
@ -30,7 +30,7 @@ pwritev64v2 (int fd, const struct iovec *vector, int count, off64_t offset,
|
|||||||
#ifdef __NR_pwritev64v2
|
#ifdef __NR_pwritev64v2
|
||||||
ssize_t result = SYSCALL_CANCEL (pwritev64v2, fd, vector, count,
|
ssize_t result = SYSCALL_CANCEL (pwritev64v2, fd, vector, count,
|
||||||
LO_HI_LONG (offset), flags);
|
LO_HI_LONG (offset), flags);
|
||||||
if (result >= 0 || errno != ENOSYS)
|
if (result >= 0)
|
||||||
return result;
|
return result;
|
||||||
#endif
|
#endif
|
||||||
/* Trying to emulate the pwritev2 syscall flags is troublesome:
|
/* Trying to emulate the pwritev2 syscall flags is troublesome:
|
||||||
@ -44,7 +44,7 @@ pwritev64v2 (int fd, const struct iovec *vector, int count, off64_t offset,
|
|||||||
|
|
||||||
if (flags != 0)
|
if (flags != 0)
|
||||||
{
|
{
|
||||||
__set_errno (EOPNOTSUPP);
|
__set_errno (ENOTSUP);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return pwritev64 (fd, vector, count, offset);
|
return pwritev64 (fd, vector, count, offset);
|
||||||
|
@ -244,10 +244,13 @@ init_cpu_features (struct cpu_features *cpu_features)
|
|||||||
|= bit_arch_Prefer_No_AVX512;
|
|= bit_arch_Prefer_No_AVX512;
|
||||||
|
|
||||||
/* To avoid SSE transition penalty, use _dl_runtime_resolve_slow.
|
/* To avoid SSE transition penalty, use _dl_runtime_resolve_slow.
|
||||||
If XGETBV suports ECX == 1, use _dl_runtime_resolve_opt. */
|
If XGETBV suports ECX == 1, use _dl_runtime_resolve_opt.
|
||||||
|
Use _dl_runtime_resolve_opt only with AVX512F since it is
|
||||||
|
slower than _dl_runtime_resolve_slow with AVX. */
|
||||||
cpu_features->feature[index_arch_Use_dl_runtime_resolve_slow]
|
cpu_features->feature[index_arch_Use_dl_runtime_resolve_slow]
|
||||||
|= bit_arch_Use_dl_runtime_resolve_slow;
|
|= bit_arch_Use_dl_runtime_resolve_slow;
|
||||||
if (cpu_features->max_cpuid >= 0xd)
|
if (CPU_FEATURES_ARCH_P (cpu_features, AVX512F_Usable)
|
||||||
|
&& cpu_features->max_cpuid >= 0xd)
|
||||||
{
|
{
|
||||||
unsigned int eax;
|
unsigned int eax;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user