This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch hjl/pr19463 created. glibc-2.22-674-g6ed50f4
- From: hjl at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 14 Jan 2016 20:53:20 -0000
- Subject: GNU C Library master sources branch hjl/pr19463 created. glibc-2.22-674-g6ed50f4
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 "GNU C Library master sources".
The branch, hjl/pr19463 has been created
at 6ed50f4e0e954bf16e62c500d274a9823c3c0db6 (commit)
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=6ed50f4e0e954bf16e62c500d274a9823c3c0db6
commit 6ed50f4e0e954bf16e62c500d274a9823c3c0db6
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Jan 14 12:49:13 2016 -0800
Load FP environment before FP operation
Since floating-point operation may trigger floating-point exceptions,
we need to load the current floating-point environment before any
floating-point operations.
[BZ #19465]
* sysdeps/ieee754/dbl-64/s_fma.c (__fma): Load the current
floating-point environment before any floating-point operation
which may trigger floating-point exceptions.
diff --git a/sysdeps/ieee754/dbl-64/s_fma.c b/sysdeps/ieee754/dbl-64/s_fma.c
index bc3677d..1cf70a1 100644
--- a/sysdeps/ieee754/dbl-64/s_fma.c
+++ b/sysdeps/ieee754/dbl-64/s_fma.c
@@ -173,13 +173,15 @@ __fma (double x, double y, double z)
z = w.d;
}
+ /* Load the current floating-point environment before any floating-point
+ operation which may trigger floating-point exceptions. */
+ fenv_t env;
+ libc_feholdexcept_setround (&env, FE_TONEAREST);
+
/* Ensure correct sign of exact 0 + 0. */
if (__glibc_unlikely ((x == 0 || y == 0) && z == 0))
return x * y + z;
- fenv_t env;
- libc_feholdexcept_setround (&env, FE_TONEAREST);
-
/* Multiplication m1 + m2 = x * y using Dekker's algorithm. */
#define C ((1 << (DBL_MANT_DIG + 1) / 2) + 1)
double x1 = x * C;
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=54bf044cd7ff1944c5a59d2daa97abfa2fb31061
commit 54bf044cd7ff1944c5a59d2daa97abfa2fb31061
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Wed Jan 13 15:03:46 2016 -0800
Avoid strdup/strndup/strsep
diff --git a/include/string.h b/include/string.h
index e145bfd..151e420 100644
--- a/include/string.h
+++ b/include/string.h
@@ -71,6 +71,12 @@ extern __typeof (strncasecmp_l) __strncasecmp_l;
__new[__len] = '\0'; \
(char *) memcpy (__new, __old, __len); \
}))
+
+# ifdef __OPTIMIZE_SIZE__
+# define strdup(s) __strdup ((s))
+# define strndup(s, n) __strndup ((s), (n))
+# define strsep(s, d) __strsep ((s), (d))
+# endif
#endif
libc_hidden_proto (__mempcpy)
@@ -99,6 +105,7 @@ libc_hidden_proto (memmem)
extern __typeof (memmem) __memmem;
libc_hidden_proto (__memmem)
libc_hidden_proto (__ffs)
+libc_hidden_proto (__strsep)
libc_hidden_builtin_proto (memchr)
libc_hidden_builtin_proto (memcpy)
diff --git a/string/strsep.c b/string/strsep.c
index 1054774..1d98885 100644
--- a/string/strsep.c
+++ b/string/strsep.c
@@ -66,4 +66,5 @@ __strsep (char **stringp, const char *delim)
}
weak_alias (__strsep, strsep)
strong_alias (__strsep, __strsep_g)
+libc_hidden_def (__strsep)
libc_hidden_def (__strsep_g)
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=0227d76ce0799fea0eb5cc9862ad73ddfc13810e
commit 0227d76ce0799fea0eb5cc9862ad73ddfc13810e
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Wed Jan 13 14:10:34 2016 -0800
Allow inline in sys/sysmacros.h when building glibc
diff --git a/sysdeps/unix/sysv/linux/sys/sysmacros.h b/sysdeps/unix/sysv/linux/sys/sysmacros.h
index 4c4a697..f9e2696 100644
--- a/sysdeps/unix/sysv/linux/sys/sysmacros.h
+++ b/sysdeps/unix/sysv/linux/sys/sysmacros.h
@@ -34,7 +34,7 @@ extern unsigned long long int gnu_dev_makedev (unsigned int __major,
unsigned int __minor)
__THROW __attribute_const__;
-#ifdef __USE_EXTERN_INLINES
+#if defined __USE_EXTERN_INLINES || defined _LIBC
__extension__ __extern_inline __attribute_const__ unsigned int
__NTH (gnu_dev_major (unsigned long long int __dev))
{
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=0a9b3b93f0a0868c518af7ebcc5b9a8126c7e0e5
commit 0a9b3b93f0a0868c518af7ebcc5b9a8126c7e0e5
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Wed Jan 13 13:31:34 2016 -0800
Include <bits/stdio.h> when building glibc
diff --git a/libio/bits/stdio.h b/libio/bits/stdio.h
index df57e7c..0c60296 100644
--- a/libio/bits/stdio.h
+++ b/libio/bits/stdio.h
@@ -27,7 +27,7 @@
#endif
-#ifdef __USE_EXTERN_INLINES
+#if defined __USE_EXTERN_INLINES || defined _LIBC
/* For -D_FORTIFY_SOURCE{,=2} bits/stdio2.h will define a different
inline. */
# if !(__USE_FORTIFY_LEVEL > 0 && defined __fortify_function)
@@ -138,7 +138,8 @@ __NTH (ferror_unlocked (FILE *__stream))
#endif /* Use extern inlines. */
-#if defined __USE_MISC && defined __GNUC__ && defined __OPTIMIZE__ \
+#if defined __USE_MISC && defined __GNUC__ \
+ && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \
&& !defined __cplusplus
/* Perform some simple optimizations. */
# define fread_unlocked(ptr, size, n, stream) \
diff --git a/libio/stdio.h b/libio/stdio.h
index d8d7fa0..44738a4 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -929,7 +929,7 @@ extern void funlockfile (FILE *__stream) __THROW;
/* If we are compiling with optimizing read this file. It contains
several optimizing inline functions and macros. */
-#ifdef __USE_EXTERN_INLINES
+#if defined __USE_EXTERN_INLINES || defined _LIBC
# include <bits/stdio.h>
#endif
#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=c0d2afe47ec858e0363c15bb92078ead8edecd7d
commit c0d2afe47ec858e0363c15bb92078ead8edecd7d
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Jan 14 10:16:35 2016 -0800
Compile x86 syscalls with -fomit-frame-pointer
diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile
index 71ba61e..7014829 100644
--- a/sysdeps/unix/sysv/linux/i386/Makefile
+++ b/sysdeps/unix/sysv/linux/i386/Makefile
@@ -10,6 +10,10 @@ CFLAGS-mmap.o += -fomit-frame-pointer
CFLAGS-mmap.os += -fomit-frame-pointer
CFLAGS-mmap64.o += -fomit-frame-pointer
CFLAGS-mmap64.os += -fomit-frame-pointer
+CFLAGS-pselect.o += -fomit-frame-pointer
+CFLAGS-pselect.os += -fomit-frame-pointer
+CFLAGS-rtld-mmap.o += -fomit-frame-pointer
+CFLAGS-rtld-mmap.os += -fomit-frame-pointer
endif
ifeq ($(subdir),sysvipc)
@@ -26,11 +30,31 @@ endif
# fallocate, posix_fallocate use six-argument inline syscalls.
ifeq ($(subdir),io)
sysdep_routines += libc-do-syscall
+# %ebp may be used to pass the 6th argument to syscall.
+CFLAGS-fallocate.o += -fomit-frame-pointer
+CFLAGS-fallocate.os += -fomit-frame-pointer
+CFLAGS-fallocate64.o += -fomit-frame-pointer
+CFLAGS-fallocate64.os += -fomit-frame-pointer
+CFLAGS-posix_fallocate.o += -fomit-frame-pointer
+CFLAGS-posix_fallocate.os += -fomit-frame-pointer
+CFLAGS-posix_fallocate64.o += -fomit-frame-pointer
+CFLAGS-posix_fallocate64.os += -fomit-frame-pointer
+CFLAGS-sync_file_range.o += -fomit-frame-pointer
+CFLAGS-sync_file_range.os += -fomit-frame-pointer
endif
# libpthread uses six-argument inline syscalls.
ifeq ($(subdir),nptl)
libpthread-sysdep_routines += libc-do-syscall
+# %ebp may be used to pass the 6th argument to syscall.
+CFLAGS-pthread_rwlock_timedrdlock.o += -fomit-frame-pointer
+CFLAGS-pthread_rwlock_timedrdlock.os += -fomit-frame-pointer
+CFLAGS-pthread_rwlock_timedwrlock.o += -fomit-frame-pointer
+CFLAGS-pthread_rwlock_timedwrlock.os += -fomit-frame-pointer
+CFLAGS-sem_timedwait.o += -fomit-frame-pointer
+CFLAGS-sem_timedwait.os += -fomit-frame-pointer
+CFLAGS-sem_wait.o += -fomit-frame-pointer
+CFLAGS-sem_wait.os += -fomit-frame-pointer
endif
ifeq ($(subdir),resource)
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=91c5dfa432a6be078105f8aacf8acd0eb26de8f4
commit 91c5dfa432a6be078105f8aacf8acd0eb26de8f4
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Jan 14 04:15:03 2016 -0800
Use TIME_T_MAX and TIME_T_MIN in tst-mktime2.c
GCC 5.3 compiles
for (time_t_max = 1; 0 < time_t_max; time_t_max *= 2)
continue;
into an infinite loop with -Os. We can copy TIME_T_MAX and TIME_T_MIN
from time/mktime.c.
[BZ #19466]
* time/tst-mktime2.c (TYPE_SIGNED): New.
(TYPE_MINIMUM): Likewise.
(TYPE_MAXIMUM): Likewise.
(TIME_T_MIN): Likewise.
(TIME_T_MAX): Likewise.
(do_test): Initialize time_t_max and time_t_min with TIME_T_MAX
and TIME_T_MIN.
diff --git a/time/tst-mktime2.c b/time/tst-mktime2.c
index bc7cc58..fd40ab7 100644
--- a/time/tst-mktime2.c
+++ b/time/tst-mktime2.c
@@ -5,6 +5,29 @@
#include <stdlib.h>
#include <unistd.h>
+/* True if the arithmetic type T is signed. */
+#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+
+/* The maximum and minimum values for the integer type T. These
+ macros have undefined behavior if T is signed and has padding bits.
+ If this is a problem for you, please let us know how to fix it for
+ your host. */
+#define TYPE_MINIMUM(t) \
+ ((t) (! TYPE_SIGNED (t) \
+ ? (t) 0 \
+ : ~ TYPE_MAXIMUM (t)))
+#define TYPE_MAXIMUM(t) \
+ ((t) (! TYPE_SIGNED (t) \
+ ? (t) -1 \
+ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+
+#ifndef TIME_T_MIN
+# define TIME_T_MIN TYPE_MINIMUM (time_t)
+#endif
+#ifndef TIME_T_MAX
+# define TIME_T_MAX TYPE_MAXIMUM (time_t)
+#endif
+
static time_t time_t_max;
static time_t time_t_min;
@@ -113,12 +136,8 @@ do_test (void)
isn't worth using anyway. */
alarm (60);
- for (time_t_max = 1; 0 < time_t_max; time_t_max *= 2)
- continue;
- time_t_max--;
- if ((time_t) -1 < 0)
- for (time_t_min = -1; (time_t) (time_t_min * 2) < 0; time_t_min *= 2)
- continue;
+ time_t_max = TIME_T_MAX;
+ time_t_min = TIME_T_MIN;
delta = time_t_max / 997; /* a suitable prime number */
for (i = 0; i < N_STRINGS; i++)
{
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=d00caa24e1fcda5e317e7dd825a4fa023aa27583
commit d00caa24e1fcda5e317e7dd825a4fa023aa27583
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Wed Jan 13 17:26:00 2016 -0800
Add string_private.h to define _STRING_ARCH_unaligned
_STRING_ARCH_unaligned is used unconditionally in glibc. But
<bits/string.h>, which defines _STRING_ARCH_unaligned, isn't
included with -Os. Since _STRING_ARCH_unaligned is internal to
glibc and may change between glibc releases, it should be made
private to glibc. This patch adds string_private.h to define
_STRING_ARCH_unaligned, which is included unconditionally from
internal <string.h> for glibc build.
[BZ #19462]
* bits/string.h (_STRING_ARCH_unaligned): Removed.
* include/string.h: Include <string_private.h>.
* sysdeps/aarch64/bits/string.h: Renamed to ...
* sysdeps/aarch64/string_private.h: This.
* sysdeps/generic/string_private.h: New file.
* sysdeps/s390/string_private.h: Likewise.
* sysdeps/x86/string_private.h: Likewise.
* sysdeps/m68k/m680x0/m68020/bits/string.h: Renamed to ...
* sysdeps/m68k/m680x0/m68020/string_private.h: This.
* sysdeps/s390/bits/string.h (_STRING_ARCH_unaligned): Removed.
* sysdeps/sparc/bits/string.h (_STRING_ARCH_unaligned): Likewise.
* sysdeps/x86/bits/string.h (_STRING_ARCH_unaligned): Likewise.
diff --git a/bits/string.h b/bits/string.h
index b88a6bc..faa6870 100644
--- a/bits/string.h
+++ b/bits/string.h
@@ -8,7 +8,4 @@
#ifndef _BITS_STRING_H
#define _BITS_STRING_H 1
-/* Define if architecture can access unaligned multi-byte variables. */
-#define _STRING_ARCH_unaligned 0
-
#endif /* bits/string.h */
diff --git a/include/string.h b/include/string.h
index a684fd9..e145bfd 100644
--- a/include/string.h
+++ b/include/string.h
@@ -46,6 +46,9 @@ extern int __ffs (int __i) __attribute__ ((const));
extern char *__strerror_r (int __errnum, char *__buf, size_t __buflen);
#endif
+/* Get _STRING_ARCH_unaligned. */
+#include <string_private.h>
+
/* Now the real definitions. We do this here since some of the functions
above are defined as macros in the headers. */
#include <string/string.h>
diff --git a/sysdeps/aarch64/bits/string.h b/sysdeps/aarch64/string_private.h
similarity index 76%
copy from sysdeps/aarch64/bits/string.h
copy to sysdeps/aarch64/string_private.h
index 3c2a50b..7e2af74 100644
--- a/sysdeps/aarch64/bits/string.h
+++ b/sysdeps/aarch64/string_private.h
@@ -1,5 +1,5 @@
-/* Optimized, inlined string functions. AArch64 version.
- Copyright (C) 2015-2016 Free Software Foundation, Inc.
+/* Define _STRING_ARCH_unaligned. AArch64 version.
+ Copyright (C) 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,9 +16,5 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#ifndef _STRING_H
-# error "Never use <bits/string.h> directly; include <string.h> instead."
-#endif
-
/* AArch64 implementations support efficient unaligned access. */
-#define _STRING_ARCH_unaligned 1
+#define _STRING_ARCH_unaligned 1
diff --git a/sysdeps/m68k/m680x0/m68020/bits/string.h b/sysdeps/generic/string_private.h
similarity index 60%
rename from sysdeps/m68k/m680x0/m68020/bits/string.h
rename to sysdeps/generic/string_private.h
index 88505bb..c880aae 100644
--- a/sysdeps/m68k/m680x0/m68020/bits/string.h
+++ b/sysdeps/generic/string_private.h
@@ -1,5 +1,5 @@
-/* Optimized, inlined string functions. m680x0 version, x >= 2.
- Copyright (C) 1997-2016 Free Software Foundation, Inc.
+/* Define _STRING_ARCH_unaligned. Generic version.
+ Copyright (C) 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
@@ -13,13 +13,9 @@
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
+ License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#ifndef _STRING_H
-# error "Never use <bits/string.h> directly; include <string.h> instead."
-#endif
-
-/* Currently the only purpose of this file is to tell the generic inline
- macros that unaligned memory access is possible. */
-#define _STRING_ARCH_unaligned 1
+/* Define to 1 if architecture can access unaligned multi-byte
+ variables. */
+#define _STRING_ARCH_unaligned 0
diff --git a/sysdeps/aarch64/bits/string.h b/sysdeps/m68k/m680x0/m68020/string_private.h
similarity index 69%
copy from sysdeps/aarch64/bits/string.h
copy to sysdeps/m68k/m680x0/m68020/string_private.h
index 3c2a50b..6846663 100644
--- a/sysdeps/aarch64/bits/string.h
+++ b/sysdeps/m68k/m680x0/m68020/string_private.h
@@ -1,5 +1,5 @@
-/* Optimized, inlined string functions. AArch64 version.
- Copyright (C) 2015-2016 Free Software Foundation, Inc.
+/* Define _STRING_ARCH_unaligned. m680x0 version, x >= 2.
+ Copyright (C) 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,9 +16,6 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#ifndef _STRING_H
-# error "Never use <bits/string.h> directly; include <string.h> instead."
-#endif
-
-/* AArch64 implementations support efficient unaligned access. */
-#define _STRING_ARCH_unaligned 1
+/* Tell the generic inline macros that unaligned memory access is
+ possible. */
+#define _STRING_ARCH_unaligned 1
diff --git a/sysdeps/s390/bits/string.h b/sysdeps/s390/bits/string.h
index 09201d9..8e4d605 100644
--- a/sysdeps/s390/bits/string.h
+++ b/sysdeps/s390/bits/string.h
@@ -21,9 +21,6 @@
# error "Never use <bits/string.h> directly; include <string.h> instead."
#endif
-/* The s390 processors can access unaligned multi-byte variables. */
-#define _STRING_ARCH_unaligned 1
-
/* We only provide optimizations if the user selects them and if
GNU CC is used. */
#if !defined __NO_STRING_INLINES && defined __USE_STRING_INLINES \
diff --git a/sysdeps/aarch64/bits/string.h b/sysdeps/s390/string_private.h
similarity index 69%
copy from sysdeps/aarch64/bits/string.h
copy to sysdeps/s390/string_private.h
index 3c2a50b..9e11eee 100644
--- a/sysdeps/aarch64/bits/string.h
+++ b/sysdeps/s390/string_private.h
@@ -1,5 +1,5 @@
-/* Optimized, inlined string functions. AArch64 version.
- Copyright (C) 2015-2016 Free Software Foundation, Inc.
+/* Define _STRING_ARCH_unaligned. S/390 version.
+ Copyright (C) 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,9 +16,5 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#ifndef _STRING_H
-# error "Never use <bits/string.h> directly; include <string.h> instead."
-#endif
-
-/* AArch64 implementations support efficient unaligned access. */
-#define _STRING_ARCH_unaligned 1
+/* The s390 processors can access unaligned multi-byte variables. */
+#define _STRING_ARCH_unaligned 1
diff --git a/sysdeps/sparc/bits/string.h b/sysdeps/sparc/bits/string.h
index 3054f62..336b58e 100644
--- a/sysdeps/sparc/bits/string.h
+++ b/sysdeps/sparc/bits/string.h
@@ -20,9 +20,6 @@
# error "Never use <bits/string.h> directly; include <string.h> instead."
#endif
-/* Define if architecture can access unaligned multi-byte variables. */
-#define _STRING_ARCH_unaligned 0
-
/* sparc32 and sparc64 strchr(x, '\0') perform better than
__rawmemchr(x, '\0'). */
#define _HAVE_STRING_ARCH_strchr 1
diff --git a/sysdeps/x86/bits/string.h b/sysdeps/x86/bits/string.h
index 1a0682b..b952d38 100644
--- a/sysdeps/x86/bits/string.h
+++ b/sysdeps/x86/bits/string.h
@@ -20,9 +20,6 @@
# error "Never use <bits/string.h> directly; include <string.h> instead."
#endif
-/* The ix86 processors can access unaligned multi-byte variables. */
-#define _STRING_ARCH_unaligned 1
-
/* Enable inline functions only for i486 or better when compiling for
ia32. */
#if !defined __x86_64__ && (defined __i486__ || defined __pentium__ \
diff --git a/sysdeps/aarch64/bits/string.h b/sysdeps/x86/string_private.h
similarity index 69%
rename from sysdeps/aarch64/bits/string.h
rename to sysdeps/x86/string_private.h
index 3c2a50b..e7281eb 100644
--- a/sysdeps/aarch64/bits/string.h
+++ b/sysdeps/x86/string_private.h
@@ -1,5 +1,5 @@
-/* Optimized, inlined string functions. AArch64 version.
- Copyright (C) 2015-2016 Free Software Foundation, Inc.
+/* Define _STRING_ARCH_unaligned. i486/x86-64 version.
+ Copyright (C) 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,9 +16,5 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#ifndef _STRING_H
-# error "Never use <bits/string.h> directly; include <string.h> instead."
-#endif
-
-/* AArch64 implementations support efficient unaligned access. */
-#define _STRING_ARCH_unaligned 1
+/* The ix86 processors can access unaligned multi-byte variables. */
+#define _STRING_ARCH_unaligned 1
-----------------------------------------------------------------------
hooks/post-receive
--
GNU C Library master sources