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-g3d27f14
- From: hjl at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 15 Jan 2016 17:00:46 -0000
- Subject: GNU C Library master sources branch hjl/pr19463 created. glibc-2.22-674-g3d27f14
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 3d27f14d247b988f3a226dce0112f7e0a69f5c30 (commit)
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=3d27f14d247b988f3a226dce0112f7e0a69f5c30
commit 3d27f14d247b988f3a226dce0112f7e0a69f5c30
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=f57d833a807aa443a89e54c518a64df1cdecbe77
commit f57d833a807aa443a89e54c518a64df1cdecbe77
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=ff10fdd4ef0df890c7fc55d2b3ee485adf3424fa
commit ff10fdd4ef0df890c7fc55d2b3ee485adf3424fa
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=82a543ffd097f4f5e60e898086f0bda2a647e37f
commit 82a543ffd097f4f5e60e898086f0bda2a647e37f
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=0d32fcb814a7ea7e857a967e96e5c76205bd729b
commit 0d32fcb814a7ea7e857a967e96e5c76205bd729b
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Fri Jan 15 08:11:23 2016 -0800
Add _STRING_INLINE_unaligned and string_private.h
As discussed in
https://sourceware.org/ml/libc-alpha/2015-10/msg00403.html
the setting of _STRING_ARCH_unaligned currently controls the external
GLIBC ABI as well as selecting the use of unaligned accesses withing
GLIBC.
Since _STRING_ARCH_unaligned was recently changed for AArch64, this
would potentially break the ABI in GLIBC 2.23, so split the uses and add
_STRING_INLINE_unaligned to select the string ABI. This setting must be
fixed for each target, while _STRING_ARCH_unaligned may be changed from
release to release. _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.
_STRING_ARCH_unaligned should defined in the new string_private.h heade
file which is included unconditionally from internal <string.h> for glibc
build.
2016-01-15 H.J. Lu <hongjiu.lu@intel.com>
Wilco Dijkstra <wdijkstr@arm.com>
[BZ #19462]
* bits/string.h (_STRING_ARCH_unaligned): Renamed to ...
(_STRING_INLINE_unaligned): This.
* include/string.h: Include <string_private.h>.
* string/bits/string2.h: Replace _STRING_ARCH_unaligned with
_STRING_INLINE_unaligned.
* sysdeps/aarch64/bits/string.h (_STRING_ARCH_unaligned): Removed.
(_STRING_INLINE_unaligned): New.
* sysdeps/aarch64/string_private.h: New file.
* sysdeps/generic/string_private.h: Likewise.
* sysdeps/m68k/m680x0/m68020/string_private.h: Likewise.
* sysdeps/s390/string_private.h: Likewise.
* sysdeps/x86/string_private.h: Likewise.
* sysdeps/m68k/m680x0/m68020/bits/string.h
(_STRING_ARCH_unaligned): Renamed to ...
(_STRING_INLINE_unaligned): This.
* sysdeps/s390/bits/string.h (_STRING_ARCH_unaligned): Renamed
to ...
(_STRING_INLINE_unaligned): This.
* sysdeps/sparc/bits/string.h (_STRING_ARCH_unaligned): Renamed
to ...
(_STRING_INLINE_unaligned): This.
* sysdeps/x86/bits/string.h (_STRING_ARCH_unaligned): Renamed
to ...
(_STRING_INLINE_unaligned): This.
diff --git a/bits/string.h b/bits/string.h
index b88a6bc..89c627c 100644
--- a/bits/string.h
+++ b/bits/string.h
@@ -8,7 +8,11 @@
#ifndef _BITS_STRING_H
#define _BITS_STRING_H 1
-/* Define if architecture can access unaligned multi-byte variables. */
-#define _STRING_ARCH_unaligned 0
+/* Define whether to use the unaligned string inline ABI.
+ The string inline functions are an external ABI, thus cannot be changed
+ after the first release of a new target (unlike _STRING_ARCH_unaligned
+ which may be changed from release to release). Targets must support
+ unaligned accesses in hardware if either define is set to true. */
+#define _STRING_INLINE_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/string/bits/string2.h b/string/bits/string2.h
index b93be06..8200ef1 100644
--- a/string/bits/string2.h
+++ b/string/bits/string2.h
@@ -46,7 +46,7 @@
# endif
#endif
-#if _STRING_ARCH_unaligned
+#if _STRING_INLINE_unaligned
/* If we can do unaligned memory accesses we must know the endianess. */
# include <endian.h>
# include <bits/types.h>
@@ -95,7 +95,7 @@ __STRING2_COPY_TYPE (8);
/* Set N bytes of S to C. */
#if !defined _HAVE_STRING_ARCH_memset
# if !__GNUC_PREREQ (3, 0)
-# if _STRING_ARCH_unaligned
+# if _STRING_INLINE_unaligned
# define memset(s, c, n) \
(__extension__ (__builtin_constant_p (n) && (n) <= 16 \
? ((n) == 1 \
@@ -223,7 +223,7 @@ __STRING2_COPY_TYPE (8);
# endif
# if !__GNUC_PREREQ (3, 0) || defined _FORCE_INLINES
-# if _STRING_ARCH_unaligned
+# if _STRING_INLINE_unaligned
# ifndef _FORCE_INLINES
# define __mempcpy_args(src) \
((const char *) (src))[0], ((const char *) (src))[2], \
@@ -419,7 +419,7 @@ extern void *__rawmemchr (const void *__s, int __c);
: strcpy (dest, src)))
# endif
-# if _STRING_ARCH_unaligned
+# if _STRING_INLINE_unaligned
# ifndef _FORCE_INLINES
# define __strcpy_args(src) \
__extension__ __STRING2_SMALL_GET16 (src, 0), \
@@ -598,7 +598,7 @@ __strcpy_small (char *__dest,
# endif
# if !__GNUC_PREREQ (3, 0) || defined _FORCE_INLINES
-# if _STRING_ARCH_unaligned
+# if _STRING_INLINE_unaligned
# ifndef _FORCE_INLINES
# define __stpcpy_args(src) \
__extension__ __STRING2_SMALL_GET16 (src, 0), \
diff --git a/sysdeps/aarch64/bits/string.h b/sysdeps/aarch64/bits/string.h
index 3c2a50b..0a508f7 100644
--- a/sysdeps/aarch64/bits/string.h
+++ b/sysdeps/aarch64/bits/string.h
@@ -20,5 +20,5 @@
# error "Never use <bits/string.h> directly; include <string.h> instead."
#endif
-/* AArch64 implementations support efficient unaligned access. */
-#define _STRING_ARCH_unaligned 1
+/* AArch64 uses the aligned string inline ABI. */
+#define _STRING_INLINE_unaligned 0
diff --git a/sysdeps/aarch64/bits/string.h b/sysdeps/aarch64/string_private.h
similarity index 79%
copy from sysdeps/aarch64/bits/string.h
copy to sysdeps/aarch64/string_private.h
index 3c2a50b..8b194a4 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
diff --git a/sysdeps/aarch64/bits/string.h b/sysdeps/generic/string_private.h
similarity index 69%
copy from sysdeps/aarch64/bits/string.h
copy to sysdeps/generic/string_private.h
index 3c2a50b..c880aae 100644
--- a/sysdeps/aarch64/bits/string.h
+++ b/sysdeps/generic/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. 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
@@ -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
+/* Define to 1 if architecture can access unaligned multi-byte
+ variables. */
+#define _STRING_ARCH_unaligned 0
diff --git a/sysdeps/m68k/m680x0/m68020/bits/string.h b/sysdeps/m68k/m680x0/m68020/bits/string.h
index 88505bb..78c9594 100644
--- a/sysdeps/m68k/m680x0/m68020/bits/string.h
+++ b/sysdeps/m68k/m680x0/m68020/bits/string.h
@@ -20,6 +20,5 @@
# 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
+/* Use the unaligned string inline ABI. */
+#define _STRING_INLINE_unaligned 1
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..39e0b7f 100644
--- a/sysdeps/s390/bits/string.h
+++ b/sysdeps/s390/bits/string.h
@@ -21,8 +21,8 @@
# 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
+/* Use the unaligned string inline ABI. */
+#define _STRING_INLINE_unaligned 1
/* We only provide optimizations if the user selects them and if
GNU CC is used. */
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..10beca6 100644
--- a/sysdeps/sparc/bits/string.h
+++ b/sysdeps/sparc/bits/string.h
@@ -20,8 +20,8 @@
# 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
+/* sparc uses the aligned string inline ABI. */
+#define _STRING_INLINE_unaligned 0
/* sparc32 and sparc64 strchr(x, '\0') perform better than
__rawmemchr(x, '\0'). */
diff --git a/sysdeps/x86/bits/string.h b/sysdeps/x86/bits/string.h
index 1a0682b..e4e019f 100644
--- a/sysdeps/x86/bits/string.h
+++ b/sysdeps/x86/bits/string.h
@@ -20,8 +20,8 @@
# 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
+/* Use the unaligned string inline ABI. */
+#define _STRING_INLINE_unaligned 1
/* Enable inline functions only for i486 or better when compiling for
ia32. */
diff --git a/sysdeps/aarch64/bits/string.h b/sysdeps/x86/string_private.h
similarity index 69%
copy from sysdeps/aarch64/bits/string.h
copy 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