[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commits] r18675 - in /fsf/trunk/libc: ./ manual/ sysdeps/unix/sysv/linux/ sysdeps/unix/sysv/linux/bits/ sysdeps/unix/sysv/linux/i386/...
- To: commits@xxxxxxxxxx
- Subject: [Commits] r18675 - in /fsf/trunk/libc: ./ manual/ sysdeps/unix/sysv/linux/ sysdeps/unix/sysv/linux/bits/ sysdeps/unix/sysv/linux/i386/...
- From: eglibc@xxxxxxxxxx
- Date: Thu, 24 May 2012 00:01:55 -0000
Author: eglibc
Date: Thu May 24 00:01:54 2012
New Revision: 18675
Log:
Import glibc-mainline for 2012-05-24
Removed:
fsf/trunk/libc/sysdeps/unix/sysv/linux/poll.c
Modified:
fsf/trunk/libc/ChangeLog
fsf/trunk/libc/INSTALL
fsf/trunk/libc/manual/install.texi
fsf/trunk/libc/sysdeps/unix/sysv/linux/bits/in.h
fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/bits/mman.h
fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/sysdep.h
fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/chown.c
fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c
fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c
fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c
fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c
fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/bits/mman.h
fsf/trunk/libc/sysdeps/unix/sysv/linux/sh/bits/mman.h
fsf/trunk/libc/sysdeps/unix/sysv/linux/sparc/bits/mman.h
fsf/trunk/libc/sysdeps/unix/sysv/linux/sys/reboot.h
fsf/trunk/libc/sysdeps/unix/sysv/linux/syscalls.list
fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/bits/mman.h
fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/sysdep.h
fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/x32/sched_getcpu.S
fsf/trunk/libc/time/mktime.c
Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Thu May 24 00:01:54 2012
@@ -1,3 +1,106 @@
+2012-05-23 Paul Eggert <eggert@xxxxxxxxxxx>
+
+ mktime: avoid signed integer overflow
+ * time/mktime.c (__mktime_internal): Do not mishandle the case
+ where diff == INT_MIN.
+
+ mktime: simplify computation of average
+ * time/mktime.c (ranged_convert): Use new time_t_avg function
+ instead of rolling our own (probably-slower) code.
+
+ mktime: do not assume signed right shift propagates sign bit
+ * time/mktime.c (isdst_differ): New static function.
+ (__mktime_internal): No need to normalize tm_isdst now.
+ (__mktime_internal, not_equal_tm): Use isdst_differ to compare
+ tm_isdst values.
+
+ mktime: merge another wrapv change from gnulib
+ * time/mktime.c (TYPE_MAXIMUM): Rework slightly to avoid diagnostics
+ from some compilers.
+
+ mktime: remove incorrect attempt at unusual arithmetics
+ * time/mktime.c (TYPE_ONES_COMPLEMENT, TYPE_SIGNED_MAGNITUDE): Remove.
+ The code didn't really work on such machines anyway.
+ (TYPE_MINIMUM): Assume two's complement.
+ (twos_complement_arithmetic): Verify that long_int and time_t
+ are two's complement (or unsigned, in the latter case).
+
+ mktime: check signed shifts on long_int and time_t, too
+ * time/mktime.c (SHR): Check that shifts work as desired
+ on the types long_int and time_t too, as SHR is used on
+ such types.
+
+ mktime: do not assume 'long' is wide enough
+ * time/mktime.c (verify): Move decl up.
+ (long_int): New type.
+ (leapyear, ydhms_diff, guess_time_tm, __mktime_internal): Use it,
+ to remove assumption in the code that 'long' is wide enough to
+ store year values. This assumption is not true on x32 and on
+ some non-glibc platforms.
+
+ mktime: merge wrapv change from gnulib
+ * time/mktime.c (WRAPV): New macro.
+ (time_t_avg, time_t_add_ok, time_t_int_add_ok): New static functions.
+ (guess_time_tm, __mktime_internal): Do not assume that signed
+ integer overflow wraps around; modern compilers generate code
+ where this assumption is no longer valid.
+
+2012-05-23 H.J. Lu <hongjiu.lu@xxxxxxxxx>
+
+ * sysdeps/unix/sysv/linux/i386/sysdep.h (SYSCALL_ERROR_HANDLER):
+ Replace "jmp L(pseudo_end)" with "ret".
+ * sysdeps/unix/sysv/linux/x86_64/sysdep.h (SYSCALL_ERROR_HANDLER):
+ Likewise.
+
+2012-05-23 Andreas Jaeger <aj@xxxxxxx>
+
+ * sysdeps/unix/sysv/linux/syscalls.list: Add poll.
+ * sysdeps/unix/sysv/linux/poll.c: Remove file.
+
+2012-05-23 Andreas Jaeger <aj@xxxxxxx>
+ Maximilian Attems <max@xxxxxxx>
+
+ * sysdeps/unix/sysv/linux/sys/reboot.h (RB_SW_SUSPEND, RB_KEXEC):
+ New macros.
+
+2012-05-23 H.J. Lu <hongjiu.lu@xxxxxxxxx>
+
+ * sysdeps/unix/sysv/linux/x86_64/x32/sched_getcpu.S: Rearrange
+ code so that pseudo_end is just ret and the stack pointer is
+ correct also for static library in error case.
+
+2012-05-23 Joseph Myers <joseph@xxxxxxxxxxxxxxxx>
+
+ * sysdeps/unix/sysv/linux/powerpc/chown.c: Add comment suggesting
+ move to syscalls.list.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c: Likewise.
+
+ * manual/install.texi (Running make install): Do not mention Linux
+ kernel version for which pt_chown is not needed.
+ (Linux): Do not mention problems with nscd with 2.0 kernels.
+ * INSTALL: Regenerated.
+
+2012-05-23 Andreas Jaeger <aj@xxxxxxx>
+
+ * sysdeps/unix/sysv/linux/powerpc/bits/mman.h
+ (MADV_DONTDUMP,MADV_DODUMP): New macros from Linux 3.4.
+ macro.
+ * sysdeps/unix/sysv/linux/s390/bits/mman.h
+ (MADV_DONTDUMP,MADV_DODUMP): Likewise.
+ * sysdeps/unix/sysv/linux/sh/bits/mman.h
+ (MADV_DONTDUMP,MADV_DODUMP): Likewise.
+ * sysdeps/unix/sysv/linux/i386/bits/mman.h
+ (MADV_DONTDUMP,MADV_DODUMP): Likewise.
+ * sysdeps/unix/sysv/linux/sparc/bits/mman.h
+ (MADV_DONTDUMP,MADV_DODUMP): Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/bits/mman.h
+ (MADV_DONTDUMP,MADV_DODUMP): Likewise.
+ * sysdeps/unix/sysv/linux/bits/in.h
+ (IP_MULTICAST_ALL,IP_UNICAST_IF): Likewise.
+
2012-05-22 Roland McGrath <roland@xxxxxxxxxxxxx>
* sysdeps/unix/sysv/linux/dl-vdso.h (CHECK_HASH): Macro removed.
Modified: fsf/trunk/libc/INSTALL
==============================================================================
--- fsf/trunk/libc/INSTALL (original)
+++ fsf/trunk/libc/INSTALL Thu May 24 00:01:54 2012
@@ -244,9 +244,9 @@
permissions on a pseudoterminal so it can be used by the calling
process. This means programs like `xterm' and `screen' do not have to
be setuid to get a pty. (There may be other reasons why they need
-privileges.) If you are using a 2.1 or newer Linux kernel with the
-`devptsfs' or `devfs' filesystems providing pty slaves, you don't need
-this program; otherwise you do. The source for `pt_chown' is in
+privileges.) If you are using a Linux kernel with the `devptsfs' or
+`devfs' filesystems providing pty slaves, you don't need this program;
+otherwise you do. The source for `pt_chown' is in
`login/programs/pt_chown.c'.
After installation you might want to configure the timezone and
@@ -377,11 +377,6 @@
it to default to `/usr/local', then all the components are installed
there.
- You cannot use `nscd' with 2.0 kernels, due to bugs in the
-kernel-side thread support. `nscd' happens to hit these bugs
-particularly hard, but you might have problems with any threaded
-program.
-
Reporting Bugs
==============
Modified: fsf/trunk/libc/manual/install.texi
==============================================================================
--- fsf/trunk/libc/manual/install.texi (original)
+++ fsf/trunk/libc/manual/install.texi Thu May 24 00:01:54 2012
@@ -275,8 +275,8 @@
sets the permissions on a pseudoterminal so it can be used by the
calling process. This means programs like @code{xterm} and
@code{screen} do not have to be setuid to get a pty. (There may be
-other reasons why they need privileges.) If you are using a 2.1 or
-newer Linux kernel with the @code{devptsfs} or @code{devfs} filesystems
+other reasons why they need privileges.) If you are using a
+Linux kernel with the @code{devptsfs} or @code{devfs} filesystems
providing pty slaves, you don't need this program; otherwise you do.
The source for @file{pt_chown} is in @file{login/programs/pt_chown.c}.
@@ -428,11 +428,6 @@
prefix or allow it to default to @file{/usr/local}, then all the
components are installed there.
-You cannot use @code{nscd} with 2.0 kernels, due to bugs in the
-kernel-side thread support. @code{nscd} happens to hit these bugs
-particularly hard, but you might have problems with any threaded
-program.
-
@node Reporting Bugs
@appendixsec Reporting Bugs
@cindex reporting bugs
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/bits/in.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/bits/in.h (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/bits/in.h Thu May 24 00:01:54 2012
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2000,2004,2008,2010,2011 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2012 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
@@ -50,6 +50,8 @@
# define MCAST_JOIN_SOURCE_GROUP 46 /* group_source_req: join source-spec gr */
# define MCAST_LEAVE_SOURCE_GROUP 47 /* group_source_req: leave source-spec gr*/
# define MCAST_MSFILTER 48
+# define IP_MULTICAST_ALL 49
+# define IP_UNICAST_IF 50
# define MCAST_EXCLUDE 0
# define MCAST_INCLUDE 1
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/bits/mman.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/bits/mman.h (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/bits/mman.h Thu May 24 00:01:54 2012
@@ -1,6 +1,5 @@
/* Definitions for POSIX memory map interface. Linux/i386 version.
- Copyright (C) 1997,2000,2003,2005,2006,2009,2010,2011
- Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 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
@@ -97,6 +96,9 @@
# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages. */
# define MADV_HUGEPAGE 14 /* Worth backing with hugepages. */
# define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages. */
+# define MADV_DONTDUMP 16 /* Explicity exclude from the core dump,
+ overrides the coredump filter bits. */
+# define MADV_DODUMP 17 /* Clear the MADV_DONTDUMP flag. */
# define MADV_HWPOISON 100 /* Poison a page for testing. */
#endif
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/sysdep.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/sysdep.h (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/sysdep.h Thu May 24 00:01:54 2012
@@ -115,7 +115,7 @@
negl %eax; \
movl %eax, rtld_errno@GOTOFF(%ecx); \
orl $-1, %eax; \
- jmp L(pseudo_end);
+ ret;
# elif defined _LIBC_REENTRANT
@@ -131,7 +131,7 @@
negl %eax; \
SYSCALL_ERROR_HANDLER_TLS_STORE (%eax, %ecx); \
orl $-1, %eax; \
- jmp L(pseudo_end);
+ ret;
# ifndef NO_TLS_DIRECT_SEG_REFS
# define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff) \
movl src, %gs:(destoff)
@@ -149,7 +149,7 @@
movl errno@GOT(%ecx), %ecx; \
movl %eax, (%ecx); \
orl $-1, %eax; \
- jmp L(pseudo_end);
+ ret;
# endif /* _LIBC_REENTRANT */
#endif /* PIC */
Removed: fsf/trunk/libc/sysdeps/unix/sysv/linux/poll.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/poll.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/poll.c (removed)
@@ -1,47 +1,0 @@
-/* Poll system call.
- Copyright (C) 1997-2012 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 <errno.h>
-#include <sys/poll.h>
-
-#include <sysdep-cancel.h>
-#include <sys/syscall.h>
-#include <bp-checks.h>
-
-#include <kernel-features.h>
-
-int
-__poll (fds, nfds, timeout)
- struct pollfd *fds;
- nfds_t nfds;
- int timeout;
-{
- if (SINGLE_THREAD_P)
- return INLINE_SYSCALL (poll, 3, CHECK_N (fds, nfds), nfds, timeout);
-
- int oldtype = LIBC_CANCEL_ASYNC ();
-
- int result = INLINE_SYSCALL (poll, 3, CHECK_N (fds, nfds), nfds, timeout);
-
- LIBC_CANCEL_RESET (oldtype);
-
- return result;
-}
-libc_hidden_def (__poll)
-weak_alias (__poll, poll)
-strong_alias (__poll, __libc_poll)
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/bits/mman.h (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/bits/mman.h Thu May 24 00:01:54 2012
@@ -98,6 +98,9 @@
# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages. */
# define MADV_HUGEPAGE 14 /* Worth backing with hugepages. */
# define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages. */
+# define MADV_DONTDUMP 16 /* Explicity exclude from the core dump,
+ overrides the coredump filter bits. */
+# define MADV_DODUMP 17 /* Clear the MADV_DONTDUMP flag. */
# define MADV_HWPOISON 100 /* Poison a page for testing. */
#endif
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/chown.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/chown.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/chown.c Thu May 24 00:01:54 2012
@@ -25,6 +25,8 @@
#include <kernel-features.h>
+/* Consider moving to syscalls.list. */
+
/*
In Linux 2.1.x the chown functions have been changed. A new function lchown
was introduced. The new chown now follows symlinks - the old chown and the
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c Thu May 24 00:01:54 2012
@@ -26,6 +26,8 @@
#include <kernel-features.h>
+
+/* Consider moving to syscalls.list. */
ssize_t
__libc_pread (fd, buf, count, offset)
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c Thu May 24 00:01:54 2012
@@ -25,6 +25,8 @@
#include <kernel-features.h>
+
+/* Consider moving to syscalls.list. */
ssize_t
__libc_pread64 (fd, buf, count, offset)
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c Thu May 24 00:01:54 2012
@@ -26,6 +26,8 @@
#include <kernel-features.h>
+
+/* Consider moving to syscalls.list. */
ssize_t
__libc_pwrite (fd, buf, count, offset)
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c Thu May 24 00:01:54 2012
@@ -25,6 +25,8 @@
#include <kernel-features.h>
+
+/* Consider moving to syscalls.list. */
ssize_t
__libc_pwrite64 (fd, buf, count, offset)
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/bits/mman.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/bits/mman.h (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/s390/bits/mman.h Thu May 24 00:01:54 2012
@@ -97,6 +97,9 @@
# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages. */
# define MADV_HUGEPAGE 14 /* Worth backing with hugepages. */
# define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages. */
+# define MADV_DONTDUMP 16 /* Explicity exclude from the core dump,
+ overrides the coredump filter bits. */
+# define MADV_DODUMP 17 /* Clear the MADV_DONTDUMP flag. */
# define MADV_HWPOISON 100 /* Poison a page for testing. */
#endif
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/sh/bits/mman.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/sh/bits/mman.h (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/sh/bits/mman.h Thu May 24 00:01:54 2012
@@ -96,6 +96,9 @@
# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages. */
# define MADV_HUGEPAGE 14 /* Worth backing with hugepages. */
# define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages. */
+# define MADV_DONTDUMP 16 /* Explicity exclude from the core dump,
+ overrides the coredump filter bits. */
+# define MADV_DODUMP 17 /* Clear the MADV_DONTDUMP flag. */
# define MADV_HWPOISON 100 /* Poison a page for testing. */
#endif
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/sparc/bits/mman.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/sparc/bits/mman.h (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/sparc/bits/mman.h Thu May 24 00:01:54 2012
@@ -99,6 +99,9 @@
# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages. */
# define MADV_HUGEPAGE 14 /* Worth backing with hugepages. */
# define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages. */
+# define MADV_DONTDUMP 16 /* Explicity exclude from the core dump,
+ overrides the coredump filter bits. */
+# define MADV_DODUMP 17 /* Clear the MADV_DONTDUMP flag. */
# define MADV_HWPOISON 100 /* Poison a page for testing. */
#endif
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/sys/reboot.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/sys/reboot.h (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/sys/reboot.h Thu May 24 00:01:54 2012
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2012 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
@@ -38,6 +38,12 @@
/* Stop system and switch power off if possible. */
#define RB_POWER_OFF 0x4321fedc
+/* Suspend system using software suspend. */
+#define RB_SW_SUSPEND 0xd000fce2
+
+/* Reboot system into new kernel. */
+#define RB_KEXEC 0x45584543
+
__BEGIN_DECLS
/* Reboot or halt the system. */
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/syscalls.list
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/syscalls.list (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/syscalls.list Thu May 24 00:01:54 2012
@@ -51,6 +51,7 @@
pipe - pipe i:f __pipe pipe
pipe2 - pipe2 i:fi __pipe2 pipe2
pivot_root EXTRA pivot_root i:ss pivot_root
+poll - poll Ci:pii __libc_poll __poll poll
prctl EXTRA prctl i:iiiii __prctl prctl
putpmsg - putpmsg i:ippii putpmsg
query_module EXTRA query_module i:sipip query_module
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/bits/mman.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/bits/mman.h (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/bits/mman.h Thu May 24 00:01:54 2012
@@ -1,6 +1,5 @@
/* Definitions for POSIX memory map interface. Linux/x86_64 version.
- Copyright (C) 2001,2003,2005,2006,2009,2010,2011
- Free Software Foundation, Inc.
+ Copyright (C) 2001-2012 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
@@ -98,6 +97,9 @@
# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages. */
# define MADV_HUGEPAGE 14 /* Worth backing with hugepages. */
# define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages. */
+# define MADV_DONTDUMP 16 /* Explicity exclude from the core dump,
+ overrides the coredump filter bits. */
+# define MADV_DODUMP 17 /* Clear the MADV_DONTDUMP flag. */
# define MADV_HWPOISON 100 /* Poison a page for testing. */
#endif
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/sysdep.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/sysdep.h (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/sysdep.h Thu May 24 00:01:54 2012
@@ -136,7 +136,7 @@
0: \
SYSCALL_SET_ERRNO; \
or $-1, %RAX_LP; \
- jmp L(pseudo_end);
+ ret;
# endif /* PIC */
/* The Linux/x86-64 kernel expects the system call parameters in
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/x32/sched_getcpu.S
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/x32/sched_getcpu.S (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/x32/sched_getcpu.S Thu May 24 00:01:54 2012
@@ -33,14 +33,18 @@
call __getcpu
+ /* Local variable is result if the call is successful. */
+ mov (%rsp), %edx
+ /* Restore stack pointer before we might jump to
+ SYSCALL_ERROR_LABEL which returns to the caller. */
+ add $0x8, %esp
+ cfi_adjust_cfa_offset(-8)
+
cmp $-4095, %eax
jae SYSCALL_ERROR_LABEL
- mov (%rsp), %eax
-
+ mov %edx, %eax
L(pseudo_end):
- add $0x8, %esp
- cfi_adjust_cfa_offset(-8)
ret
PSEUDO_END(sched_getcpu)
#endif
Modified: fsf/trunk/libc/time/mktime.c
==============================================================================
--- fsf/trunk/libc/time/mktime.c (original)
+++ fsf/trunk/libc/time/mktime.c Thu May 24 00:01:54 2012
@@ -46,6 +46,39 @@
# define mktime my_mktime
#endif /* DEBUG */
+/* Some of the code in this file assumes that signed integer overflow
+ silently wraps around. This assumption can't easily be programmed
+ around, nor can it be checked for portably at compile-time or
+ easily eliminated at run-time.
+
+ Define WRAPV to 1 if the assumption is valid and if
+ #pragma GCC optimize ("wrapv")
+ does not trigger GCC bug 51793
+ <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51793>.
+ Otherwise, define it to 0; this forces the use of slower code that,
+ while not guaranteed by the C Standard, works on all production
+ platforms that we know about. */
+#ifndef WRAPV
+# if (((__GNUC__ == 4 && 4 <= __GNUC_MINOR__) || 4 < __GNUC__) \
+ && defined __GLIBC__)
+# pragma GCC optimize ("wrapv")
+# define WRAPV 1
+# else
+# define WRAPV 0
+# endif
+#endif
+
+/* Verify a requirement at compile-time (unlike assert, which is runtime). */
+#define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
+
+/* A signed type that is at least one bit wider than int. */
+#if INT_MAX <= LONG_MAX / 2
+typedef long int long_int;
+#else
+typedef long long int long_int;
+#endif
+verify (long_int_is_wide_enough, INT_MAX == INT_MAX * (long_int) 2 / 2);
+
/* Shift A right by B bits portably, by dividing A by 2**B and
truncating towards minus infinity. A and B should be free of side
effects, and B should be in the range 0 <= B <= INT_BITS - 2, where
@@ -56,9 +89,11 @@
implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift
right in the usual way when A < 0, so SHR falls back on division if
ordinary A >> B doesn't seem to be the usual signed shift. */
-#define SHR(a, b) \
- (-1 >> 1 == -1 \
- ? (a) >> (b) \
+#define SHR(a, b) \
+ ((-1 >> 1 == -1 \
+ && (long_int) -1 >> 1 == -1 \
+ && ((time_t) -1 >> 1 == -1 || ! TYPE_SIGNED (time_t))) \
+ ? (a) >> (b) \
: (a) / (1 << (b)) - ((a) % (1 << (b)) < 0))
/* The extra casts in the following macros work around compiler bugs,
@@ -69,12 +104,8 @@
#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
/* True if negative values of the signed integer type T use two's
- complement, ones' complement, or signed magnitude representation,
- respectively. Much GNU code assumes two's complement, but some
- people like to be portable to all possible C hosts. */
+ complement, or if T is an unsigned integer type. */
#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
-#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
-#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
/* True if the arithmetic type T is signed. */
#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
@@ -86,13 +117,11 @@
#define TYPE_MINIMUM(t) \
((t) (! TYPE_SIGNED (t) \
? (t) 0 \
- : TYPE_SIGNED_MAGNITUDE (t) \
- ? ~ (t) 0 \
- : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+ : ~ TYPE_MAXIMUM (t)))
#define TYPE_MAXIMUM(t) \
((t) (! TYPE_SIGNED (t) \
? (t) -1 \
- : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
+ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
#ifndef TIME_T_MIN
# define TIME_T_MIN TYPE_MINIMUM (time_t)
@@ -102,14 +131,11 @@
#endif
#define TIME_T_MIDPOINT (SHR (TIME_T_MIN + TIME_T_MAX, 1) + 1)
-/* Verify a requirement at compile-time (unlike assert, which is runtime). */
-#define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
-
verify (time_t_is_integer, TYPE_IS_INTEGER (time_t));
-verify (twos_complement_arithmetic, TYPE_TWOS_COMPLEMENT (int));
-/* The code also assumes that signed integer overflow silently wraps
- around, but this assumption can't be stated without causing a
- diagnostic on some hosts. */
+verify (twos_complement_arithmetic,
+ (TYPE_TWOS_COMPLEMENT (int)
+ && TYPE_TWOS_COMPLEMENT (long_int)
+ && TYPE_TWOS_COMPLEMENT (time_t)));
#define EPOCH_YEAR 1970
#define TM_YEAR_BASE 1900
@@ -117,7 +143,7 @@
/* Return 1 if YEAR + TM_YEAR_BASE is a leap year. */
static inline int
-leapyear (long int year)
+leapyear (long_int year)
{
/* Don't add YEAR to TM_YEAR_BASE, as that might overflow.
Also, work even if YEAR is negative. */
@@ -151,6 +177,14 @@
# include "mktime-internal.h"
#endif
+/* Return 1 if the values A and B differ according to the rules for
+ tm_isdst: A and B differ if one is zero and the other positive. */
+static int
+isdst_differ (int a, int b)
+{
+ return (!a != !b) && (0 <= a) && (0 <= b);
+}
+
/* Return an integer value measuring (YEAR1-YDAY1 HOUR1:MIN1:SEC1) -
(YEAR0-YDAY0 HOUR0:MIN0:SEC0) in seconds, assuming that the clocks
were not adjusted between the time stamps.
@@ -163,12 +197,10 @@
detect overflow. */
static inline time_t
-ydhms_diff (long int year1, long int yday1, int hour1, int min1, int sec1,
+ydhms_diff (long_int year1, long_int yday1, int hour1, int min1, int sec1,
int year0, int yday0, int hour0, int min0, int sec0)
{
verify (C99_integer_division, -1 / 2 == 0);
- verify (long_int_year_and_yday_are_wide_enough,
- INT_MAX <= LONG_MAX / 2 || TIME_T_MAX <= UINT_MAX);
/* Compute intervening leap days correctly even if year is negative.
Take care to avoid integer overflow here. */
@@ -191,6 +223,53 @@
return seconds;
}
+/* Return the average of A and B, even if A + B would overflow. */
+static time_t
+time_t_avg (time_t a, time_t b)
+{
+ return SHR (a, 1) + SHR (b, 1) + (a & b & 1);
+}
+
+/* Return 1 if A + B does not overflow. If time_t is unsigned and if
+ B's top bit is set, assume that the sum represents A - -B, and
+ return 1 if the subtraction does not wrap around. */
+static int
+time_t_add_ok (time_t a, time_t b)
+{
+ if (! TYPE_SIGNED (time_t))
+ {
+ time_t sum = a + b;
+ return (sum < a) == (TIME_T_MIDPOINT <= b);
+ }
+ else if (WRAPV)
+ {
+ time_t sum = a + b;
+ return (sum < a) == (b < 0);
+ }
+ else
+ {
+ time_t avg = time_t_avg (a, b);
+ return TIME_T_MIN / 2 <= avg && avg <= TIME_T_MAX / 2;
+ }
+}
+
+/* Return 1 if A + B does not overflow. */
+static int
+time_t_int_add_ok (time_t a, int b)
+{
+ verify (int_no_wider_than_time_t, INT_MAX <= TIME_T_MAX);
+ if (WRAPV)
+ {
+ time_t sum = a + b;
+ return (sum < a) == (b < 0);
+ }
+ else
+ {
+ int a_odd = a & 1;
+ time_t avg = SHR (a, 1) + (SHR (b, 1) + (a_odd & b));
+ return TIME_T_MIN / 2 <= avg && avg <= TIME_T_MAX / 2;
+ }
+}
/* Return a time_t value corresponding to (YEAR-YDAY HOUR:MIN:SEC),
assuming that *T corresponds to *TP and that no clock adjustments
@@ -199,7 +278,7 @@
If overflow occurs, yield the minimal or maximal value, except do not
yield a value equal to *T. */
static time_t
-guess_time_tm (long int year, long int yday, int hour, int min, int sec,
+guess_time_tm (long_int year, long_int yday, int hour, int min, int sec,
const time_t *t, const struct tm *tp)
{
if (tp)
@@ -207,9 +286,8 @@
time_t d = ydhms_diff (year, yday, hour, min, sec,
tp->tm_year, tp->tm_yday,
tp->tm_hour, tp->tm_min, tp->tm_sec);
- time_t t1 = *t + d;
- if ((t1 < *t) == (TYPE_SIGNED (time_t) ? d < 0 : TIME_T_MAX / 2 < d))
- return t1;
+ if (time_t_add_ok (*t, d))
+ return *t + d;
}
/* Overflow occurred one way or another. Return the nearest result
@@ -241,9 +319,7 @@
they differ by 1. */
while (bad != ok + (bad < 0 ? -1 : 1))
{
- time_t mid = *t = (bad < 0
- ? bad + ((ok - bad) >> 1)
- : ok + ((bad - ok) >> 1));
+ time_t mid = *t = time_t_avg (ok, bad);
r = convert (t, tp);
if (r)
ok = mid;
@@ -292,9 +368,7 @@
int mday = tp->tm_mday;
int mon = tp->tm_mon;
int year_requested = tp->tm_year;
- /* Normalize the value. */
- int isdst = ((tp->tm_isdst >> (8 * sizeof (tp->tm_isdst) - 1))
- | (tp->tm_isdst != 0));
+ int isdst = tp->tm_isdst;
/* 1 if the previous probe was DST. */
int dst2;
@@ -303,8 +377,8 @@
int mon_remainder = mon % 12;
int negative_mon_remainder = mon_remainder < 0;
int mon_years = mon / 12 - negative_mon_remainder;
- long int lyear_requested = year_requested;
- long int year = lyear_requested + mon_years;
+ long_int lyear_requested = year_requested;
+ long_int year = lyear_requested + mon_years;
/* The other values need not be in range:
the remaining code handles minor overflows correctly,
@@ -316,8 +390,8 @@
int mon_yday = ((__mon_yday[leapyear (year)]
[mon_remainder + 12 * negative_mon_remainder])
- 1);
- long int lmday = mday;
- long int yday = mon_yday + lmday;
+ long_int lmday = mday;
+ long_int yday = mon_yday + lmday;
time_t guessed_offset = *offset;
@@ -371,7 +445,7 @@
int approx_biennia = SHR (t0, ALOG2_SECONDS_PER_BIENNIUM);
int diff = approx_biennia - approx_requested_biennia;
- int abs_diff = diff < 0 ? - diff : diff;
+ int approx_abs_diff = diff < 0 ? -1 - diff : diff;
/* IRIX 4.0.5 cc miscalculates TIME_T_MIN / 3: it erroneously
gives a positive value of 715827882. Setting a variable
@@ -382,15 +456,15 @@
time_t overflow_threshold =
(time_t_max / 3 - time_t_min / 3) >> ALOG2_SECONDS_PER_BIENNIUM;
- if (overflow_threshold < abs_diff)
+ if (overflow_threshold < approx_abs_diff)
{
/* Overflow occurred. Try repairing it; this might work if
the time zone offset is enough to undo the overflow. */
time_t repaired_t0 = -1 - t0;
approx_biennia = SHR (repaired_t0, ALOG2_SECONDS_PER_BIENNIUM);
diff = approx_biennia - approx_requested_biennia;
- abs_diff = diff < 0 ? - diff : diff;
- if (overflow_threshold < abs_diff)
+ approx_abs_diff = diff < 0 ? -1 - diff : diff;
+ if (overflow_threshold < approx_abs_diff)
return -1;
guessed_offset += repaired_t0 - t0;
t0 = repaired_t0;
@@ -424,7 +498,7 @@
/* We have a match. Check whether tm.tm_isdst has the requested
value, if any. */
- if (isdst != tm.tm_isdst && 0 <= isdst && 0 <= tm.tm_isdst)
+ if (isdst_differ (isdst, tm.tm_isdst))
{
/* tm.tm_isdst has the wrong value. Look for a neighboring
time with the right value, and use its UTC offset.
@@ -457,22 +531,20 @@
for (delta = stride; delta < delta_bound; delta += stride)
for (direction = -1; direction <= 1; direction += 2)
- {
- time_t ot = t + delta * direction;
- if ((ot < t) == (direction < 0))
- {
- struct tm otm;
- ranged_convert (convert, &ot, &otm);
- if (otm.tm_isdst == isdst)
- {
- /* We found the desired tm_isdst.
- Extrapolate back to the desired time. */
- t = guess_time_tm (year, yday, hour, min, sec, &ot, &otm);
- ranged_convert (convert, &t, &tm);
- goto offset_found;
- }
- }
- }
+ if (time_t_int_add_ok (t, delta * direction))
+ {
+ time_t ot = t + delta * direction;
+ struct tm otm;
+ ranged_convert (convert, &ot, &otm);
+ if (! isdst_differ (isdst, otm.tm_isdst))
+ {
+ /* We found the desired tm_isdst.
+ Extrapolate back to the desired time. */
+ t = guess_time_tm (year, yday, hour, min, sec, &ot, &otm);
+ ranged_convert (convert, &t, &tm);
+ goto offset_found;
+ }
+ }
}
offset_found:
@@ -483,11 +555,13 @@
/* Adjust time to reflect the tm_sec requested, not the normalized value.
Also, repair any damage from a false match due to a leap second. */
int sec_adjustment = (sec == 0 && tm.tm_sec == 60) - sec;
+ if (! time_t_int_add_ok (t, sec_requested))
+ return -1;
t1 = t + sec_requested;
+ if (! time_t_int_add_ok (t1, sec_adjustment))
+ return -1;
t2 = t1 + sec_adjustment;
- if (((t1 < t) != (sec_requested < 0))
- | ((t2 < t1) != (sec_adjustment < 0))
- | ! convert (&t2, &tm))
+ if (! convert (&t2, &tm))
return -1;
t = t2;
}
@@ -538,7 +612,7 @@
| (a->tm_mon ^ b->tm_mon)
| (a->tm_year ^ b->tm_year)
| (a->tm_yday ^ b->tm_yday)
- | (a->tm_isdst ^ b->tm_isdst));
+ | isdst_differ (a->tm_isdst, b->tm_isdst));
}
static void
_______________________________________________
Commits mailing list
Commits@xxxxxxxxxx
http://eglibc.org/cgi-bin/mailman/listinfo/commits