Updated to fedora-glibc-20090204T2135

This commit is contained in:
Jakub Jelinek 2009-02-04 22:36:03 +00:00
parent 23a4b43d6a
commit 73c5dd45bc
76 changed files with 1313 additions and 276 deletions

186
ChangeLog
View File

@ -1,3 +1,175 @@
2009-02-04 Ulrich Drepper <drepper@redhat.com>
* libio/wfileops.c (_IO_wfile_underflow): Fix handling of
incomplete characters at end of input buffer.
* libio/Makefile (tests): Add tst-fgetwc.
* libio/tst-fgetwc.c: New file.
* libio/tst-fgetwc.input: New file.
2009-02-02 Andrew Stubbs <ams@codesourcery.com>
* sysdeps/unix/sysv/linux/sh/Makefile (libm.so-no-z-defs): Define.
2009-02-02 Ulrich Drepper <drepper@redhat.com>
[BZ #9793]
* iconv/gconv_trans.c (__gconv_transliterate): Don't change
*OUTBUFSTART unless the whole output fit into the buffer.
* iconv/Makefile (tests): Add tst-iconv4.
* iconv/tst-iconv4.c: New file.
2009-02-01 Ulrich Drepper <drepper@redhat.com>
* sysdeps/x86_64/cacheinfo.c (intel_02_known): Add new descriptors.
* sysdeps/unix/sysv/linux/i386/sysconf.c (intel_02_known): Likewise.
2009-01-29 Andrew Stubbs <ams@codesourcery.com>
* elf/Makefile (ld.so): Adjust the sed script to insert _begin in to
newer linker scripts.
2009-01-30 Ulrich Drepper <drepper@redhat.com>
[BZ #7040]
* sysdeps/unix/sysv/linux/sys/inotify.h: Second parameter of
inotify_rm_watch should have type int.
2009-01-06 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S (__longjmp):
Make aligned_restore_vmx a local symbol.
* sysdeps/powerpc/powerpc64/__longjmp-common.S (__longjmp):
Likewise.
2009-01-30 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/bits/shm.h (SHM_EXEC): Define.
* sysdeps/unix/sysv/linux/ia64/bits/shm.h (SHM_EXEC): Define.
* sysdeps/unix/sysv/linux/powerpc/bits/shm.h (SHM_EXEC): Define.
* sysdeps/unix/sysv/linux/s390/bits/shm.h (SHM_EXEC): Define.
* sysdeps/unix/sysv/linux/sh/bits/shm.h (SHM_EXEC): Define.
* sysdeps/unix/sysv/linux/sparc/bits/shm.h (SHM_EXEC): Define.
* sysdeps/unix/sysv/linux/x86_64/bits/shm.h (SHM_EXEC): Define.
2009-01-11 Ryan S. Arnold <rsa@us.ibm.com>
[BZ #9726]
* sysdeps/powerpc/fpu/tst-setcontext-fpscr.c (_SET_DI_FPSCR,
_SET_SI_FPSCR): Clobber fp0 to prevent erroneous test-case passes.
2009-01-08 Ryan S. Arnold <rsa@us.ibm.com>
[BZ #9726]
* sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S
(__CONTEXT_FUNC_NAME): Fix mtfsf to use fp31 instead of fp0.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
(__CONTEXT_FUNC_NAME): Fix mtfsf to use fp31 instead of fp0.
2009-01-11 Thomas Schwinge <tschwinge@gnu.org>
* sysdeps/generic/dl-osinfo.h (_dl_setup_stack_chk_guard): Use
memcpy instead of memcmp.
(_dl_setup_pointer_guard): Likewise.
2009-01-30 Ulrich Drepper <drepper@redhat.com>
* malloc/malloc.c (sYSMALLOc): Don't use assert when detecting
manipulated brk, use malloc_printerr.
* misc/sbrk.c (__sbrk): Better error handling for nonsense
requests.
2009-01-30 Jakub Jelinek <jakub@redhat.com>
* string/string.h (memchr, strchr, strrchr, strpbrk, strstr, index,
rindex): For C++ add inlines so that they can be recognized as
builtins.
* string/strings.h: Define correct C++ prototypes for gcc 4.4.
2009-01-29 Ulrich Drepper <drepper@redhat.com>
Jakub Jelinek <jakub@redhat.com>
* string/string.h: Define correct C++ prototypes for gcc 4.4.
* wcsmbs/wchar.h: Likewise.
2009-01-29 Ulrich Drepper <drepper@redhat.com>
* sysdeps/i386/stackinfo.h (stackinfo_get_sp): Define.
(stackinfo_sub_sp): Define.
2009-01-28 Ulrich Drepper <drepper@redhat.com>
[BZ #9750]
* nscd/mem.c (gc): Use alloca_count to get the real stack usage.
* include/alloca.h (alloca_account): Define.
* sysdeps/x86_64/stackinfo.h (stackinfo_get_sp): Define.
(stackinfo_sub_sp): Define.
* nscd/connections.c (nscd_init): If database file access fails
check whether this is due to permission problems and bail in that
case.
[BZ #9741]
* nscd/mem.c (gc): Fix assignment of he_data in case malloc is used.
Reported by Jun'ichi Nomura <j-nomura@ce.jp.nec.com>.
2009-01-14 Kaz Kojima <kkojima@rr.iij4u.or.jp>
* sysdeps/unix/sysv/linux/sh/sysdep.h (INTERNAL_SYSCALL):
Add "t" to clobber list.
(INTERNAL_SYSCALL_NCS): Likewise.
2009-01-28 Ulrich Drepper <drepper@redhat.com>
* nss/getent.c (print_networks): Don't print comma between aliases.
2009-01-23 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/tst-clone.c (do_test): Avoid warning.
* misc/hsearch_r.c (hcreate_r): We need at least three elements in
the hash table.
* misc/Makefile (tests): Add bug-hsearch1.
* misc/bug-hsearch1.c: New file.
2009-01-22 Roland McGrath <roland@redhat.com>
* Makeconfig (%.v.i): Strip trailing # comments,
not only whole-line comments.
2009-01-10 Ulrich Drepper <drepper@redhat.com>
* sysdeps/generic/dl-osinfo.h (_dl_setup_stack_chk_guard): Take
one parameter. If non-NULL use it to initialize return value.
(_dl_setup_pointer_guard): New function.
* sysdeps/unix/sysv/linux/dl-osinfo.h: Likewise.
* sysdeps/generic/ldsodefs.h: Declare _dl_random.
* elf/rtld.c (security_init): Pass _dl_random to
_dl_setup_stack_chk_guard. Call _dl_setup_pointer_guard to initialize
pointer_chk_guard.
* elf/dl-sysdep.c (_dl_random): New variable.
(_dl_sysdep_start): Handle AT_RANDOM.
(_dl_show_auxv): Likewise.
* elf/dl-support.c (_dl_random): New variable.
(_dl_aux_init): Handle AT_RANDOM.
* csu/libc-start.c [!SHARED] (libc_start_main): Pass _dl_random
to _dl_setup_stack_chk_guard.
* elf/elf.h (AT_RANDOM): Define AT_BASE_PLATFORM and AT_RANDOM.
2009-01-10 Roland McGrath <roland@redhat.com>
* nscd/nscd.c (parse_opt): Use argp_error for bad -i argument.
2009-01-08 Ulrich Drepper <drepper@redhat.com>
* sysdeps/i386/fpu/libm-test-ulps: Adjust expm1 errors.
[BZ #9706]
* nss/nss_files/files-parse.c (strtou32): New function.
(INT_FIELD): Use strotu32 instead of strtoul to unify behavior
across 32-bit and 64-bit platforms.
(INT_FIELD_MAYBE_NULL): Likewise.
2009-01-08 Jakub Jelinek <jakub@redhat.com>
[BZ #9720]
@ -8,14 +180,14 @@
2009-01-05 Paolo Bonzini <bonzini@gnu.org>
[BZ 697]
[BZ #697]
* posix/regexec.c (prune_impossible_nodes): Handle sifted_states[0]
being NULL also if there are no backreferences.
* posix/rxspencer/tests: Add testcases.
2009-01-04 Paolo Bonzini <bonzini@gnu.org>
[BZ 9697]
[BZ #9697]
* posix/bug-regex17.c: Add testcases.
* posix/regcomp.c (re_compile_fastmap_iter): Rewrite COMPLEX_BRACKET
handling.
@ -535,7 +707,7 @@
[BZ #6942]
* resolv/res_send.c (send_vc): Fix use of unaligned address.
Properly handle partial reads.
Properly handle partial reads.
2008-10-01 Mark Shinwell <shinwell@codesourcery.com>
@ -586,7 +758,7 @@
Patch by Michael Solberg <msolberg@redhat.com>.
2008-09-12 Flavio Leitner <fleitner@redhat.com>
Ulrich Drepper <drepper@redhat.com>
Ulrich Drepper <drepper@redhat.com>
* malloc/malloc.c (public_vALLOc): Try other arenas in case
_int_valloc fails.
@ -4539,7 +4711,7 @@
2007-08-16 Andreas Jaeger <aj@suse.de>
* locale/localeinfo.h: Make _nl_category_name_idxs extern.
Reported by Peter Festner <peter.festner@ewetel.net>.
Reported by Peter Festner <peter.festner@ewetel.net>.
2007-08-17 Jakub Jelinek <jakub@redhat.com>
@ -5629,8 +5801,8 @@
* sysdeps/generic/ldsodefs.h (_dl_addr_inside_object): New prototype.
2007-06-18 Jakub Jelinek <jakub@redhat.com>
Tomas Janousek <tjanouse@redhat.com>
Ulrich Drepper <drepper@redhat.com>
Tomas Janousek <tjanouse@redhat.com>
Ulrich Drepper <drepper@redhat.com>
[BZ #4647]
* resolv/res_send.c (send_dg): Remove socket_pf. Use ipv6_unavail

2
FAQ
View File

@ -570,8 +570,6 @@ Please note that `make check' might fail for a number of the math tests
because of problems of the FPU emulation in the Linux kernel (the MIPS FPU
doesn't handle all cases and needs help from the kernel).
For details check also my page <http://www.suse.de/~aj/glibc-mips.html>.
1.21. Which compiler should I use for powerpc64?

1
FAQ.in
View File

@ -367,7 +367,6 @@ Please note that `make check' might fail for a number of the math tests
because of problems of the FPU emulation in the Linux kernel (the MIPS FPU
doesn't handle all cases and needs help from the kernel).
For details check also my page <http://www.suse.de/~aj/glibc-mips.html>.
??powerpc64 Which compiler should I use for powerpc64?

View File

@ -1,4 +1,4 @@
# Copyright (C) 1991-2003,2004,2005,2006,2007,2008
# Copyright (C) 1991-2003,2004,2005,2006,2007,2008,2009
# Free Software Foundation, Inc.
# This file is part of the GNU C Library.
@ -794,7 +794,8 @@ ifeq (yes, $(build-shared))
# listing both its input files, and any header files that it may reference
# (but no commands).
%.v.i: $(common-objpfx)config.h
sed '/^[ ]*#/d;s/^[ ]*%/#/' $(filter-out FORCE %.h,$^) \
sed 's/#.*$$//;/^[ ]*$$/d;s/^[ ]*%/#/' \
$(filter-out FORCE %.h,$^) \
| $(CC) -E -undef $(CPPFLAGS) -x assembler-with-cpp - \
> $@T
mv -f $@T $@

7
NEWS
View File

@ -1,5 +1,5 @@
GNU C Library NEWS -- history of user-visible changes. 2008-12-2
Copyright (C) 1992-2007, 2008 Free Software Foundation, Inc.
GNU C Library NEWS -- history of user-visible changes. 2009-1-30
Copyright (C) 1992-2008, 2009 Free Software Foundation, Inc.
See the end for copying conditions.
Please send GNU C library bug reports via <http://sources.redhat.com/bugzilla/>
@ -9,6 +9,9 @@ Version 2.10
* New Linux interface: accept4
* Correct declarations of string function when used in C++ code. This
could lead to compile error for invalid C++ code.
Version 2.9

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1998-2006, 2007 Free Software Foundation, Inc.
/* Copyright (C) 1998-2006, 2007, 2009 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
@ -140,7 +140,7 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
__pthread_initialize_minimal ();
/* Set up the stack checker's canary. */
uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
# ifdef THREAD_SET_STACK_GUARD
THREAD_SET_STACK_GUARD (stack_chk_guard);
# else

View File

@ -1,4 +1,4 @@
# Copyright (C) 1995-2007, 2008 Free Software Foundation, Inc.
# Copyright (C) 1995-2007, 2008, 2009 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
@ -304,7 +304,7 @@ $(objpfx)ld.so: $(objpfx)librtld.os $(ld-map)
$(LDFLAGS-rtld) -Wl,-z,defs -Wl,--verbose 2>&1 | \
LC_ALL=C \
sed -e '/^=========/,/^=========/!d;/^=========/d' \
-e 's/\. = 0 + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \
-e 's/\. = .* + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \
> $@.lds
$(LINK.o) -nostdlib -nostartfiles -shared -o $@ \
$(LDFLAGS-rtld) -Wl,-z,defs $(z-now-$(bind-now)) \

View File

@ -1,5 +1,5 @@
/* Support for dynamic linking code in static libc.
Copyright (C) 1996-2005, 2006, 2007, 2008 Free Software Foundation, Inc.
Copyright (C) 1996-2008, 2009 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
@ -84,6 +84,9 @@ struct r_scope_elem _dl_initial_searchlist;
int _dl_starting_up = 1;
#endif
/* Random data provided by the kernel. */
void *_dl_random;
/* Get architecture specific initializer. */
#include <dl-procinfo.c>
@ -216,6 +219,9 @@ _dl_aux_init (ElfW(auxv_t) *av)
__libc_enable_secure = av->a_un.a_val;
__libc_enable_secure_decided = 1;
break;
case AT_RANDOM:
_dl_random = (void *) av->a_un.a_val;
break;
# ifdef DL_PLATFORM_AUXV
DL_PLATFORM_AUXV
# endif

View File

@ -1,5 +1,5 @@
/* Operating system support for run-time dynamic linker. Generic Unix version.
Copyright (C) 1995-1998, 2000-2007, 2008 Free Software Foundation, Inc.
Copyright (C) 1995-1998, 2000-2008, 2009 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
@ -62,6 +62,7 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion
void *__libc_stack_end attribute_relro = NULL;
rtld_hidden_data_def(__libc_stack_end)
static ElfW(auxv_t) *_dl_auxv attribute_relro;
void *_dl_random attribute_relro = NULL;
#ifndef DL_FIND_ARG_COMPONENTS
# define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
@ -173,6 +174,9 @@ _dl_sysdep_start (void **start_argptr,
GLRO(dl_sysinfo_dso) = (void *) av->a_un.a_val;
break;
#endif
case AT_RANDOM:
_dl_random = (void *) av->a_un.a_val;
break;
#ifdef DL_PLATFORM_AUXV
DL_PLATFORM_AUXV
#endif
@ -294,6 +298,7 @@ _dl_show_auxv (void)
[AT_SECURE - 2] = { "AT_SECURE: ", dec },
[AT_SYSINFO - 2] = { "AT_SYSINFO: 0x", hex },
[AT_SYSINFO_EHDR - 2] = { "AT_SYSINFO_EHDR: 0x", hex },
[AT_RANDOM - 2] = { "AT_RANDOM: 0x", hex },
};
unsigned int idx = (unsigned int) (av->a_type - 2);

View File

@ -972,6 +972,10 @@ typedef struct
#define AT_SECURE 23 /* Boolean, was exec setuid-like? */
#define AT_BASE_PLATFORM 24 /* String identifying real platforms.*/
#define AT_RANDOM 25 /* Address of 16 random bytes. */
#define AT_EXECFN 31 /* Filename of executable. */
/* Pointer to the global system page used for system calls and other

View File

@ -1,5 +1,5 @@
/* Run time dynamic linker.
Copyright (C) 1995-2006, 2007, 2008 Free Software Foundation, Inc.
Copyright (C) 1995-2006, 2007, 2008, 2009 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
@ -841,7 +841,7 @@ static void
security_init (void)
{
/* Set up the stack checker's canary. */
uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
#ifdef THREAD_SET_STACK_GUARD
THREAD_SET_STACK_GUARD (stack_chk_guard);
#else
@ -851,18 +851,18 @@ security_init (void)
/* Set up the pointer guard as well, if necessary. */
if (GLRO(dl_pointer_guard))
{
// XXX If it is cheap, we should use a separate value.
uintptr_t pointer_chk_guard = stack_chk_guard;
#ifndef HP_TIMING_NONAVAIL
hp_timing_t now;
HP_TIMING_NOW (now);
pointer_chk_guard ^= now;
#endif
uintptr_t pointer_chk_guard = _dl_setup_pointer_guard (_dl_random,
stack_chk_guard);
#ifdef THREAD_SET_POINTER_GUARD
THREAD_SET_POINTER_GUARD (pointer_chk_guard);
#endif
__pointer_chk_guard_local = pointer_chk_guard;
}
/* We do not need the _dl_random value anymore. The less
information we leave behind, the better, so clear the
variable. */
_dl_random = NULL;
}

View File

@ -3,5 +3,5 @@ glibc-branch := fedora
glibc-base := HEAD
DIST_BRANCH := devel
COLLECTION := dist-f8
fedora-sync-date := 2009-01-08 10:17 UTC
fedora-sync-tag := fedora-glibc-20090108T1017
fedora-sync-date := 2009-02-04 21:35 UTC
fedora-sync-tag := fedora-glibc-20090204T2135

View File

@ -19,7 +19,7 @@
Summary: The GNU libc libraries
Name: glibc
Version: @glibcversion@
Release: 2
Release: 3
# GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries.
# Things that are linked directly into dynamically linked programs
# and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional
@ -984,6 +984,11 @@ rm -f *.filelist*
%endif
%changelog
* Wed Feb 4 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-3
- update from trunk
- ISO C++ compliant strchr etc. with GCC 4.4+
- AT_RANDOM support
* Thu Jan 8 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-2
- update from trunk

View File

@ -1,5 +1,4 @@
# Copyright (C) 1997,1998,2000,2001,2002,2003,2004,2007
# Free Software Foundation, Inc.
# Copyright (C) 1997,1998,2000-2004,2007,2009 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,7 +49,7 @@ CFLAGS-charmap.c = -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \
CFLAGS-linereader.c = -DNO_TRANSLITERATION
CFLAGS-simple-hash.c = -I../locale
tests = tst-iconv1 tst-iconv2 tst-iconv3 tst-iconv5
tests = tst-iconv1 tst-iconv2 tst-iconv3 tst-iconv4 tst-iconv5
distribute = gconv_builtin.h gconv_int.h loop.c skeleton.c iconv_prog.h \
iconv_charmap.c dummy-repertoire.c gconv_charset.h strtab.c \

View File

@ -1,5 +1,5 @@
/* Transliteration using the locale's data.
Copyright (C) 2000 Free Software Foundation, Inc.
Copyright (C) 2000, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 2000.
@ -139,7 +139,10 @@ __gconv_transliterate (struct __gconv_step *step,
++*irreversible;
res = __GCONV_OK;
}
*outbufstart = outptr;
/* Do not increment the output pointer if we could not
store the entire output. */
if (res != __GCONV_FULL_OUTPUT)
*outbufstart = outptr;
return res;
}

65
iconv/tst-iconv4.c Normal file
View File

@ -0,0 +1,65 @@
// Derived from BZ #9793
#include <errno.h>
#include <iconv.h>
#include <stdio.h>
static int
do_test (void)
{
iconv_t cd = iconv_open ("ASCII//TRANSLIT", "UTF-8");
if (cd == (iconv_t) -1)
{
puts ("iconv_open failed");
return 1;
}
char input[2] = { 0xc2, 0xae }; /* Registered trademark */
char *inptr = input;
size_t insize = sizeof (input);
char output[2]; /* Too short to contain "(R)". */
char *outptr = output;
size_t outsize = sizeof (output);
size_t ret = iconv (cd, &inptr, &insize, &outptr, &outsize);
if (ret != (size_t) -1)
{
puts ("iconv succeeded");
return 1;
}
if (errno != E2BIG)
{
puts ("iconv did not set errno to E2BIG");
return 1;
}
int res = 0;
if (inptr != input)
{
puts ("inptr changed");
res = 1;
}
if (insize != sizeof (input))
{
puts ("insize changed");
res = 1;
}
if (outptr != output)
{
puts ("outptr changed");
res = 1;
}
if (outsize != sizeof (output))
{
puts ("outsize changed");
res = 1;
}
if (iconv_close (cd) == -1)
{
puts ("iconv_close failed");
res = 1;
}
return res;
}
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"

View File

@ -46,4 +46,17 @@ extern int __libc_alloca_cutoff (size_t size) __attribute__ ((const));
__alloca (((len) = (newlen)))
#endif
#if defined stackinfo_get_sp && defined stackinfo_sub_sp
# define alloca_account(size, avar) \
({ void *old__ = stackinfo_get_sp (); \
void *m__ = __alloca (size); \
avar += stackinfo_sub_sp (old__); \
m__; })
#else
# define alloca_account(size, avar) \
({ size_t s__ = (size); \
avar += s__; \
__alloca (s__); })
#endif
#endif

View File

@ -1,4 +1,4 @@
# Copyright (C) 1995-2004,2006,2007,2008 Free Software Foundation, Inc.
# Copyright (C) 1995-2004,2006,2007,2008,2009 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
@ -58,7 +58,7 @@ tests = tst_swprintf tst_wprintf tst_swscanf tst_wscanf tst_getwc tst_putwc \
tst-memstream1 tst-memstream2 \
tst-wmemstream1 tst-wmemstream2 \
bug-memstream1 bug-wmemstream1 \
tst-setvbuf1 tst-popen1
tst-setvbuf1 tst-popen1 tst-fgetwc
test-srcs = test-freopen
all: # Make this the default target; it will be defined in Rules.

52
libio/tst-fgetwc.c Normal file
View File

@ -0,0 +1,52 @@
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
static int
do_test (void)
{
if (setlocale (LC_ALL, "de_DE.utf8") == NULL)
{
puts ("setlocale failed");
return 1;
}
if (setvbuf (stdin, NULL, _IONBF, 0) != 0)
{
puts ("setvbuf failed");
return 1;
}
wchar_t buf[100];
size_t nbuf = 0;
wint_t c;
while ((c = fgetwc (stdin)) != WEOF)
buf[nbuf++] = c;
if (ferror (stdin))
{
puts ("error on stdin");
return 1;
}
const wchar_t expected[] =
{
0x00000439, 0x00000446, 0x00000443, 0x0000043a,
0x00000435, 0x0000043d, 0x0000000a, 0x00000071,
0x00000077, 0x00000065, 0x00000072, 0x00000074,
0x00000079, 0x0000000a
};
if (nbuf != sizeof (expected) / sizeof (expected[0])
|| wmemcmp (expected, buf, nbuf) != 0)
{
puts ("incorrect result");
return 1;
}
return 0;
}
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"

2
libio/tst-fgetwc.input Normal file
View File

@ -0,0 +1,2 @@
йцукен
qwerty

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1993,1995,1997-2003,2004, 2006 Free Software Foundation, Inc.
/* Copyright (C) 1993,1995,1997-2004,2006,2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Ulrich Drepper <drepper@cygnus.com>.
Based on the single byte version by Per Bothner <bothner@cygnus.com>.
@ -123,8 +123,6 @@ _IO_wfile_underflow (fp)
struct _IO_codecvt *cd;
enum __codecvt_result status;
_IO_ssize_t count;
int tries;
const char *read_ptr_copy;
if (__builtin_expect (fp->_flags & _IO_NO_READS, 0))
{
@ -236,13 +234,15 @@ _IO_wfile_underflow (fp)
fp->_wide_data->_IO_write_base = fp->_wide_data->_IO_write_ptr =
fp->_wide_data->_IO_write_end = fp->_wide_data->_IO_buf_base;
tries = 0;
const char *read_ptr_copy;
char accbuf[MB_LEN_MAX];
size_t naccbuf = 0;
again:
count = _IO_SYSREAD (fp, fp->_IO_read_end,
fp->_IO_buf_end - fp->_IO_read_end);
if (count <= 0)
{
if (count == 0 && tries == 0)
if (count == 0 && naccbuf == 0)
fp->_flags |= _IO_EOF_SEEN;
else
fp->_flags |= _IO_ERR_SEEN, count = 0;
@ -250,7 +250,7 @@ _IO_wfile_underflow (fp)
fp->_IO_read_end += count;
if (count == 0)
{
if (tries != 0)
if (naccbuf != 0)
/* There are some bytes in the external buffer but they don't
convert to anything. */
__set_errno (EILSEQ);
@ -262,18 +262,31 @@ _IO_wfile_underflow (fp)
/* Now convert the read input. */
fp->_wide_data->_IO_last_state = fp->_wide_data->_IO_state;
fp->_IO_read_base = fp->_IO_read_ptr;
const char *from = fp->_IO_read_ptr;
const char *to = fp->_IO_read_end;
size_t to_copy = count;
if (__builtin_expect (naccbuf != 0, 0))
{
to_copy = MIN (sizeof (accbuf) - naccbuf, count);
to = __mempcpy (&accbuf[naccbuf], from, to_copy);
naccbuf += to_copy;
from = accbuf;
}
status = (*cd->__codecvt_do_in) (cd, &fp->_wide_data->_IO_state,
fp->_IO_read_ptr, fp->_IO_read_end,
&read_ptr_copy,
from, to, &read_ptr_copy,
fp->_wide_data->_IO_read_end,
fp->_wide_data->_IO_buf_end,
&fp->_wide_data->_IO_read_end);
fp->_IO_read_ptr = (char *) read_ptr_copy;
if (__builtin_expect (naccbuf != 0, 0))
fp->_IO_read_ptr += MAX (0, read_ptr_copy - &accbuf[naccbuf - to_copy]);
else
fp->_IO_read_ptr = (char *) read_ptr_copy;
if (fp->_wide_data->_IO_read_end == fp->_wide_data->_IO_buf_base)
{
if (status == __codecvt_error || fp->_IO_read_end == fp->_IO_buf_end)
if (status == __codecvt_error)
{
out_eilseq:
__set_errno (EILSEQ);
fp->_flags |= _IO_ERR_SEEN;
return WEOF;
@ -281,7 +294,20 @@ _IO_wfile_underflow (fp)
/* The read bytes make no complete character. Try reading again. */
assert (status == __codecvt_partial);
++tries;
if (naccbuf == 0)
{
naccbuf = fp->_IO_read_end - fp->_IO_read_ptr;
if (naccbuf >= sizeof (accbuf))
goto out_eilseq;
memcpy (accbuf, fp->_IO_read_ptr, naccbuf);
}
else if (naccbuf == sizeof (accbuf))
goto out_eilseq;
fp->_IO_read_ptr = fp->_IO_read_end = fp->_IO_read_base;
goto again;
}

View File

@ -1,3 +1,23 @@
2009-01-28 Ulrich Drepper <drepper@redhat.com>
* locales/as_IN: Break circular include loops introduced in last patch.
* locales/bn_BD: Likewise.
* locales/bn_IN: Likewise.
* locales/hi_IN: Likewise.
* locales/mr_IN: Likewise.
Patch by Pravin Satpute <psatpute@redhat.com>.
2009-01-08 Ulrich Drepper <drepper@redhat.com>
[BZ #9701]
* locales/sk_SK: Slovakia uses the Euro.
[BZ #9704]
* locales/mt_MT: Malta uses the Euro.
[BZ #9705]
* locales/el_CY: Cyprus uses the Euro.
2008-12-31 Ulrich Drepper <drepper@redhat.com>
* locales/iso14651_t1_common: Fix sorting of U+0AB3.

View File

@ -32,11 +32,7 @@ END LC_IDENTIFICATION
%%%%%%%%%%%%%
LC_CTYPE
copy "bn_IN"
translit_start
include "translit_combining";""
translit_end
copy "bn_BD"
END LC_CTYPE
%%%%%%%%%%%%%

View File

@ -37,7 +37,24 @@ copy "iso14651_t1"
END LC_COLLATE
LC_CTYPE
copy "bn_IN"
copy "i18n"
% Bengali uses the alternate digits U+09E6..U+09EF
outdigit <U09E6>..<U09EF>
% This is used in the scanf family of functions to read Bengali numbers
% using "%Id" and such.
map to_inpunct; /
(<U0030>,<U09E6>); /
(<U0031>,<U09E7>); /
(<U0032>,<U09E8>); /
(<U0033>,<U09E9>); /
(<U0034>,<U09EA>); /
(<U0035>,<U09EB>); /
(<U0036>,<U09EC>); /
(<U0037>,<U09ED>); /
(<U0038>,<U09EE>); /
(<U0039>,<U09EF>);
translit_start
include "translit_combining";""

View File

@ -34,28 +34,7 @@ END LC_IDENTIFICATION
LC_CTYPE
copy "i18n"
% Bengali uses the alternate digits U+09E6..U+09EF
outdigit <U09E6>..<U09EF>
% This is used in the scanf family of functions to read Bengali numbers
% using "%Id" and such.
map to_inpunct; /
(<U0030>,<U09E6>); /
(<U0031>,<U09E7>); /
(<U0032>,<U09E8>); /
(<U0033>,<U09E9>); /
(<U0034>,<U09EA>); /
(<U0035>,<U09EB>); /
(<U0036>,<U09EC>); /
(<U0037>,<U09ED>); /
(<U0038>,<U09EE>); /
(<U0039>,<U09EF>);
translit_start
include "translit_combining";""
translit_end
copy "bn_BD"
END LC_CTYPE

View File

@ -44,8 +44,8 @@ copy "el_GR"
END LC_MESSAGES
LC_MONETARY
int_curr_symbol "<U0043><U0059><U0050><U0020>"
currency_symbol "<U00A3>"
int_curr_symbol "<U0045><U0055><U0052><U0020>"
currency_symbol "<U20AC>"
mon_decimal_point "<U002C>"
mon_thousands_sep "<U002E>"
mon_grouping 3

View File

@ -32,7 +32,24 @@ category "hi_IN:2000";LC_TELEPHONE
END LC_IDENTIFICATION
LC_CTYPE
copy "mr_IN"
copy "i18n"
% Devanagari uses the alternate digits U+0966..U+096F
outdigit <U0966>..<U096F>
% This is used in the scanf family of functions to read devanagari numbers
% using "%Id" and such.
map to_inpunct; /
(<U0030>,<U0966>); /
(<U0031>,<U0967>); /
(<U0032>,<U0968>); /
(<U0033>,<U0969>); /
(<U0034>,<U096A>); /
(<U0035>,<U096B>); /
(<U0036>,<U096C>); /
(<U0037>,<U096D>); /
(<U0038>,<U096E>); /
(<U0039>,<U096F>);
translit_start
include "translit_combining";""

View File

@ -32,28 +32,7 @@ category "mr_IN:2000";LC_TELEPHONE
END LC_IDENTIFICATION
LC_CTYPE
copy "i18n"
% Devanagari uses the alternate digits U+0966..U+096F
outdigit <U0966>..<U096F>
% This is used in the scanf family of functions to read devanagari numbers
% using "%Id" and such.
map to_inpunct; /
(<U0030>,<U0966>); /
(<U0031>,<U0967>); /
(<U0032>,<U0968>); /
(<U0033>,<U0969>); /
(<U0034>,<U096A>); /
(<U0035>,<U096B>); /
(<U0036>,<U096C>); /
(<U0037>,<U096D>); /
(<U0038>,<U096E>); /
(<U0039>,<U096F>);
translit_start
include "translit_combining";""
translit_end
copy "hi_IN"
END LC_CTYPE
LC_COLLATE

View File

@ -131,8 +131,8 @@ LC_MONETARY
% These are generated based on XML base Locale defintion file
% for IBM Class for Unicode.
%
int_curr_symbol "<U004D><U0054><U004C><U0020>"
currency_symbol "<U004C><U006D>"
int_curr_symbol "<U0045><U0055><U0052><U0020>"
currency_symbol "<U20AC>"
mon_decimal_point "<U002E>"
mon_thousands_sep "<U002C>"
mon_grouping 3
@ -140,9 +140,9 @@ positive_sign ""
negative_sign "<U002D>"
int_frac_digits 2
frac_digits 2
p_cs_precedes 1
p_cs_precedes 0
p_sep_by_space 0
n_cs_precedes 1
n_cs_precedes 0
n_sep_by_space 0
p_sign_posn 1
n_sign_posn 0

View File

@ -91,8 +91,8 @@ END LC_MESSAGES
LC_MONETARY
int_curr_symbol "<U0053><U004B><U004B><U0020>"
currency_symbol "<U0053><U006B>"
int_curr_symbol "<U0045><U0055><U0052><U0020>"
currency_symbol "<U20AC>"
mon_decimal_point "<U002C>"
mon_thousands_sep "<U00A0>"
mon_grouping 3;3

View File

@ -1,5 +1,5 @@
/* Malloc implementation for multiple threads without lock contention.
Copyright (C) 1996-2006, 2007, 2008 Free Software Foundation, Inc.
Copyright (C) 1996-2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Wolfram Gloger <wg@malloc.de>
and Doug Lea <dl@cs.oswego.edu>, 2001.
@ -3189,7 +3189,7 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
else if (contiguous(av) && old_size && brk < old_end) {
/* Oops! Someone else killed our space.. Can't touch anything. */
assert(0);
malloc_printerr (3, "break adjusted to free malloc space", brk);
}
/*

View File

@ -1,4 +1,4 @@
# Copyright (C) 1991-2006, 2007 Free Software Foundation, Inc.
# Copyright (C) 1991-2006, 2007, 2009 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
@ -79,7 +79,7 @@ endif
gpl2lgpl := error.c error.h
tests := tst-dirname tst-tsearch tst-fdset tst-efgcvt tst-mntent tst-hsearch \
tst-error1 tst-pselect tst-insremque tst-mntent2
tst-error1 tst-pselect tst-insremque tst-mntent2 bug-hsearch1
ifeq (no,$(cross-compiling))
tests: $(objpfx)tst-error1-mem
endif

31
misc/bug-hsearch1.c Normal file
View File

@ -0,0 +1,31 @@
#include <search.h>
#include <stdio.h>
static int
do_test (void)
{
if (hcreate (1) == 0)
{
puts ("hcreate failed");
return 1;
}
ENTRY e;
e.key = (char *) "a";
e.data = (char *) "b";
if (hsearch (e, ENTER) == NULL)
{
puts ("ENTER failed");
return 1;
}
ENTRY s;
s.key = (char *) "c";
if (hsearch (s, FIND) != NULL)
{
puts ("FIND succeeded");
return 1;
}
return 0;
}
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1993,1995-1997,2002,2005,2007,2008
/* Copyright (C) 1993,1995-1997,2002,2005,2007,2008,2009
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1993.
@ -79,6 +79,10 @@ hcreate_r (nel, htab)
if (htab->table != NULL)
return 0;
/* We need a size of at least 3. Otherwise the hash functions we
use will not work. */
if (nel < 3)
nel = 3;
/* Change nel to the first prime number not smaller as nel. */
nel |= 1; /* make odd */
while (!isprime (nel))

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991,1995,1996,1997,2000,2002 Free Software Foundation, Inc.
/* Copyright (C) 1991,1995-1997,2000,2002,2009 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,8 +16,9 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <unistd.h>
#include <errno.h>
#include <stdint.h>
#include <unistd.h>
/* Defined in brk.c. */
extern void *__curbrk;
@ -47,7 +48,10 @@ __sbrk (intptr_t increment)
return __curbrk;
oldbrk = __curbrk;
if (__brk (oldbrk + increment) < 0)
if ((increment > 0
? ((uintptr_t) oldbrk + (uintptr_t) increment < (uintptr_t) oldbrk)
: ((uintptr_t) oldbrk < (uintptr_t) -increment))
|| __brk (oldbrk + increment) < 0)
return (void *) -1;
return oldbrk;

View File

@ -1,3 +1,39 @@
2009-01-29 Ulrich Drepper <drepper@redhat.com>
* sysdeps/pthread/unwind-forcedunwind.c: Encrypt all function
pointer variables.
* allocatestack.c (__free_stacks): Renamed from free_stacks.
(__free_stack_cache): Removed. Change callers to call __free_stacks.
* init.c (nptl_freeres): New function.
(pthread_functions): Initialize ptr_freeres to nptl_freeres.
* pthreadP.h: Don't declare __free_stack_cache. Declare __free_stacks.
* sysdeps/pthread/unwind-forcedunwind.c (libgcc_s_handle): New
variable.
(pthread_cancel_init): Depend in libgcc_s_handle for decision to
load DSO. Assign last.
(__unwind_freeres): New function.
* allocatestack.c (__reclaim_stacks): Reset in_flight_stack later
for better debugging. No need to use stack_list_add here.
2009-01-14 Kaz Kojima <kkojima@rr.iij4u.or.jp>
* sysdeps/unix/sysv/linux/sh/lowlevellock.S
(__lll_timedlock_wait): Use FUTEX_WAIT_BITSET|FUTEX_CLOCK_REALTIME
instead of computing relative timeout.
* sysdeps/unix/sysv/linux/sh/lowlevellock.h: Define
FUTEX_CLOCK_REALTIME and FUTEX_BITSET_MATCH_ANY.
2009-01-25 Ulrich Drepper <drepper@redhat.com>
* pthread_mutex_lock.c (__pthread_mutex_lock): Remove unused label out.
2009-01-08 Ulrich Drepper <drepper@redhat.com>
* sysdeps/pthread/list.h (list_add): Initialize new element first.
(list_add_tail): Removed.
2009-01-04 Ulrich Drepper <drepper@redhat.com>
* init.c (__pthread_initialize_minimal_internal): Optimize test

View File

@ -248,8 +248,8 @@ get_cached_stack (size_t *sizep, void **memp)
/* Free stacks until cache size is lower than LIMIT. */
static void
free_stacks (size_t limit)
void
__free_stacks (size_t limit)
{
/* We reduce the size of the cache. Remove the last entries until
the size is below the limit. */
@ -299,15 +299,7 @@ queue_stack (struct pthread *stack)
stack_cache_actsize += stack->stackblock_size;
if (__builtin_expect (stack_cache_actsize > stack_cache_maxsize, 0))
free_stacks (stack_cache_maxsize);
}
/* This function is called indirectly from the freeres code in libc. */
void
__free_stack_cache (void)
{
free_stacks (0);
__free_stacks (stack_cache_maxsize);
}
@ -849,8 +841,6 @@ __reclaim_stacks (void)
elem->next->prev = elem->prev;
elem->prev->next = elem->next;
}
in_flight_stack = 0;
}
/* Mark all stacks except the still running one as free. */
@ -913,11 +903,13 @@ __reclaim_stacks (void)
if (__builtin_expect (THREAD_GETMEM (self, user_stack), 0))
list_add (&self->list, &__stack_user);
else
stack_list_add (&self->list, &stack_used);
list_add (&self->list, &stack_used);
/* There is one thread running. */
__nptl_nthreads = 1;
in_flight_stack = 0;
/* Initialize the lock. */
stack_cache_lock = LLL_LOCK_INITIALIZER;
}

View File

@ -67,6 +67,8 @@ static const char nptl_version[] __attribute_used__ = VERSION;
extern void __libc_setup_tls (size_t tcbsize, size_t tcbalign);
#endif
static void nptl_freeres (void);
#ifdef SHARED
static const struct pthread_functions pthread_functions =
@ -128,7 +130,7 @@ static const struct pthread_functions pthread_functions =
.ptr__nptl_deallocate_tsd = __nptl_deallocate_tsd,
.ptr__nptl_setxid = __nptl_setxid,
/* For now only the stack cache needs to be freed. */
.ptr_freeres = __free_stack_cache
.ptr_freeres = nptl_freeres
};
# define ptr_pthread_functions &pthread_functions
#else
@ -136,6 +138,18 @@ static const struct pthread_functions pthread_functions =
#endif
/* This function is called indirectly from the freeres code in libc. */
static void
__libc_freeres_fn_section
nptl_freeres (void)
{
#ifdef SHARED
__unwind_freeres ();
#endif
__free_stacks (0);
}
/* For asynchronous cancellation we use a signal. This is the handler. */
static void
sigcancel_handler (int sig, siginfo_t *si, void *ctx)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
/* Copyright (C) 2002-2007, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -247,6 +247,7 @@ hidden_proto (__pthread_register_cancel)
hidden_proto (__pthread_unregister_cancel)
# ifdef SHARED
extern void attribute_hidden pthread_cancel_init (void);
extern void __unwind_freeres (void);
# endif
#endif
@ -564,7 +565,7 @@ extern void __nptl_deallocate_tsd (void) attribute_hidden;
extern int __nptl_setxid (struct xid_command *cmdp) attribute_hidden;
extern void __free_stack_cache (void) attribute_hidden;
extern void __free_stacks (size_t limit) attribute_hidden;
extern void __wait_lookup_done (void) attribute_hidden;

View File

@ -121,7 +121,6 @@ __pthread_mutex_lock (mutex)
goto simple;
}
out:
/* Record the ownership. */
mutex->__data.__owner = id;
#ifndef NO_INCR

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
/* Copyright (C) 2002, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -46,24 +46,13 @@ typedef struct list_head
static inline void
list_add (list_t *newp, list_t *head)
{
head->next->prev = newp;
newp->next = head->next;
newp->prev = head;
head->next->prev = newp;
head->next = newp;
}
/* Add new element at the tail of the list. */
static inline void
list_add_tail (list_t *newp, list_t *head)
{
head->prev->next = newp;
newp->next = head;
newp->prev = head->prev;
head->prev = newp;
}
/* Remove element from list. */
static inline void
list_del (list_t *elem)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc.
/* Copyright (C) 2003, 2005, 2006, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>.
@ -21,7 +21,9 @@
#include <stdio.h>
#include <unwind.h>
#include <pthreadP.h>
#include <sysdep.h>
static void *libgcc_s_handle;
static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
static _Unwind_Reason_Code (*libgcc_s_personality)
(int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
@ -34,10 +36,13 @@ void
__attribute_noinline__
pthread_cancel_init (void)
{
void *resume, *personality, *forcedunwind, *getcfa;
void *resume;
void *personality;
void *forcedunwind;
void *getcfa;
void *handle;
if (__builtin_expect (libgcc_s_getcfa != NULL, 1))
if (__builtin_expect (libgcc_s_handle != NULL, 1))
{
/* Force gcc to reload all values. */
asm volatile ("" ::: "memory");
@ -58,23 +63,42 @@ pthread_cancel_init (void)
)
__libc_fatal ("libgcc_s.so.1 must be installed for pthread_cancel to work\n");
PTR_MANGLE (resume);
libgcc_s_resume = resume;
PTR_MANGLE (personality);
libgcc_s_personality = personality;
PTR_MANGLE (forcedunwind);
libgcc_s_forcedunwind = forcedunwind;
/* Make sure libgcc_s_getcfa is written last. Otherwise,
PTR_MANGLE (getcfa);
libgcc_s_getcfa = getcfa;
/* Make sure libgcc_s_handle is written last. Otherwise,
pthread_cancel_init might return early even when the pointer the
caller is interested in is not initialized yet. */
atomic_write_barrier ();
libgcc_s_getcfa = getcfa;
libgcc_s_handle = handle;
}
void
__libc_freeres_fn_section
__unwind_freeres (void)
{
void *handle = libgcc_s_handle;
if (handle != NULL)
{
libgcc_s_handle = NULL;
__libc_dlclose (handle);
}
}
void
_Unwind_Resume (struct _Unwind_Exception *exc)
{
if (__builtin_expect (libgcc_s_resume == NULL, 0))
if (__builtin_expect (libgcc_s_handle == NULL, 0))
pthread_cancel_init ();
libgcc_s_resume (exc);
void (*resume) (struct _Unwind_Exception *exc) = libgcc_s_resume;
PTR_DEMANGLE (resume);
resume (exc);
}
_Unwind_Reason_Code
@ -83,28 +107,37 @@ __gcc_personality_v0 (int version, _Unwind_Action actions,
struct _Unwind_Exception *ue_header,
struct _Unwind_Context *context)
{
if (__builtin_expect (libgcc_s_personality == NULL, 0))
if (__builtin_expect (libgcc_s_handle == NULL, 0))
pthread_cancel_init ();
return libgcc_s_personality (version, actions, exception_class,
ue_header, context);
_Unwind_Reason_Code (*personality)
(int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
struct _Unwind_Context *) = libgcc_s_personality;
PTR_DEMANGLE (personality);
return personality (version, actions, exception_class, ue_header, context);
}
_Unwind_Reason_Code
_Unwind_ForcedUnwind (struct _Unwind_Exception *exc, _Unwind_Stop_Fn stop,
void *stop_argument)
{
if (__builtin_expect (libgcc_s_forcedunwind == NULL, 0))
if (__builtin_expect (libgcc_s_handle == NULL, 0))
pthread_cancel_init ();
return libgcc_s_forcedunwind (exc, stop, stop_argument);
_Unwind_Reason_Code (*forcedunwind)
(struct _Unwind_Exception *, _Unwind_Stop_Fn, void *)
= libgcc_s_forcedunwind;
PTR_DEMANGLE (forcedunwind);
return forcedunwind (exc, stop, stop_argument);
}
_Unwind_Word
_Unwind_GetCFA (struct _Unwind_Context *context)
{
if (__builtin_expect (libgcc_s_getcfa == NULL, 0))
if (__builtin_expect (libgcc_s_handle == NULL, 0))
pthread_cancel_init ();
return libgcc_s_getcfa (context);
_Unwind_Word (*getcfa) (struct _Unwind_Context *) = libgcc_s_getcfa;
PTR_DEMANGLE (getcfa);
return getcfa (context);
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2003, 2004, 2005, 2007, 2008
/* Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@ -36,6 +36,13 @@
mov #(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), tmp; \
extu.b tmp, tmp; \
xor tmp, reg
# define LOAD_FUTEX_WAIT_ABS(reg,tmp,tmp2) \
mov #(FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG), tmp; \
extu.b tmp, tmp; \
mov #(FUTEX_CLOCK_REALTIME >> 8), tmp2; \
swap.b tmp2, tmp2; \
or tmp2, tmp; \
xor tmp, reg
# define LOAD_FUTEX_WAKE(reg,tmp,tmp2) \
mov #(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), tmp; \
extu.b tmp, tmp; \
@ -96,6 +103,22 @@
and tmp2, reg ; \
mov #FUTEX_WAIT, tmp ; \
or tmp, reg
# define LOAD_FUTEX_WAIT_ABS(reg,tmp,tmp2) \
stc gbr, tmp ; \
mov.w 99f, tmp2 ; \
add tmp2, tmp ; \
mov.l @tmp, tmp2 ; \
bra 98f ; \
mov #FUTEX_PRIVATE_FLAG, tmp ; \
99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \
98: extu.b tmp, tmp ; \
xor tmp, reg ; \
and tmp2, reg ; \
mov #FUTEX_WAIT_BITSET, tmp ; \
mov #(FUTEX_CLOCK_REALTIME >> 8), tmp2; \
swap.b tmp2, tmp2; \
or tmp2, tmp; \
or tmp, reg
# endif
# define LOAD_FUTEX_WAKE(reg,tmp,tmp2) \
stc gbr, tmp ; \
@ -193,12 +216,85 @@ __lll_lock_wait:
cfi_endproc
.size __lll_lock_wait,.-__lll_lock_wait
/* r5 (r8): futex
r7 (r11): flags
r6 (r9): timeout
r4 (r10): futex value
*/
.globl __lll_timedlock_wait
.type __lll_timedlock_wait,@function
.hidden __lll_timedlock_wait
.align 5
cfi_startproc
__lll_timedlock_wait:
mov.l r12, @-r15
cfi_adjust_cfa_offset(4)
cfi_rel_offset (r12, 0)
# ifndef __ASSUME_FUTEX_CLOCK_REALTIME
mov.l .Lhave, r1
# ifdef PIC
mova .Lgot, r0
mov.l .Lgot, r12
add r0, r12
add r12, r1
# endif
mov.l @r1, r0
tst r0, r0
bt .Lreltmo
# endif
mov r4, r2
mov r5, r4
mov r7, r5
mov r6, r7
LOAD_FUTEX_WAIT_ABS (r5, r0, r1)
mov #2, r6
cmp/eq r6, r2
bf/s 2f
mov r2, r6
1:
mov #2, r6
mov #-1, r1
mov #SYS_futex, r3
extu.b r3, r3
trapa #0x16
SYSCALL_INST_PAD
mov r0, r6
2:
XCHG (r2, @r4, r3) /* NB: lock is implied */
tst r3, r3
bt/s 3f
mov r6, r0
cmp/eq #-ETIMEDOUT, r0
bt 4f
cmp/eq #-EINVAL, r0
bf 1b
4:
neg r0, r3
3:
mov r3, r0
rts
mov.l @r15+, r12
.align 2
# ifdef PIC
.Lgot:
.long _GLOBAL_OFFSET_TABLE_
.Lhave:
.long __have_futex_clock_realtime@GOTOFF
# else
.Lhave:
.long __have_futex_clock_realtime
# endif
# ifndef __ASSUME_FUTEX_CLOCK_REALTIME
.Lreltmo:
/* Check for a valid timeout value. */
mov.l @(4,r6), r1
mov.l .L1g, r0
@ -290,12 +386,15 @@ __lll_timedlock_wait:
mov.l @r15+, r8
mov.l @r15+, r9
mov.l @r15+, r10
mov.l @r15+, r11
rts
mov.l @r15+, r11
mov.l @r15+, r12
3:
mov.l @r15+, r12
rts
mov #EINVAL, r0
# endif
cfi_endproc
.L1k:

View File

@ -1,4 +1,5 @@
/* Copyright (C) 2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc.
/* Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009
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
@ -37,6 +38,9 @@
#define FUTEX_WAIT_BITSET 9
#define FUTEX_WAKE_BITSET 10
#define FUTEX_PRIVATE_FLAG 128
#define FUTEX_CLOCK_REALTIME 256
#define FUTEX_BITSET_MATCH_ANY 0xffffffff
#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1)

View File

@ -1,5 +1,5 @@
/* Inner loops of cache daemon.
Copyright (C) 1998-2007, 2008 Free Software Foundation, Inc.
Copyright (C) 1998-2007, 2008, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -647,6 +647,9 @@ cannot create read-only descriptor for \"%s\"; no mmap"),
if (fd != -1)
close (fd);
}
else if (errno == EACCES)
error (EXIT_FAILURE, 0, _("cannot access '%s'"),
dbs[cnt].db_filename);
}
if (dbs[cnt].head == NULL)

View File

@ -1,5 +1,5 @@
/* Cache memory handling.
Copyright (C) 2004, 2005, 2006, 2008 Free Software Foundation, Inc.
Copyright (C) 2004, 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
@ -134,12 +134,11 @@ gc (struct database_dyn *db)
stack_used = 0;
size_t nmark = (db->head->first_free / BLOCK_ALIGN + BITS - 1) / BITS;
size_t memory_needed = nmark * sizeof (BITMAP_T);
if (stack_used + memory_needed <= MAX_STACK_USE)
if (__builtin_expect (stack_used + memory_needed <= MAX_STACK_USE, 1))
{
mark = (BITMAP_T *) alloca (memory_needed);
mark = (BITMAP_T *) alloca_account (memory_needed, stack_used);
mark_use_malloc = false;
memset (mark, '\0', memory_needed);
stack_used += memory_needed;
}
else
{
@ -153,19 +152,17 @@ gc (struct database_dyn *db)
struct hashentry **he;
struct hashentry **he_data;
bool he_use_malloc;
if (stack_used + memory_needed <= MAX_STACK_USE)
if (__builtin_expect (stack_used + memory_needed <= MAX_STACK_USE, 1))
{
he = alloca (db->head->nentries * sizeof (struct hashentry *));
he_data = alloca (db->head->nentries * sizeof (struct hashentry *));
he = alloca_account (memory_needed, stack_used);
he_use_malloc = false;
stack_used += memory_needed;
}
else
{
he = xmalloc (memory_needed);
he_data = &he[db->head->nentries * sizeof (struct hashentry *)];
he_use_malloc = true;
}
he_data = &he[db->head->nentries];
size_t cnt = 0;
for (size_t idx = 0; idx < db->head->module; ++idx)
@ -373,11 +370,9 @@ gc (struct database_dyn *db)
ref_t disp = off_alloc - off_free;
struct moveinfo *new_move;
if (stack_used + sizeof (*new_move) <= MAX_STACK_USE)
{
new_move = alloca (sizeof (*new_move));
stack_used += sizeof (*new_move);
}
if (__builtin_expect (stack_used + sizeof (*new_move) <= MAX_STACK_USE,
1))
new_move = alloca_account (sizeof (*new_move), stack_used);
else
new_move = obstack_alloc (&ob, sizeof (*new_move));
new_move->from = db->data + off_alloc;

View File

@ -338,7 +338,10 @@ parse_opt (int key, char *arg, struct argp_state *state)
break;
if (cnt == lastdb)
return ARGP_ERR_UNKNOWN;
{
argp_error (state, _("'%s' is not a known database"), arg);
return EINVAL;
}
size_t arg_len = strlen (arg) + 1;
struct

View File

@ -448,8 +448,6 @@ print_networks (struct netent *net)
putchar_unlocked (' ');
fputs_unlocked (net->n_aliases[i], stdout);
++i;
if (net->n_aliases[i] != NULL)
putchar_unlocked (',');
}
putchar_unlocked ('\n');
}

View File

@ -1,5 +1,5 @@
/* Common code for file-based database parsers in nss_files module.
Copyright (C) 1996-2000, 2003, 2004 Free Software Foundation, Inc.
Copyright (C) 1996-2000, 2003, 2004, 2009 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
@ -127,10 +127,24 @@ nss_files_parse_hidden_def (parse_line)
} \
}
/* Helper function. */
static inline uint32_t
__attribute__ ((always_inline))
strtou32 (const char *nptr, char **endptr, int base)
{
unsigned long int val = strtoul (nptr, endptr, base);
/* Match the 32-bit behavior on 64-bit platforms. */
if (sizeof (long int) > 4 && val > 0xffffffff)
val = 0xffffffff;
return val;
}
# define INT_FIELD(variable, terminator_p, swallow, base, convert) \
{ \
char *endp; \
variable = convert (strtoul (line, &endp, base)); \
variable = convert (strtou32 (line, &endp, base)); \
if (endp == line) \
return 0; \
else if (terminator_p (*endp)) \
@ -148,7 +162,7 @@ nss_files_parse_hidden_def (parse_line)
if (*line == '\0') \
/* We expect some more input, so don't allow the string to end here. */ \
return 0; \
variable = convert (strtoul (line, &endp, base)); \
variable = convert (strtou32 (line, &endp, base)); \
if (endp == line) \
variable = default; \
if (terminator_p (*endp)) \

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991-1993, 1995-2004, 2007 Free Software Foundation, Inc.
/* Copyright (C) 1991-1993,1995-2004,2007,2009 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
@ -32,6 +32,11 @@ __BEGIN_DECLS
#define __need_NULL
#include <stddef.h>
/* Tell the caller that we provide correct C++ prototypes. */
#if defined __cplusplus && __GNUC_PREREQ (4, 4)
# define __CORRECT_ISO_CPP_STRING_H_PROTO
#endif
__BEGIN_NAMESPACE_STD
/* Copy N bytes of SRC to DEST. */
@ -63,19 +68,57 @@ extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
__THROW __attribute_pure__ __nonnull ((1, 2));
/* Search N bytes of S for C. */
#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
extern "C++"
{
extern void *memchr (void *__s, int __c, size_t __n)
__THROW __asm ("memchr") __attribute_pure__ __nonnull ((1));
extern __const void *memchr (__const void *__s, int __c, size_t __n)
__THROW __asm ("memchr") __attribute_pure__ __nonnull ((1));
# ifdef __OPTIMIZE__
__extern_always_inline void *
memchr (void *__s, int __c, size_t __n) __THROW
{
return __builtin_memchr (__s, __c, __n);
}
__extern_always_inline __const void *
memchr (__const void *__s, int __c, size_t __n) __THROW
{
return __builtin_memchr (__s, __c, __n);
}
# endif
}
#else
extern void *memchr (__const void *__s, int __c, size_t __n)
__THROW __attribute_pure__ __nonnull ((1));
#endif
__END_NAMESPACE_STD
#ifdef __USE_GNU
/* Search in S for C. This is similar to `memchr' but there is no
length limit. */
# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
extern "C++" void *rawmemchr (void *__s, int __c)
__THROW __asm ("rawmemchr") __attribute_pure__ __nonnull ((1));
extern "C++" __const void *rawmemchr (__const void *__s, int __c)
__THROW __asm ("rawmemchr") __attribute_pure__ __nonnull ((1));
# else
extern void *rawmemchr (__const void *__s, int __c)
__THROW __attribute_pure__ __nonnull ((1));
# endif
/* Search N bytes of S for the final occurrence of C. */
# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
extern "C++" void *memrchr (void *__s, int __c, size_t __n)
__THROW __asm ("memrchr") __attribute_pure__ __nonnull ((1));
extern "C++" __const void *memrchr (__const void *__s, int __c, size_t __n)
__THROW __asm ("memrchr") __attribute_pure__ __nonnull ((1));
# else
extern void *memrchr (__const void *__s, int __c, size_t __n)
__THROW __attribute_pure__ __nonnull ((1));
# endif
#endif
@ -164,18 +207,73 @@ extern char *strndup (__const char *__string, size_t __n)
__BEGIN_NAMESPACE_STD
/* Find the first occurrence of C in S. */
#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
extern "C++"
{
extern char *strchr (char *__s, int __c)
__THROW __asm ("strchr") __attribute_pure__ __nonnull ((1));
extern __const char *strchr (__const char *__s, int __c)
__THROW __asm ("strchr") __attribute_pure__ __nonnull ((1));
# ifdef __OPTIMIZE__
__extern_always_inline char *
strchr (char *__s, int __c) __THROW
{
return __builtin_strchr (__s, __c);
}
__extern_always_inline __const char *
strchr (__const char *__s, int __c) __THROW
{
return __builtin_strchr (__s, __c);
}
# endif
}
#else
extern char *strchr (__const char *__s, int __c)
__THROW __attribute_pure__ __nonnull ((1));
#endif
/* Find the last occurrence of C in S. */
#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
extern "C++"
{
extern char *strrchr (char *__s, int __c)
__THROW __asm ("strrchr") __attribute_pure__ __nonnull ((1));
extern __const char *strrchr (__const char *__s, int __c)
__THROW __asm ("strrchr") __attribute_pure__ __nonnull ((1));
# ifdef __OPTIMIZE__
__extern_always_inline char *
strrchr (char *__s, int __c) __THROW
{
return __builtin_strrchr (__s, __c);
}
__extern_always_inline __const char *
strrchr (__const char *__s, int __c) __THROW
{
return __builtin_strrchr (__s, __c);
}
# endif
}
#else
extern char *strrchr (__const char *__s, int __c)
__THROW __attribute_pure__ __nonnull ((1));
#endif
__END_NAMESPACE_STD
#ifdef __USE_GNU
/* This function is similar to `strchr'. But it returns a pointer to
the closing NUL byte in case C is not found in S. */
# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
extern "C++" char *strchrnul (char *__s, int __c)
__THROW __asm ("strchrnul") __attribute_pure__ __nonnull ((1));
extern "C++" __const char *strchrnul (__const char *__s, int __c)
__THROW __asm ("strchrnul") __attribute_pure__ __nonnull ((1));
# else
extern char *strchrnul (__const char *__s, int __c)
__THROW __attribute_pure__ __nonnull ((1));
# endif
#endif
__BEGIN_NAMESPACE_STD
@ -188,11 +286,60 @@ extern size_t strcspn (__const char *__s, __const char *__reject)
extern size_t strspn (__const char *__s, __const char *__accept)
__THROW __attribute_pure__ __nonnull ((1, 2));
/* Find the first occurrence in S of any character in ACCEPT. */
#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
extern "C++"
{
extern char *strpbrk (char *__s, __const char *__accept)
__THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2));
extern __const char *strpbrk (__const char *__s, __const char *__accept)
__THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2));
# ifdef __OPTIMIZE__
__extern_always_inline char *
strpbrk (char *__s, __const char *__accept) __THROW
{
return __builtin_strpbrk (__s, __accept);
}
__extern_always_inline __const char *
strpbrk (__const char *__s, __const char *__accept) __THROW
{
return __builtin_strpbrk (__s, __accept);
}
# endif
}
#else
extern char *strpbrk (__const char *__s, __const char *__accept)
__THROW __attribute_pure__ __nonnull ((1, 2));
#endif
/* Find the first occurrence of NEEDLE in HAYSTACK. */
#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
extern "C++"
{
extern char *strstr (char *__haystack, __const char *__needle)
__THROW __asm ("strstr") __attribute_pure__ __nonnull ((1, 2));
extern __const char *strstr (__const char *__haystack,
__const char *__needle)
__THROW __asm ("strstr") __attribute_pure__ __nonnull ((1, 2));
# ifdef __OPTIMIZE__
__extern_always_inline char *
strstr (char *__haystack, __const char *__needle) __THROW
{
return __builtin_strstr (__haystack, __needle);
}
__extern_always_inline __const char *
strstr (__const char *__haystack, __const char *__needle) __THROW
{
return __builtin_strstr (__haystack, __needle);
}
# endif
}
#else
extern char *strstr (__const char *__haystack, __const char *__needle)
__THROW __attribute_pure__ __nonnull ((1, 2));
#endif
/* Divide S into tokens separated by characters in DELIM. */
@ -214,8 +361,16 @@ extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
#ifdef __USE_GNU
/* Similar to `strstr' but this function ignores the case of both strings. */
# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
extern "C++" char *strcasestr (char *__haystack, __const char *__needle)
__THROW __asm ("strcasestr") __attribute_pure__ __nonnull ((1, 2));
extern "C++" __const char *strcasestr (__const char *__haystack,
__const char *__needle)
__THROW __asm ("strcasestr") __attribute_pure__ __nonnull ((1, 2));
# else
extern char *strcasestr (__const char *__haystack, __const char *__needle)
__THROW __attribute_pure__ __nonnull ((1, 2));
# endif
#endif
#ifdef __USE_GNU
@ -306,12 +461,60 @@ extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
__THROW __attribute_pure__ __nonnull ((1, 2));
/* Find the first occurrence of C in S (same as strchr). */
# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
extern "C++"
{
extern char *index (char *__s, int __c)
__THROW __asm ("index") __attribute_pure__ __nonnull ((1));
extern __const char *index (__const char *__s, int __c)
__THROW __asm ("index") __attribute_pure__ __nonnull ((1));
# if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRINGS_H_PROTO
__extern_always_inline char *
index (char *__s, int __c) __THROW
{
return __builtin_index (__s, __c);
}
__extern_always_inline __const char *
index (__const char *__s, int __c) __THROW
{
return __builtin_index (__s, __c);
}
# endif
}
# else
extern char *index (__const char *__s, int __c)
__THROW __attribute_pure__ __nonnull ((1));
# endif
/* Find the last occurrence of C in S (same as strrchr). */
# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
extern "C++"
{
extern char *rindex (char *__s, int __c)
__THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
extern __const char *rindex (__const char *__s, int __c)
__THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
# if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRINGS_H_PROTO
__extern_always_inline char *
rindex (char *__s, int __c) __THROW
{
return __builtin_rindex (__s, __c);
}
__extern_always_inline __const char *
rindex (__const char *__s, int __c) __THROW
{
return __builtin_rindex (__s, __c);
}
#endif
}
# else
extern char *rindex (__const char *__s, int __c)
__THROW __attribute_pure__ __nonnull ((1));
# endif
/* Return the position of the first bit set in I, or 0 if none are set.
The least-significant bit is position 1, the most-significant 32. */
@ -390,7 +593,14 @@ extern void *memfrob (void *__s, size_t __n) __THROW __nonnull ((1));
declare the function if the `basename' macro is available (defined
in <libgen.h>) which makes the XPG version of this function
available. */
# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
extern "C++" char *basename (char *__filename)
__THROW __asm ("basename") __nonnull ((1));
extern "C++" __const char *basename (__const char *__filename)
__THROW __asm ("basename") __nonnull ((1));
# else
extern char *basename (__const char *__filename) __THROW __nonnull ((1));
# endif
# endif
#endif

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991,92,96,97,99,2000,2001 Free Software Foundation, Inc.
/* Copyright (C) 1991,92,96,97,99,2000,2001,2009 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
@ -28,6 +28,11 @@
# define __need_size_t
# include <stddef.h>
/* Tell the caller that we provide correct C++ prototypes. */
# if defined __cplusplus && __GNUC_PREREQ (4, 4)
# define __CORRECT_ISO_CPP_STRINGS_H_PROTO
# endif
__BEGIN_DECLS
/* Compare N bytes of S1 and S2 (same as memcmp). */
@ -45,10 +50,60 @@ extern void bzero (void *__s, size_t __n) __THROW;
extern int ffs (int __i) __THROW __attribute__ ((const));
/* Find the first occurrence of C in S (same as strchr). */
extern char *index (__const char *__s, int __c) __THROW __attribute_pure__;
# ifdef __CORRECT_ISO_CPP_STRINGS_H_PROTO
extern "C++"
{
extern char *index (char *__s, int __c)
__THROW __asm ("index") __attribute_pure__ __nonnull ((1));
extern __const char *index (__const char *__s, int __c)
__THROW __asm ("index") __attribute_pure__ __nonnull ((1));
# if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRING_H_PROTO
__extern_always_inline char *
index (char *__s, int __c) __THROW
{
return __builtin_index (__s, __c);
}
__extern_always_inline __const char *
index (__const char *__s, int __c) __THROW
{
return __builtin_index (__s, __c);
}
# endif
}
# else
extern char *index (__const char *__s, int __c)
__THROW __attribute_pure__ __nonnull ((1));
# endif
/* Find the last occurrence of C in S (same as strrchr). */
extern char *rindex (__const char *__s, int __c) __THROW __attribute_pure__;
# ifdef __CORRECT_ISO_CPP_STRINGS_H_PROTO
extern "C++"
{
extern char *rindex (char *__s, int __c)
__THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
extern __const char *rindex (__const char *__s, int __c)
__THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
# if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRING_H_PROTO
__extern_always_inline char *
rindex (char *__s, int __c) __THROW
{
return __builtin_rindex (__s, __c);
}
__extern_always_inline __const char *
rindex (__const char *__s, int __c) __THROW
{
return __builtin_rindex (__s, __c);
}
#endif
}
# else
extern char *rindex (__const char *__s, int __c)
__THROW __attribute_pure__ __nonnull ((1));
# endif
/* Compare S1 and S2, ignoring case. */
extern int strcasecmp (__const char *__s1, __const char *__s2)

View File

@ -1,12 +1,48 @@
/* Operating system specific code for generic dynamic loader functions.
Copyright (C) 2009 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, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <stdint.h>
static inline uintptr_t __attribute__ ((always_inline))
_dl_setup_stack_chk_guard (void)
_dl_setup_stack_chk_guard (void *dl_random)
{
uintptr_t ret = 0;
unsigned char *p = (unsigned char *) &ret;
p[sizeof (ret) - 1] = 255;
p[sizeof (ret) - 2] = '\n';
p[0] = 0;
uintptr_t ret;
if (dl_random == NULL)
{
ret = 0;
unsigned char *p = (unsigned char *) &ret;
p[sizeof (ret) - 1] = 255;
p[sizeof (ret) - 2] = '\n';
p[0] = 0;
}
else
memcpy (&ret, dl_random, sizeof (ret));
return ret;
}
static inline uintptr_t __attribute__ ((always_inline))
_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
{
uintptr_t ret;
if (dl_random == NULL)
ret = stack_chk_guard;
else
memcpy (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
return ret;
}

View File

@ -1,5 +1,5 @@
/* Run-time dynamic linker data structures for loaded ELF shared objects.
Copyright (C) 1995-2006, 2007, 2008 Free Software Foundation, Inc.
Copyright (C) 1995-2006, 2007, 2008, 2009 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
@ -731,6 +731,9 @@ weak_extern (_dl_starting_up)
extern int _dl_starting_up_internal attribute_hidden;
#endif
/* Random data provided by the kernel. */
extern void *_dl_random attribute_hidden;
/* OS-dependent function to open the zero-fill device. */
extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */

View File

@ -453,6 +453,10 @@ Test "exp10 (3) == 1000":
ildouble: 8
ldouble: 8
# expm1
Test "expm1 (1) == M_El - 1.0":
ildouble: 1
# gamma
Test "gamma (-0.5) == log(2*sqrt(pi))":
double: 1
@ -1134,6 +1138,9 @@ Function: "exp10":
ildouble: 8
ldouble: 8
Function: "expm1":
ildouble: 1
Function: "gamma":
double: 1
idouble: 1

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1999 Free Software Foundation, Inc.
/* Copyright (C) 1999, 2009 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
@ -25,4 +25,14 @@
/* On x86 the stack grows down. */
#define _STACK_GROWS_DOWN 1
/* Access to the stack pointer. The macros are used in alloca_account
for which they need to act as barriers as well, hence the additional
(unnecessary) parameters. */
#define stackinfo_get_sp() \
({ void *p__; asm volatile ("mov %%esp, %0" : "=r" (p__)); p__; })
#define stackinfo_sub_sp(ptr) \
({ ptrdiff_t d__; \
asm volatile ("sub %%esp, %0" : "=r" (d__) : "0" (ptr)); \
d__; })
#endif /* stackinfo.h */

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2001,2002,2004,2006,2007,2008 Free Software Foundation, Inc.
/* Copyright (C) 2001,2002,2004,2006-2008,2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ryan S. Arnold <rsa@us.ibm.com>
Sean Curry <spcurry@us.ibm.com>
@ -104,12 +104,16 @@ typedef unsigned int si_fpscr_t __attribute__ ((__mode__ (__SI__)));
(__fpscr)=tmp.fpscr; \
tmp.fpscr; })
/* We make sure to zero fp0 after we use it in order to prevent stale data
in an fp register from making a test-case pass erroneously. */
# define _SET_DI_FPSCR(__fpscr) { \
union { double d; di_fpscr_t fpscr; } \
tmp __attribute__ ((__aligned__(8))); \
tmp.fpscr = __fpscr; \
/* Set the entire 64-bit FPSCR. */ \
__asm__ ("lfd%U0 0,%0; mtfsf 255,0,1,0" : : "m" (tmp.d) : "fr0"); \
tmp.d = 0; \
__asm__("lfd%U0 0,%0" : : "m" (tmp.d) : "fr0"); \
}
# define _GET_SI_FPSCR(__fpscr) ({ \
@ -120,6 +124,8 @@ typedef unsigned int si_fpscr_t __attribute__ ((__mode__ (__SI__)));
(__fpscr)=tmp.cw[1]; \
tmp.cw[0]; })
/* We make sure to zero fp0 after we use it in order to prevent stale data
in an fp register from making a test-case pass erroneously. */
# define _SET_SI_FPSCR(__fpscr) { \
union { double d; si_fpscr_t fpscr[2]; } \
tmp __attribute__ ((__aligned__(8))); \
@ -127,6 +133,8 @@ typedef unsigned int si_fpscr_t __attribute__ ((__mode__ (__SI__)));
tmp.fpscr[0] = 0xFFF80000; \
tmp.fpscr[1] = __fpscr; \
__asm__ ("lfd%U0 0,%0; mtfsf 255,0" : : "m" (tmp.d) : "fr0"); \
tmp.d = 0; \
__asm__("lfd%U0 0,%0" : : "m" (tmp.d) : "fr0"); \
}
void prime_special_regs(int which)

View File

@ -1,5 +1,5 @@
/* longjmp for PowerPC.
Copyright (C) 1995-99, 2000, 2003-2005, 2006 Free Software Foundation, Inc.
Copyright (C) 1995-99, 2000, 2003-2006, 2009 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
@ -64,7 +64,7 @@ ENTRY (BP_SYM (__longjmp))
andi. r6,r5,0xf
lwz r0,((JB_VRSAVE)*4)(3)
mtspr VRSAVE,r0
beq+ aligned_restore_vmx
beq+ L(aligned_restore_vmx)
addi r6,r5,16
lvsl v0,0,r5
lvx v1,0,r5
@ -88,7 +88,7 @@ ENTRY (BP_SYM (__longjmp))
lvx v1,0,r5
vperm v31,v31,v1,v0
b L(no_vmx)
aligned_restore_vmx:
L(aligned_restore_vmx):
addi r6,r5,16
lvx v20,0,r5
addi r5,r5,32

View File

@ -1,6 +1,5 @@
/* longjmp for PowerPC64.
Copyright (C) 1995, 1996,1997,1999,2000,2001,2002,2003,2004,2005,2006
Free Software Foundation, Inc.
Copyright (C) 1995, 1996,1997,1999-2006,2009 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
@ -58,7 +57,7 @@ ENTRY (BP_SYM (__longjmp))
andi. r6,r5,0xf
lwz r0,((JB_VRSAVE)*8)(3)
mtspr VRSAVE,r0
beq+ aligned_restore_vmx
beq+ L(aligned_restore_vmx)
addi r6,r5,16
lvsl v0,0,r5
lvx v1,0,r5
@ -82,7 +81,7 @@ ENTRY (BP_SYM (__longjmp))
lvx v1,0,r5
vperm v31,v31,v1,v0
b L(no_vmx)
aligned_restore_vmx:
L(aligned_restore_vmx):
addi r6,r5,16
lvx v20,0,r5
addi r5,r5,32

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1995,1996,1997,2000,2002,2004 Free Software Foundation, Inc.
/* Copyright (C) 1995,1996,1997,2000,2002,2004,2009 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
@ -30,6 +30,7 @@
#define SHM_RDONLY 010000 /* attach read-only else read-write */
#define SHM_RND 020000 /* round attach address to SHMLBA */
#define SHM_REMAP 040000 /* take-over region on attach */
#define SHM_EXEC 0100000 /* execution access */
/* Commands for `shmctl'. */
#define SHM_LOCK 11 /* lock segment (root only) */

View File

@ -1,5 +1,5 @@
/* Operating system specific code for generic dynamic loader functions. Linux.
Copyright (C) 2000-2002,2004-2007,2008 Free Software Foundation, Inc.
Copyright (C) 2000-2002,2004-2008, 2009 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
@ -63,48 +63,78 @@ dl_fatal (const char *str)
} while (0)
static inline uintptr_t __attribute__ ((always_inline))
_dl_setup_stack_chk_guard (void)
_dl_setup_stack_chk_guard (void *dl_random)
{
uintptr_t ret;
#ifdef ENABLE_STACKGUARD_RANDOMIZE
int fd = __open ("/dev/urandom", O_RDONLY);
if (fd >= 0)
#ifndef __ASSUME_AT_RANDOM
if (__builtin_expect (dl_random == NULL, 0))
{
ssize_t reslen = __read (fd, &ret, sizeof (ret));
__close (fd);
if (reslen == (ssize_t) sizeof (ret))
return ret;
}
#endif
ret = 0;
unsigned char *p = (unsigned char *) &ret;
p[sizeof (ret) - 1] = 255;
p[sizeof (ret) - 2] = '\n';
# ifdef ENABLE_STACKGUARD_RANDOMIZE
int fd = __open ("/dev/urandom", O_RDONLY);
if (fd >= 0)
{
ssize_t reslen = __read (fd, &ret, sizeof (ret));
__close (fd);
if (reslen == (ssize_t) sizeof (ret))
return ret;
}
# endif
ret = 0;
unsigned char *p = (unsigned char *) &ret;
p[sizeof (ret) - 1] = 255;
p[sizeof (ret) - 2] = '\n';
#ifdef HP_TIMING_NOW
hp_timing_t hpt;
HP_TIMING_NOW (hpt);
hpt = (hpt & 0xffff) << 8;
ret ^= hpt;
hp_timing_t hpt;
HP_TIMING_NOW (hpt);
hpt = (hpt & 0xffff) << 8;
ret ^= hpt;
#endif
uintptr_t stk;
/* Avoid GCC being too smart. */
asm ("" : "=r" (stk) : "r" (p));
stk &= 0x7ffff0;
uintptr_t stk;
/* Avoid GCC being too smart. */
asm ("" : "=r" (stk) : "r" (p));
stk &= 0x7ffff0;
#if __BYTE_ORDER == __LITTLE_ENDIAN
stk <<= (__WORDSIZE - 23);
stk <<= (__WORDSIZE - 23);
#elif __WORDSIZE == 64
stk <<= 31;
stk <<= 31;
#endif
ret ^= stk;
/* Avoid GCC being too smart. */
p = (unsigned char *) &errno;
asm ("" : "=r" (stk) : "r" (p));
stk &= 0x7fff00;
ret ^= stk;
/* Avoid GCC being too smart. */
p = (unsigned char *) &errno;
asm ("" : "=r" (stk) : "r" (p));
stk &= 0x7fff00;
#if __BYTE_ORDER == __LITTLE_ENDIAN
stk <<= (__WORDSIZE - 29);
stk <<= (__WORDSIZE - 29);
#else
stk >>= 8;
stk >>= 8;
#endif
ret ^= stk;
ret ^= stk;
}
else
#endif
/* We need in the moment only 8 bytes on 32-bit platforms and 16
bytes on 64-bit platforms. Therefore we can use the data
directly and not use the kernel-provided data to seed a PRNG. */
memcpy (&ret, dl_random, sizeof (ret));
return ret;
}
static inline uintptr_t __attribute__ ((always_inline))
_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
{
uintptr_t ret;
#ifndef __ASSUME_AT_RANDOM
if (dl_random == NULL)
{
ret = stack_chk_guard;
# ifndef HP_TIMING_NONAVAIL
hp_timing_t now;
HP_TIMING_NOW (now);
ret ^= now;
# endif
}
else
#endif
memcpy (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
return ret;
}

View File

@ -76,8 +76,10 @@ static const struct intel_02_cache_info
{
{ 0x06, _SC_LEVEL1_ICACHE_SIZE, 8192, 4, 32 },
{ 0x08, _SC_LEVEL1_ICACHE_SIZE, 16384, 4, 32 },
{ 0x09, _SC_LEVEL1_ICACHE_SIZE, 32768, 4, 32 },
{ 0x0a, _SC_LEVEL1_DCACHE_SIZE, 8192, 2, 32 },
{ 0x0c, _SC_LEVEL1_DCACHE_SIZE, 16384, 4, 32 },
{ 0x0d, _SC_LEVEL1_DCACHE_SIZE, 16384, 4, 64 },
{ 0x22, _SC_LEVEL3_CACHE_SIZE, 524288, 4, 64 },
{ 0x23, _SC_LEVEL3_CACHE_SIZE, 1048576, 8, 64 },
{ 0x25, _SC_LEVEL3_CACHE_SIZE, 2097152, 8, 64 },
@ -122,6 +124,18 @@ static const struct intel_02_cache_info
{ 0x85, _SC_LEVEL2_CACHE_SIZE, 2097152, 8, 32 },
{ 0x86, _SC_LEVEL2_CACHE_SIZE, 524288, 4, 64 },
{ 0x87, _SC_LEVEL2_CACHE_SIZE, 1048576, 8, 64 },
{ 0xd0, _SC_LEVEL3_CACHE_SIZE, 524288, 4, 64 },
{ 0xd1, _SC_LEVEL3_CACHE_SIZE, 1048576, 4, 64 },
{ 0xd2, _SC_LEVEL3_CACHE_SIZE, 2097152, 4, 64 },
{ 0xd6, _SC_LEVEL3_CACHE_SIZE, 1048576, 8, 64 },
{ 0xd7, _SC_LEVEL3_CACHE_SIZE, 2097152, 8, 64 },
{ 0xd8, _SC_LEVEL3_CACHE_SIZE, 4194304, 8, 64 },
{ 0xdc, _SC_LEVEL3_CACHE_SIZE, 2097152, 12, 64 },
{ 0xdd, _SC_LEVEL3_CACHE_SIZE, 4194304, 12, 64 },
{ 0xde, _SC_LEVEL3_CACHE_SIZE, 8388608, 12, 64 },
{ 0xe3, _SC_LEVEL3_CACHE_SIZE, 2097152, 16, 64 },
{ 0xe3, _SC_LEVEL3_CACHE_SIZE, 4194304, 16, 64 },
{ 0xe4, _SC_LEVEL3_CACHE_SIZE, 8388608, 16, 64 },
};
#define nintel_02_known (sizeof (intel_02_known) / sizeof (intel_02_known[0]))

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2000, 2002, 2005 Free Software Foundation, Inc.
/* Copyright (C) 2000, 2002, 2005, 2009 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
@ -30,6 +30,7 @@
#define SHM_RDONLY 010000 /* attach read-only else read-write */
#define SHM_RND 020000 /* round attach address to SHMLBA */
#define SHM_REMAP 040000 /* take-over region on attach */
#define SHM_EXEC 0100000 /* execution access */
/* Commands for `shmctl'. */
#define SHM_LOCK 11 /* lock segment (root only) */

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1995, 1996, 1997, 2000, 2002, 2004
/* Copyright (C) 1995, 1996, 1997, 2000, 2002, 2004, 2009
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@ -28,9 +28,10 @@
#define SHM_W 0200 /* or S_IWUGO from <linux/stat.h> */
/* Flags for `shmat'. */
#define SHM_RDONLY 010000 /* attach read-only else read-write */
#define SHM_RND 020000 /* round attach address to SHMLBA */
#define SHM_REMAP 040000 /* take-over region on attach */
#define SHM_RDONLY 010000 /* attach read-only else read-write */
#define SHM_RND 020000 /* round attach address to SHMLBA */
#define SHM_REMAP 040000 /* take-over region on attach */
#define SHM_EXEC 0100000 /* execution access */
/* Commands for `shmctl'. */
#define SHM_LOCK 11 /* lock segment (root only) */

View File

@ -1,5 +1,5 @@
/* Jump to a new context powerpc32 common.
Copyright (C) 2005, 2006, 2008 Free Software Foundation, Inc.
Copyright (C) 2005, 2006, 2008, 2009 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
@ -18,13 +18,13 @@
02110-1301 USA. */
/* This is the common implementation of setcontext for powerpc32.
It not complete in itself should be included in to a framework that
It not complete in itself should be included in to a framework that
defines:
__CONTEXT_FUNC_NAME
and if appropriate:
__CONTEXT_ENABLE_FPRS
__CONTEXT_ENABLE_VRS
Any archecture that implements the Vector unit is assumed to also
Any archecture that implements the Vector unit is assumed to also
implement the floating unit. */
/* Stack frame offsets. */
@ -202,7 +202,7 @@ ENTRY(__CONTEXT_FUNC_NAME)
lfd fp0,_UC_FREGS+(0*8)(r31)
# ifdef _ARCH_PWR6
/* Use the extended four-operand version of the mtfsf insn. */
mtfsf 0xff,fp0,1,0
mtfsf 0xff,fp31,1,0
# else
/* Availability of DFP indicates a 64-bit FPSCR. */
andi. r6,r7,PPC_FEATURE_HAS_DFP
@ -304,4 +304,3 @@ ENTRY(__CONTEXT_FUNC_NAME)
/* NOTREACHED */
END (__CONTEXT_FUNC_NAME)

View File

@ -1,5 +1,5 @@
/* Save current context and jump to a new context.
Copyright (C) 2005, 2006, 2008 Free Software Foundation, Inc.
Copyright (C) 2005, 2006, 2008, 2009 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
@ -18,13 +18,13 @@
02110-1301 USA. */
/* This is the common implementation of setcontext for powerpc32.
It not complete in itself should be included in to a framework that
It not complete in itself should be included in to a framework that
defines:
__CONTEXT_FUNC_NAME
and if appropriate:
__CONTEXT_ENABLE_FPRS
__CONTEXT_ENABLE_VRS
Any archecture that implements the Vector unit is assumed to also
Any archecture that implements the Vector unit is assumed to also
implement the floating unit. */
/* Stack frame offsets. */
@ -51,7 +51,7 @@ ENTRY(__CONTEXT_FUNC_NAME)
stw r0,_UC_GREGS+(PT_R0*4)(r3)
mflr r0
stw r2,_UC_GREGS+(PT_R2*4)(r3)
stw r4,_UC_GREGS+(PT_R4*4)(r3)
stw r4,_UC_GREGS+(PT_R4*4)(r3)
/* Set the callers LR_SAVE, and the ucontext LR and NIP to the callers
return address. */
stw r0,_UC_GREGS+(PT_LNK*4)(r3)
@ -85,7 +85,7 @@ ENTRY(__CONTEXT_FUNC_NAME)
stw r29,_UC_GREGS+(PT_R29*4)(r3)
stw r30,_UC_GREGS+(PT_R30*4)(r3)
stw r31,_UC_GREGS+(PT_R31*4)(r3)
/* Save the value of R1. We had to push the stack before we
had the address of uc_reg_space. So compute the address of
the callers stack pointer and save it as R1. */
@ -174,10 +174,10 @@ ENTRY(__CONTEXT_FUNC_NAME)
la r10,(_UC_VREGS)(r3)
la r9,(_UC_VREGS+16)(r3)
/* beq L(no_vec)*/
beq 2f
/* address of the combined VSCR/VSAVE quadword. */
/* address of the combined VSCR/VSAVE quadword. */
la r8,(_UC_VREGS+512)(r3)
/* Save the vector registers */
@ -194,7 +194,7 @@ ENTRY(__CONTEXT_FUNC_NAME)
stvx v3,0,r9
addi r10,r10,32
addi r9,r9,32
stvx v0,0,r8
stvx v4,0,r10
@ -266,7 +266,7 @@ ENTRY(__CONTEXT_FUNC_NAME)
stvx v30,0,r10
stvx v31,0,r9
stw r0,0(r8)
2: /*L(no_vec):*/
# endif /* __CONTEXT_ENABLE_VRS */
#endif /* __CONTEXT_ENABLE_FPRS */
@ -428,7 +428,7 @@ ENTRY(__CONTEXT_FUNC_NAME)
lfd fp0,_UC_FREGS+(0*8)(r31)
# ifdef _ARCH_PWR6
/* Use the extended four-operand version of the mtfsf insn. */
mtfsf 0xff,fp0,1,0
mtfsf 0xff,fp31,1,0
# else
/* Availability of DFP indicates a 64-bit FPSCR. */
andi. r6,r7,PPC_FEATURE_HAS_DFP
@ -514,13 +514,13 @@ ENTRY(__CONTEXT_FUNC_NAME)
lwz r31,_UC_GREGS+(PT_R31*4)(r31)
bctr
3:/*L(error_exit):*/
lwz r0,_FRAME_LR_SAVE+16(r1)
addi r1,r1,16
mtlr r0
blr
4:/*L(do_sigret):*/
addi r1,r4,-0xd0
li r0,SYS_ify(rt_sigreturn)
@ -528,4 +528,3 @@ ENTRY(__CONTEXT_FUNC_NAME)
/* NOTREACHED */
END(__CONTEXT_FUNC_NAME)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
/* Copyright (C) 2001, 2002, 2004, 2009 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
@ -31,6 +31,7 @@
#define SHM_RDONLY 010000 /* attach read-only else read-write */
#define SHM_RND 020000 /* round attach address to SHMLBA */
#define SHM_REMAP 040000 /* take-over region on attach */
#define SHM_EXEC 0100000 /* execution access */
/* Commands for `shmctl'. */
#define SHM_LOCK 11 /* lock segment (root only) */

View File

@ -5,3 +5,8 @@ endif
ifeq ($(subdir),stdlib)
gen-as-const-headers += ucontext_i.sym
endif
ifeq ($(subdir),math)
# The libm.so link can't find __fpscr_values
libm.so-no-z-defs = yes
endif

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1995,1996,1997,2000,2002,2004,2006 Free Software Foundation, Inc.
/* Copyright (C) 1995,1996,1997,2000,2002,2004,2006,2009 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
@ -30,6 +30,7 @@
#define SHM_RDONLY 010000 /* attach read-only else read-write */
#define SHM_RND 020000 /* round attach address to SHMLBA */
#define SHM_REMAP 040000 /* take-over region on attach */
#define SHM_EXEC 0100000 /* execution access */
/* Commands for `shmctl'. */
#define SHM_LOCK 11 /* lock segment (root only) */

View File

@ -1,5 +1,5 @@
/* Copyright (C) 1992,1993,1995,1996,1997,1998,1999,2000,2002,2003,2004,
2005,2006 Free Software Foundation, Inc.
2005,2006,2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
Changed by Kaz Kojima, <kkojima@rr.iij4u.or.jp>.
@ -339,7 +339,7 @@
asm volatile (SYSCALL_INST_STR##nr SYSCALL_INST_PAD \
: "=z" (resultvar) \
: "r" (r3) ASMFMT_##nr \
: "memory"); \
: "memory", "t"); \
\
(int) resultvar; })
@ -353,7 +353,7 @@
asm volatile (SYSCALL_INST_STR##nr SYSCALL_INST_PAD \
: "=z" (resultvar) \
: "r" (r3) ASMFMT_##nr \
: "memory"); \
: "memory", "t"); \
\
(int) resultvar; })

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1995, 1996, 1997, 2000, 2002, 2004
/* Copyright (C) 1995, 1996, 1997, 2000, 2002, 2004, 2009
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@ -32,6 +32,7 @@
#define SHM_RDONLY 010000 /* attach read-only else read-write */
#define SHM_RND 020000 /* round attach address to SHMLBA */
#define SHM_REMAP 040000 /* take-over region on attach */
#define SHM_EXEC 0100000 /* execution access */
/* Commands for `shmctl'. */
#define SHM_LOCK 11 /* lock segment (root only) */

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2005, 2006, 2008 Free Software Foundation, Inc.
/* Copyright (C) 2005, 2006, 2008, 2009 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,7 +98,7 @@ extern int inotify_add_watch (int __fd, const char *__name, uint32_t __mask)
__THROW;
/* Remove the watch specified by WD from the inotify instance FD. */
extern int inotify_rm_watch (int __fd, uint32_t __wd) __THROW;
extern int inotify_rm_watch (int __fd, int __wd) __THROW;
__END_DECLS

View File

@ -1,5 +1,5 @@
/* Test for proper error/errno handling in clone.
Copyright (C) 2006 Free Software Foundation, Inc.
Copyright (C) 2006, 2009 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
@ -36,9 +36,9 @@ do_test (void)
int result;
#ifdef __ia64__
result = __clone2(child_fn, NULL, 0, 0, NULL, NULL, NULL);
result = __clone2 (child_fn, NULL, 0, 0, NULL, NULL, NULL);
#else
result = clone(child_fn, NULL, (int) NULL, NULL);
result = clone (child_fn, NULL, 0, NULL);
#endif
if (errno != EINVAL || result != -1)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1995, 1996, 1997, 2000, 2002, 2004
/* Copyright (C) 1995, 1996, 1997, 2000, 2002, 2004, 2009
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@ -31,6 +31,7 @@
#define SHM_RDONLY 010000 /* attach read-only else read-write */
#define SHM_RND 020000 /* round attach address to SHMLBA */
#define SHM_REMAP 040000 /* take-over region on attach */
#define SHM_EXEC 0100000 /* execution access */
/* Commands for `shmctl'. */
#define SHM_LOCK 11 /* lock segment (root only) */

View File

@ -34,8 +34,10 @@ static const struct intel_02_cache_info
{
{ 0x06, _SC_LEVEL1_ICACHE_SIZE, 8192, 4, 32 },
{ 0x08, _SC_LEVEL1_ICACHE_SIZE, 16384, 4, 32 },
{ 0x09, _SC_LEVEL1_ICACHE_SIZE, 32768, 4, 32 },
{ 0x0a, _SC_LEVEL1_DCACHE_SIZE, 8192, 2, 32 },
{ 0x0c, _SC_LEVEL1_DCACHE_SIZE, 16384, 4, 32 },
{ 0x0d, _SC_LEVEL1_DCACHE_SIZE, 16384, 4, 64 },
{ 0x22, _SC_LEVEL3_CACHE_SIZE, 524288, 4, 64 },
{ 0x23, _SC_LEVEL3_CACHE_SIZE, 1048576, 8, 64 },
{ 0x25, _SC_LEVEL3_CACHE_SIZE, 2097152, 8, 64 },
@ -80,6 +82,18 @@ static const struct intel_02_cache_info
{ 0x85, _SC_LEVEL2_CACHE_SIZE, 2097152, 8, 32 },
{ 0x86, _SC_LEVEL2_CACHE_SIZE, 524288, 4, 64 },
{ 0x87, _SC_LEVEL2_CACHE_SIZE, 1048576, 8, 64 },
{ 0xd0, _SC_LEVEL3_CACHE_SIZE, 524288, 4, 64 },
{ 0xd1, _SC_LEVEL3_CACHE_SIZE, 1048576, 4, 64 },
{ 0xd2, _SC_LEVEL3_CACHE_SIZE, 2097152, 4, 64 },
{ 0xd6, _SC_LEVEL3_CACHE_SIZE, 1048576, 8, 64 },
{ 0xd7, _SC_LEVEL3_CACHE_SIZE, 2097152, 8, 64 },
{ 0xd8, _SC_LEVEL3_CACHE_SIZE, 4194304, 8, 64 },
{ 0xdc, _SC_LEVEL3_CACHE_SIZE, 2097152, 12, 64 },
{ 0xdd, _SC_LEVEL3_CACHE_SIZE, 4194304, 12, 64 },
{ 0xde, _SC_LEVEL3_CACHE_SIZE, 8388608, 12, 64 },
{ 0xe3, _SC_LEVEL3_CACHE_SIZE, 2097152, 16, 64 },
{ 0xe3, _SC_LEVEL3_CACHE_SIZE, 4194304, 16, 64 },
{ 0xe4, _SC_LEVEL3_CACHE_SIZE, 8388608, 16, 64 },
};
#define nintel_02_known (sizeof (intel_02_known) / sizeof (intel_02_known [0]))

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001, 2009 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
@ -25,4 +25,14 @@
/* On x86_64 the stack grows down. */
#define _STACK_GROWS_DOWN 1
/* Access to the stack pointer. The macros are used in alloca_account
for which they need to act as barriers as well, hence the additional
(unnecessary) parameters. */
#define stackinfo_get_sp() \
({ void *p__; asm volatile ("mov %%rsp, %0" : "=r" (p__)); p__; })
#define stackinfo_sub_sp(ptr) \
({ ptrdiff_t d__; \
asm volatile ("sub %%rsp, %0" : "=r" (d__) : "0" (ptr)); \
d__; })
#endif /* stackinfo.h */

View File

@ -51,6 +51,11 @@
# define __need_wint_t
# include <stddef.h>
/* Tell the caller that we provide correct C++ prototypes. */
#if defined __cplusplus && __GNUC_PREREQ (4, 4)
# define __CORRECT_ISO_CPP_WCHAR_H_PROTO
#endif
/* We try to get wint_t from <stddef.h>, but not all GCC versions define it
there. So define it ourselves if it remains undefined. */
# ifndef _WINT_T
@ -210,11 +215,25 @@ extern wchar_t *wcsdup (__const wchar_t *__s) __THROW __attribute_malloc__;
__BEGIN_NAMESPACE_STD
/* Find the first occurrence of WC in WCS. */
#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc)
__THROW __asm ("wcschr") __attribute_pure__;
extern "C++" __const wchar_t *wcschr (__const wchar_t *__wcs, wchar_t __wc)
__THROW __asm ("wcschr") __attribute_pure__;
#else
extern wchar_t *wcschr (__const wchar_t *__wcs, wchar_t __wc)
__THROW __attribute_pure__;
#endif
/* Find the last occurrence of WC in WCS. */
#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc)
__THROW __asm ("wcsrchr") __attribute_pure__;
extern "C++" __const wchar_t *wcsrchr (__const wchar_t *__wcs, wchar_t __wc)
__THROW __asm ("wcsrchr") __attribute_pure__;
#else
extern wchar_t *wcsrchr (__const wchar_t *__wcs, wchar_t __wc)
__THROW __attribute_pure__;
#endif
__END_NAMESPACE_STD
#ifdef __USE_GNU
@ -234,11 +253,27 @@ extern size_t wcscspn (__const wchar_t *__wcs, __const wchar_t *__reject)
extern size_t wcsspn (__const wchar_t *__wcs, __const wchar_t *__accept)
__THROW __attribute_pure__;
/* Find the first occurrence in WCS of any character in ACCEPT. */
#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, __const wchar_t *__accept)
__THROW __asm ("wcspbrk") __attribute_pure__;
extern "C++" __const wchar_t *wcspbrk (__const wchar_t *__wcs,
__const wchar_t *__accept)
__THROW __asm ("wcspbrk") __attribute_pure__;
#else
extern wchar_t *wcspbrk (__const wchar_t *__wcs, __const wchar_t *__accept)
__THROW __attribute_pure__;
#endif
/* Find the first occurrence of NEEDLE in HAYSTACK. */
#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
extern "C++" wchar_t *wcsstr (wchar_t *__haystack, __const wchar_t *__needle)
__THROW __asm ("wcsstr") __attribute_pure__;
extern "C++" __const wchar_t *wcsstr (__const wchar_t *__haystack,
__const wchar_t *__needle)
__THROW __asm ("wcsstr") __attribute_pure__;
#else
extern wchar_t *wcsstr (__const wchar_t *__haystack, __const wchar_t *__needle)
__THROW __attribute_pure__;
#endif
/* Divide WCS into tokens separated by characters in DELIM. */
extern wchar_t *wcstok (wchar_t *__restrict __s,
@ -251,8 +286,16 @@ __END_NAMESPACE_STD
#ifdef __USE_XOPEN
/* Another name for `wcsstr' from XPG4. */
# ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
extern "C++" wchar_t *wcswcs (wchar_t *__haystack, __const wchar_t *__needle)
__THROW __asm ("wcswcs") __attribute_pure__;
extern "C++" __const wchar_t *wcswcs (__const wchar_t *__haystack,
__const wchar_t *__needle)
__THROW __asm ("wcswcs") __attribute_pure__;
# else
extern wchar_t *wcswcs (__const wchar_t *__haystack, __const wchar_t *__needle)
__THROW __attribute_pure__;
# endif
#endif
#ifdef __USE_GNU
@ -264,8 +307,16 @@ extern size_t wcsnlen (__const wchar_t *__s, size_t __maxlen)
__BEGIN_NAMESPACE_STD
/* Search N wide characters of S for C. */
#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n)
__THROW __asm ("wmemchr") __attribute_pure__;
extern "C++" __const wchar_t *wmemchr (__const wchar_t *__s, wchar_t __c,
size_t __n)
__THROW __asm ("wmemchr") __attribute_pure__;
#else
extern wchar_t *wmemchr (__const wchar_t *__s, wchar_t __c, size_t __n)
__THROW __attribute_pure__;
#endif
/* Compare N wide characters of S1 and S2. */
extern int wmemcmp (__const wchar_t *__restrict __s1,