diff options
author | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2011-02-04 22:29:33 +0000 |
---|---|---|
committer | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2011-02-04 22:29:33 +0000 |
commit | 4bfa24eaa3c71ad1ddaaa18994be05316ab58958 (patch) | |
tree | 26e9902b6405f1efaefe0bc14cfc98f373565a98 | |
parent | b8df40b734d3df9979fd578556fa1d70f2ada743 (diff) | |
download | eglibc2-4bfa24eaa3c71ad1ddaaa18994be05316ab58958.tar.gz |
Merge changes between r12643 and r12752 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@12753 7b3dc134-2b1b-0410-93df-9e9f96275f8d
35 files changed, 928 insertions, 485 deletions
diff --git a/libc/ChangeLog b/libc/ChangeLog index d3ae8bc94..6b6e6ac20 100644 --- a/libc/ChangeLog +++ b/libc/ChangeLog @@ -1,3 +1,56 @@ +2011-02-02 H.J. Lu <hongjiu.lu@intel.com> + + [BZ #12460] + * config.make.in (config-cflags-novzeroupper): Define. + * configure.in: Substitute libc_cv_cc_novzeroupper. + * elf/Makefile (AVX-CFLAGS): Define. + (CFLAGS-tst-audit4.c): Replace -mavx with $(AVX-CFLAGS). + (CFLAGS-tst-auditmod4a.c): Likewise. + (CFLAGS-tst-auditmod4b.c): Likewise. + (CFLAGS-tst-auditmod6b.c): Likewise. + (CFLAGS-tst-auditmod6c.c): Likewise. + (CFLAGS-tst-auditmod7b.c): Likewise. + * sysdeps/i386/configure.in: Check -mno-vzeroupper. + +2011-02-02 Ulrich Drepper <drepper@gmail.com> + + * elf/dl-runtime.c (_dl_call_pltexit): Pass correct address of the + function to the callback. + Patch partly by Jiri Olsa <jolsa@redhat.com>. + +2011-02-02 Andreas Schwab <schwab@redhat.com> + + * shadow/sgetspent.c: Check return value of __sgetspent_r instead + of errno. + +2011-01-19 Ulrich Drepper <drepper@gmail.com> + + [BZ #11724] + * elf/dl-deps.c (_dl_map_object_deps): Rewrite sorting determining order + of constructors. + * elf/dl-fini.c (_dl_sort_fini): Rewrite sorting determining order + of destructors. + (_dl_fini): Don't call _dl_sort_fini if there is only one object. + + [BZ #11724] + * elf/Makefile: Add rules to build and run new test. + * elf/tst-initorder.c: New file. + * elf/tst-initorder.exp: New file. + * elf/tst-initordera1.c: New file. + * elf/tst-initordera2.c: New file. + * elf/tst-initordera3.c: New file. + * elf/tst-initordera4.c: New file. + * elf/tst-initorderb1.c: New file. + * elf/tst-initorderb2.c: New file. + * elf/tst-order-a1.c: New file. + * elf/tst-order-a2.c: New file. + * elf/tst-order-a3.c: New file. + * elf/tst-order-a4.c: New file. + * elf/tst-order-b1.c: New file. + * elf/tst-order-b2.c: New file. + * elf/tst-order-main.c: New file. + New test case by George Gensure <werkt0@gmail.com>. + 2010-10-01 Andreas Schwab <schwab@redhat.com> * sysdeps/posix/getaddrinfo.c (gaih_inet): Don't discard result of @@ -1,10 +1,16 @@ -GNU C Library NEWS -- history of user-visible changes. 2011-1-15 +GNU C Library NEWS -- history of user-visible changes. 2011-2-2 Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc. See the end for copying conditions. Please send GNU C library bug reports via <http://sources.redhat.com/bugzilla/> using `glibc' in the "product" field. +Version 2.14 + +* The following bugs are resolved with this release: + + 11724, 12460 + Version 2.13 * The following bugs are resolved with this release: diff --git a/libc/config.make.in b/libc/config.make.in index 9080bccff..a0ea8135a 100644 --- a/libc/config.make.in +++ b/libc/config.make.in @@ -36,6 +36,7 @@ asflags-cpu = @libc_cv_cc_submachine@ config-cflags-sse4 = @libc_cv_cc_sse4@ config-cflags-avx = @libc_cv_cc_avx@ +config-cflags-novzeroupper = @libc_cv_cc_novzeroupper@ config-asflags-i686 = @libc_cv_as_i686@ defines = @DEFINES@ diff --git a/libc/configure b/libc/configure index 23b2bacd0..02770496d 100755 --- a/libc/configure +++ b/libc/configure @@ -658,6 +658,7 @@ elf ldd_rewrite_script use_ldconfig libc_cv_as_i686 +libc_cv_cc_novzeroupper libc_cv_cc_avx libc_cv_cc_sse4 libc_cv_cpp_asm_debuginfo @@ -8812,6 +8813,7 @@ fi + if test $elf = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ELF 1 diff --git a/libc/configure.in b/libc/configure.in index d58a6e380..d0ff587fa 100644 --- a/libc/configure.in +++ b/libc/configure.in @@ -2264,6 +2264,7 @@ dnl sysdeps/CPU/configure.in checks set this via arch-specific asm tests AC_SUBST(libc_cv_cpp_asm_debuginfo) AC_SUBST(libc_cv_cc_sse4) AC_SUBST(libc_cv_cc_avx) +AC_SUBST(libc_cv_cc_novzeroupper) AC_SUBST(libc_cv_as_i686) AC_SUBST(use_ldconfig) diff --git a/libc/elf/Makefile b/libc/elf/Makefile index 279ed193a..e97f565d9 100644 --- a/libc/elf/Makefile +++ b/libc/elf/Makefile @@ -118,7 +118,10 @@ distribute := rtld-Rules \ ifuncmain7.c ifuncmain7pic.c ifuncmain7picstatic.c \ ifuncmain7pie.c ifuncmain7static.c \ tst-unique1.c tst-unique1mod1.c tst-unique1mod2.c \ - tst-unique2.c tst-unique2mod1.c tst-unique2mod2.c + tst-unique2.c tst-unique2mod1.c tst-unique2mod2.c \ + tst-initordera1.c tst-initordera2.c tst-initorderb1.c \ + tst-initorderb2.c tst-initordera3.c tst-initordera4.c \ + tst-initorder.c CFLAGS-dl-runtime.c = -fexceptions -fasynchronous-unwind-tables CFLAGS-dl-lookup.c = -fexceptions -fasynchronous-unwind-tables @@ -199,7 +202,8 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \ unload3 unload4 unload5 unload6 unload7 tst-global1 order2 \ tst-audit1 tst-audit2 \ tst-stackguard1 tst-addr1 tst-thrlock \ - tst-unique1 tst-unique2 + tst-unique1 tst-unique2 \ + tst-initorder # reldep9 test-srcs = tst-pathopt tests-execstack-yes = tst-execstack tst-execstack-needed tst-execstack-prog @@ -251,7 +255,10 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \ unload7mod1 unload7mod2 \ order2mod1 order2mod2 order2mod3 order2mod4 \ tst-unique1mod1 tst-unique1mod2 \ - tst-unique2mod1 tst-unique2mod2 + tst-unique2mod1 tst-unique2mod2 \ + tst-initordera1 tst-initorderb1 \ + tst-initordera2 tst-initorderb2 \ + tst-initordera3 tst-initordera4 ifeq (yes,$(have-initfini-array)) modules-names += tst-array2dep tst-array5dep endif @@ -534,6 +541,11 @@ $(objpfx)unload6mod2.so: $(libdl) $(objpfx)unload6mod3.so: $(libdl) $(objpfx)unload7mod1.so: $(libdl) $(objpfx)unload7mod2.so: $(objpfx)unload7mod1.so +$(objpfx)tst-initordera2.so: $(objpfx)tst-initordera1.so +$(objpfx)tst-initorderb2.so: $(objpfx)tst-initorderb1.so $(objpfx)tst-initordera2.so +$(objpfx)tst-initordera3.so: $(objpfx)tst-initorderb2.so $(objpfx)tst-initorderb1.so +$(objpfx)tst-initordera4.so: $(objpfx)tst-initordera3.so +$(objpfx)tst-initorder: $(objpfx)tst-initordera4.so $(objpfx)tst-initordera1.so $(objpfx)tst-initorderb2.so LDFLAGS-tst-tlsmod5.so = -nostdlib LDFLAGS-tst-tlsmod6.so = -nostdlib @@ -1178,11 +1190,21 @@ $(objpfx)tst-unique1.out: $(objpfx)tst-unique1mod1.so \ $(objpfx)tst-unique2: $(libdl) $(objpfx)tst-unique2mod1.so $(objpfx)tst-unique2.out: $(objpfx)tst-unique2mod2.so +$(objpfx)tst-initorder.out: $(objpfx)tst-initorder + $(elf-objpfx)${rtld-installed-name} \ + --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \ + $< > $@ + cmp $@ tst-initorder.exp > /dev/null + ifeq (yes,$(config-cflags-avx)) -CFLAGS-tst-audit4.c += -mavx -CFLAGS-tst-auditmod4a.c += -mavx -CFLAGS-tst-auditmod4b.c += -mavx -CFLAGS-tst-auditmod6b.c += -mavx -CFLAGS-tst-auditmod6c.c += -mavx -CFLAGS-tst-auditmod7b.c += -mavx +AVX-CFLAGS=-mavx +ifeq (yes,$(config-cflags-novzeroupper)) +AVX-CFLAGS+=-mno-vzeroupper +endif +CFLAGS-tst-audit4.c += $(AVX-CFLAGS) +CFLAGS-tst-auditmod4a.c += $(AVX-CFLAGS) +CFLAGS-tst-auditmod4b.c += $(AVX-CFLAGS) +CFLAGS-tst-auditmod6b.c += $(AVX-CFLAGS) +CFLAGS-tst-auditmod6c.c += $(AVX-CFLAGS) +CFLAGS-tst-auditmod7b.c += $(AVX-CFLAGS) endif diff --git a/libc/elf/dl-deps.c b/libc/elf/dl-deps.c index e4dea1aa1..524d76ee1 100644 --- a/libc/elf/dl-deps.c +++ b/libc/elf/dl-deps.c @@ -1,5 +1,5 @@ /* Load the dependencies of a mapped object. - Copyright (C) 1996-2003, 2004, 2005, 2006, 2007, 2010 + Copyright (C) 1996-2003, 2004, 2005, 2006, 2007, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -591,7 +591,7 @@ Filters not supported with LD_TRACE_PRELINKING")); /* Need to allocate new array of relocation dependencies. */ struct link_map_reldeps *l_reldeps; l_reldeps = malloc (sizeof (*l_reldeps) - + map->l_reldepsmax + + map->l_reldepsmax * sizeof (struct link_map *)); if (l_reldeps == NULL) /* Bad luck, keep the reldeps duplicated between @@ -616,48 +616,60 @@ Filters not supported with LD_TRACE_PRELINKING")); /* Now determine the order in which the initialization has to happen. */ memcpy (l_initfini, map->l_searchlist.r_list, nlist * sizeof (struct link_map *)); + /* We can skip looking for the binary itself which is at the front - of the search list. Look through the list backward so that circular - dependencies are not changing the order. */ - for (i = 1; i < nlist; ++i) + of the search list. */ + assert (nlist > 1); + i = 1; + bool seen[nlist]; + memset (seen, false, nlist * sizeof (seen[0])); + while (1) { - struct link_map *l = map->l_searchlist.r_list[i]; - unsigned int j; - unsigned int k; - - /* Find the place in the initfini list where the map is currently - located. */ - for (j = 1; l_initfini[j] != l; ++j) - ; - - /* Find all object for which the current one is a dependency and - move the found object (if necessary) in front. */ - for (k = j + 1; k < nlist; ++k) + /* Keep track of which object we looked at this round. */ + seen[i] = true; + struct link_map *thisp = l_initfini[i]; + + /* Find the last object in the list for which the current one is + a dependency and move the current object behind the object + with the dependency. */ + unsigned int k = nlist - 1; + while (k > i) { - struct link_map **runp; - - runp = l_initfini[k]->l_initfini; + struct link_map **runp = l_initfini[k]->l_initfini; if (runp != NULL) - { - while (*runp != NULL) - if (__builtin_expect (*runp++ == l, 0)) - { - struct link_map *here = l_initfini[k]; - - /* Move it now. */ - memmove (&l_initfini[j] + 1, &l_initfini[j], - (k - j) * sizeof (struct link_map *)); - l_initfini[j] = here; + /* Look through the dependencies of the object. */ + while (*runp != NULL) + if (__builtin_expect (*runp++ == thisp, 0)) + { + /* Move the current object to the back past the last + object with it as the dependency. */ + memmove (&l_initfini[i], &l_initfini[i + 1], + (k - i) * sizeof (l_initfini[0])); + l_initfini[k] = thisp; + + if (seen[i + 1]) + { + ++i; + goto next_clear; + } + + memmove (&seen[i], &seen[i + 1], (k - i) * sizeof (seen[0])); + seen[k] = true; + + goto next; + } + + --k; + } - /* Don't insert further matches before the last - entry moved to the front. */ - ++j; + if (++i == nlist) + break; + next_clear: + memset (&seen[i], false, (nlist - i) * sizeof (seen[0])); - break; - } - } - } + next:; } + /* Terminate the list of dependencies. */ l_initfini[nlist] = NULL; atomic_write_barrier (); diff --git a/libc/elf/dl-fini.c b/libc/elf/dl-fini.c index dfd55c9da..c8c9a52d6 100644 --- a/libc/elf/dl-fini.c +++ b/libc/elf/dl-fini.c @@ -1,5 +1,6 @@ /* Call the termination functions of loaded shared objects. - Copyright (C) 1995,96,1998-2002,2004-2005,2009 Free Software Foundation, Inc. + Copyright (C) 1995,96,1998-2002,2004-2005,2009,2011 + 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,86 +33,84 @@ internal_function _dl_sort_fini (struct link_map *l, struct link_map **maps, size_t nmaps, char *used, Lmid_t ns) { - if (ns == LM_ID_BASE) - /* The main executable always comes first. */ - l = l->l_next; - - for (; l != NULL; l = l->l_next) - /* Do not handle ld.so in secondary namespaces and object which - are not removed. */ - if (l == l->l_real && l->l_idx != -1) - { - /* Find the place in the 'maps' array. */ - unsigned int j; - for (j = ns == LM_ID_BASE ? 1 : 0; maps[j] != l; ++j) - assert (j < nmaps); - - /* Find all object for which the current one is a dependency - and move the found object (if necessary) in front. */ - for (unsigned int k = j + 1; k < nmaps; ++k) - { - struct link_map **runp = maps[k]->l_initfini; - if (runp != NULL) - { - while (*runp != NULL) - if (*runp == l) + /* We can skip looking for the binary itself which is at the front + of the search list for the main namespace. */ + assert (nmaps > 1); + unsigned int i = ns == LM_ID_BASE; + bool seen[nmaps]; + memset (seen, false, nmaps * sizeof (seen[0])); + while (1) + { + /* Keep track of which object we looked at this round. */ + seen[i] = true; + struct link_map *thisp = maps[i]; + + /* Do not handle ld.so in secondary namespaces and object which + are not removed. */ + if (thisp != thisp->l_real || thisp->l_idx == -1) + goto skip; + + /* Find the last object in the list for which the current one is + a dependency and move the current object behind the object + with the dependency. */ + unsigned int k = nmaps - 1; + while (k > i) + { + struct link_map **runp = maps[k]->l_initfini; + if (runp != NULL) + /* Look through the dependencies of the object. */ + while (*runp != NULL) + if (__builtin_expect (*runp++ == thisp, 0)) + { + move: + /* Move the current object to the back past the last + object with it as the dependency. */ + memmove (&maps[i], &maps[i + 1], + (k - i) * sizeof (maps[0])); + maps[k] = thisp; + + if (used != NULL) { - struct link_map *here = maps[k]; + char here_used = used[i]; + memmove (&used[i], &used[i + 1], + (k - i) * sizeof (used[0])); + used[k] = here_used; + } - /* Move it now. */ - memmove (&maps[j] + 1, - &maps[j], (k - j) * sizeof (struct link_map *)); - maps[j] = here; + if (seen[i + 1]) + { + ++i; + goto next_clear; + } - if (used != NULL) - { - char here_used = used[k]; + memmove (&seen[i], &seen[i + 1], (k - i) * sizeof (seen[0])); + seen[k] = true; - memmove (&used[j] + 1, - &used[j], (k - j) * sizeof (char)); - used[j] = here_used; - } + goto next; + } - ++j; + if (__builtin_expect (maps[k]->l_reldeps != NULL, 0)) + { + unsigned int m = maps[k]->l_reldeps->act; + struct link_map **relmaps = &maps[k]->l_reldeps->list[0]; - break; - } - else - ++runp; - } - - if (__builtin_expect (maps[k]->l_reldeps != NULL, 0)) - { - unsigned int m = maps[k]->l_reldeps->act; - struct link_map **relmaps = &maps[k]->l_reldeps->list[0]; - - while (m-- > 0) - { - if (relmaps[m] == l) - { - struct link_map *here = maps[k]; - - /* Move it now. */ - memmove (&maps[j] + 1, - &maps[j], - (k - j) * sizeof (struct link_map *)); - maps[j] = here; - - if (used != NULL) - { - char here_used = used[k]; - - memmove (&used[j] + 1, - &used[j], (k - j) * sizeof (char)); - used[j] = here_used; - } - - break; - } - } - } - } - } + /* Look through the relocation dependencies of the object. */ + while (m-- > 0) + if (__builtin_expect (relmaps[m] == thisp, 0)) + goto move; + } + + --k; + } + + skip: + if (++i == nmaps) + break; + next_clear: + memset (&seen[i], false, (nmaps - i) * sizeof (seen[0])); + + next:; + } } @@ -196,7 +195,7 @@ _dl_fini (void) assert (ns == LM_ID_BASE || i == nloaded || i == nloaded - 1); nmaps = i; - if (nmaps != 0) + if (nmaps > 1) /* Now we have to do the sorting. */ _dl_sort_fini (GL(dl_ns)[ns]._ns_loaded, maps, nmaps, NULL, ns); diff --git a/libc/elf/dl-runtime.c b/libc/elf/dl-runtime.c index 6847edafc..ae2d05c77 100644 --- a/libc/elf/dl-runtime.c +++ b/libc/elf/dl-runtime.c @@ -1,5 +1,5 @@ /* On-demand PLT fixup for shared objects. - Copyright (C) 1995-2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1995-2009, 2010, 2011 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 @@ -446,6 +446,7 @@ _dl_call_pltexit (struct link_map *l, ElfW(Word) reloc_arg, /* Set up the sym parameter. */ ElfW(Sym) sym = *defsym; + sym.st_value = DL_FIXUP_VALUE_ADDR (reloc_result->addr); /* Get the symbol name. */ const char *strtab = (const void *) D_PTR (reloc_result->bound, diff --git a/libc/elf/tst-initorder.c b/libc/elf/tst-initorder.c new file mode 100644 index 000000000..963838210 --- /dev/null +++ b/libc/elf/tst-initorder.c @@ -0,0 +1,7 @@ +#include <stdio.h> + +int +main( int argc, char *argv[] ) +{ + printf( "main\n" ); +} diff --git a/libc/elf/tst-initorder.exp b/libc/elf/tst-initorder.exp new file mode 100644 index 000000000..8718f6576 --- /dev/null +++ b/libc/elf/tst-initorder.exp @@ -0,0 +1,13 @@ +start_a1 +start_a2 +start_b1 +start_b2 +start_a3 +start_a4 +main +finish_a4 +finish_a3 +finish_b2 +finish_b1 +finish_a2 +finish_a1 diff --git a/libc/elf/tst-initordera1.c b/libc/elf/tst-initordera1.c new file mode 100644 index 000000000..f16125714 --- /dev/null +++ b/libc/elf/tst-initordera1.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +extern void start_a1( void ) __attribute__((constructor)); +extern void finish_a1( void ) __attribute__((destructor)); + +void +start_a1( void ) +{ + printf( "start_a1\n" ); +} + +void +finish_a1( void ) +{ + printf( "finish_a1\n" ); +} diff --git a/libc/elf/tst-initordera2.c b/libc/elf/tst-initordera2.c new file mode 100644 index 000000000..a5a9b42ff --- /dev/null +++ b/libc/elf/tst-initordera2.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +extern void start_a2( void ) __attribute__((constructor)); +extern void finish_a2( void ) __attribute__((destructor)); + +void +start_a2( void ) +{ + printf( "start_a2\n" ); +} + +void +finish_a2( void ) +{ + printf( "finish_a2\n" ); +} diff --git a/libc/elf/tst-initordera3.c b/libc/elf/tst-initordera3.c new file mode 100644 index 000000000..1c7f496e9 --- /dev/null +++ b/libc/elf/tst-initordera3.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +extern void start_a3( void ) __attribute__((constructor)); +extern void finish_a3( void ) __attribute__((destructor)); + +void +start_a3( void ) +{ + printf( "start_a3\n" ); +} + +void +finish_a3( void ) +{ + printf( "finish_a3\n" ); +} diff --git a/libc/elf/tst-initordera4.c b/libc/elf/tst-initordera4.c new file mode 100644 index 000000000..70b9f5e39 --- /dev/null +++ b/libc/elf/tst-initordera4.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +extern void start_a4( void ) __attribute__((constructor)); +extern void finish_a4( void ) __attribute__((destructor)); + +void +start_a4( void ) +{ + printf( "start_a4\n" ); +} + +void +finish_a4( void ) +{ + printf( "finish_a4\n" ); +} diff --git a/libc/elf/tst-initorderb1.c b/libc/elf/tst-initorderb1.c new file mode 100644 index 000000000..993ea3fe3 --- /dev/null +++ b/libc/elf/tst-initorderb1.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +extern void start_b1( void ) __attribute__((constructor)); +extern void finish_b1( void ) __attribute__((destructor)); + +void +start_b1( void ) +{ + printf( "start_b1\n" ); +} + +void +finish_b1( void ) +{ + printf( "finish_b1\n" ); +} diff --git a/libc/elf/tst-initorderb2.c b/libc/elf/tst-initorderb2.c new file mode 100644 index 000000000..3334dda0a --- /dev/null +++ b/libc/elf/tst-initorderb2.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +extern void start_b2( void ) __attribute__((constructor)); +extern void finish_b2( void ) __attribute__((destructor)); + +void +start_b2( void ) +{ + printf( "start_b2\n" ); +} + +void +finish_b2( void ) +{ + printf( "finish_b2\n" ); +} diff --git a/libc/elf/tst-order-a1.c b/libc/elf/tst-order-a1.c new file mode 100644 index 000000000..f16125714 --- /dev/null +++ b/libc/elf/tst-order-a1.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +extern void start_a1( void ) __attribute__((constructor)); +extern void finish_a1( void ) __attribute__((destructor)); + +void +start_a1( void ) +{ + printf( "start_a1\n" ); +} + +void +finish_a1( void ) +{ + printf( "finish_a1\n" ); +} diff --git a/libc/elf/tst-order-a2.c b/libc/elf/tst-order-a2.c new file mode 100644 index 000000000..a5a9b42ff --- /dev/null +++ b/libc/elf/tst-order-a2.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +extern void start_a2( void ) __attribute__((constructor)); +extern void finish_a2( void ) __attribute__((destructor)); + +void +start_a2( void ) +{ + printf( "start_a2\n" ); +} + +void +finish_a2( void ) +{ + printf( "finish_a2\n" ); +} diff --git a/libc/elf/tst-order-a3.c b/libc/elf/tst-order-a3.c new file mode 100644 index 000000000..1c7f496e9 --- /dev/null +++ b/libc/elf/tst-order-a3.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +extern void start_a3( void ) __attribute__((constructor)); +extern void finish_a3( void ) __attribute__((destructor)); + +void +start_a3( void ) +{ + printf( "start_a3\n" ); +} + +void +finish_a3( void ) +{ + printf( "finish_a3\n" ); +} diff --git a/libc/elf/tst-order-a4.c b/libc/elf/tst-order-a4.c new file mode 100644 index 000000000..70b9f5e39 --- /dev/null +++ b/libc/elf/tst-order-a4.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +extern void start_a4( void ) __attribute__((constructor)); +extern void finish_a4( void ) __attribute__((destructor)); + +void +start_a4( void ) +{ + printf( "start_a4\n" ); +} + +void +finish_a4( void ) +{ + printf( "finish_a4\n" ); +} diff --git a/libc/elf/tst-order-b1.c b/libc/elf/tst-order-b1.c new file mode 100644 index 000000000..993ea3fe3 --- /dev/null +++ b/libc/elf/tst-order-b1.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +extern void start_b1( void ) __attribute__((constructor)); +extern void finish_b1( void ) __attribute__((destructor)); + +void +start_b1( void ) +{ + printf( "start_b1\n" ); +} + +void +finish_b1( void ) +{ + printf( "finish_b1\n" ); +} diff --git a/libc/elf/tst-order-b2.c b/libc/elf/tst-order-b2.c new file mode 100644 index 000000000..3334dda0a --- /dev/null +++ b/libc/elf/tst-order-b2.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +extern void start_b2( void ) __attribute__((constructor)); +extern void finish_b2( void ) __attribute__((destructor)); + +void +start_b2( void ) +{ + printf( "start_b2\n" ); +} + +void +finish_b2( void ) +{ + printf( "finish_b2\n" ); +} diff --git a/libc/elf/tst-order-main.c b/libc/elf/tst-order-main.c new file mode 100644 index 000000000..80f4f6be1 --- /dev/null +++ b/libc/elf/tst-order-main.c @@ -0,0 +1,10 @@ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> + +int +main( int argc, char *argv[] ) +{ + printf( "main\n" ); + exit(EXIT_SUCCESS); +} diff --git a/libc/shadow/sgetspent.c b/libc/shadow/sgetspent.c index ec7f384fa..f3dce53ea 100644 --- a/libc/shadow/sgetspent.c +++ b/libc/shadow/sgetspent.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2011 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 @@ -49,8 +49,8 @@ sgetspent (const char *string) } while (buffer != NULL - && __sgetspent_r (string, &resbuf, buffer, buffer_size, &result) != 0 - && errno == ERANGE) + && (__sgetspent_r (string, &resbuf, buffer, buffer_size, &result) + == ERANGE)) { char *new_buf; buffer_size += BUFLEN_SPWD; diff --git a/libc/sysdeps/i386/configure b/libc/sysdeps/i386/configure index 21225cd9c..adffe3f9a 100755 --- a/libc/sysdeps/i386/configure +++ b/libc/sysdeps/i386/configure @@ -1,3 +1,102 @@ + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + # Factoring default headers for most tests. ac_includes_default="\ #include <stdio.h> @@ -34,14 +133,249 @@ ac_includes_default="\ # include <unistd.h> #endif" + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval "test \"\${$3+set}\"" = set; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_compile # This file is generated from configure.in by Autoconf. DO NOT EDIT! # Local configure fragment for sysdeps/i386. -{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then +if test "${ac_cv_path_GREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then @@ -52,7 +386,7 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue @@ -72,7 +406,7 @@ case `"$ac_path_GREP" --version 2>&1` in $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` + as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" @@ -87,26 +421,24 @@ esac $ac_path_GREP_found && break 3 done done -done + done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then - { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ $as_echo "$as_me:$LINENO: checking for egrep" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then +if test "${ac_cv_path_EGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 @@ -120,7 +452,7 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do + for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue @@ -140,7 +472,7 @@ case `"$ac_path_EGREP" --version 2>&1` in $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` + as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" @@ -155,12 +487,10 @@ esac $ac_path_EGREP_found && break 3 done done -done + done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then - { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP @@ -168,21 +498,17 @@ fi fi fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" -{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then +if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <stdarg.h> @@ -197,48 +523,23 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stdc=no + ac_cv_header_stdc=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : + $EGREP "memchr" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -248,18 +549,14 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : + $EGREP "free" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -269,14 +566,10 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ctype.h> #include <stdlib.h> @@ -303,118 +596,33 @@ main () return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - $as_echo "$as_me: program exited with status $ac_status" >&5 -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : -( exit $ac_status ) -ac_cv_header_stdc=no +else + ac_cv_header_stdc=no fi -rm -rf conftest.dSYM -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF +$as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h -do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF @@ -424,146 +632,18 @@ fi done -if test "${ac_cv_header_cpuid_h+set}" = set; then - { $as_echo "$as_me:$LINENO: checking for cpuid.h" >&5 -$as_echo_n "checking for cpuid.h... " >&6; } -if test "${ac_cv_header_cpuid_h+set}" = set; then - $as_echo_n "(cached) " >&6 -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_cpuid_h" >&5 -$as_echo "$ac_cv_header_cpuid_h" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking cpuid.h usability" >&5 -$as_echo_n "checking cpuid.h usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <cpuid.h> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } +ac_fn_c_check_header_mongrel "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "$ac_includes_default" +if test "x$ac_cv_header_cpuid_h" = x""yes; then : -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking cpuid.h presence" >&5 -$as_echo_n "checking cpuid.h presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <cpuid.h> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no + as_fn_error $? "gcc must provide the <cpuid.h> header" "$LINENO" 5 fi -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: cpuid.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: cpuid.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: cpuid.h: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: cpuid.h: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: cpuid.h: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: cpuid.h: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: cpuid.h: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: cpuid.h: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: cpuid.h: in the future, the compiler will take precedence" >&2;} - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for cpuid.h" >&5 -$as_echo_n "checking for cpuid.h... " >&6; } -if test "${ac_cv_header_cpuid_h+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_cv_header_cpuid_h=$ac_header_preproc -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_cpuid_h" >&5 -$as_echo "$ac_cv_header_cpuid_h" >&6; } -fi -if test "x$ac_cv_header_cpuid_h" = x""yes; then - : -else - { { $as_echo "$as_me:$LINENO: error: gcc must provide the <cpuid.h> header" >&5 -$as_echo "$as_me: error: gcc must provide the <cpuid.h> header" >&2;} - { (exit 1); exit 1; }; } -fi - - - -{ $as_echo "$as_me:$LINENO: checking if -g produces usable source locations for assembler-with-cpp" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if -g produces usable source locations for assembler-with-cpp" >&5 $as_echo_n "checking if -g produces usable source locations for assembler-with-cpp... " >&6; } -if test "${libc_cv_cpp_asm_debuginfo+set}" = set; then +if test "${libc_cv_cpp_asm_debuginfo+set}" = set; then : $as_echo_n "(cached) " >&6 else cat > conftest.S <<EOF @@ -584,19 +664,19 @@ foo: nop EOF if { ac_try='${CC-cc} $CPPFLAGS $ASFLAGS -g -c conftest.S 1>&5' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && { + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } && { ac_pattern='conftest\.S' { ac_try='readelf --debug-dump=line conftest.o | grep $ac_pattern 1>&5' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } }; then libc_cv_cpp_asm_debuginfo=yes else @@ -604,80 +684,93 @@ else fi rm -f conftest* fi -{ $as_echo "$as_me:$LINENO: result: $libc_cv_cpp_asm_debuginfo" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cpp_asm_debuginfo" >&5 $as_echo "$libc_cv_cpp_asm_debuginfo" >&6; } if test $libc_cv_cpp_asm_debuginfo = yes; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_CPP_ASM_DEBUGINFO 1 -_ACEOF + $as_echo "#define HAVE_CPP_ASM_DEBUGINFO 1" >>confdefs.h fi -{ $as_echo "$as_me:$LINENO: checking for SSE4 support" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSE4 support" >&5 $as_echo_n "checking for SSE4 support... " >&6; } -if test "${libc_cv_cc_sse4+set}" = set; then +if test "${libc_cv_cc_sse4+set}" = set; then : $as_echo_n "(cached) " >&6 else if { ac_try='${CC-cc} -msse4 -xc /dev/null -S -o /dev/null' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then libc_cv_cc_sse4=yes else libc_cv_cc_sse4=no fi fi -{ $as_echo "$as_me:$LINENO: result: $libc_cv_cc_sse4" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_sse4" >&5 $as_echo "$libc_cv_cc_sse4" >&6; } if test $libc_cv_cc_sse4 = yes; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_SSE4_SUPPORT 1 -_ACEOF + $as_echo "#define HAVE_SSE4_SUPPORT 1" >>confdefs.h fi -{ $as_echo "$as_me:$LINENO: checking for assembler -mtune=i686 support" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler -mtune=i686 support" >&5 $as_echo_n "checking for assembler -mtune=i686 support... " >&6; } -if test "${libc_cv_as_i686+set}" = set; then +if test "${libc_cv_as_i686+set}" = set; then : $as_echo_n "(cached) " >&6 else if { ac_try='${CC-cc} -Wa,-mtune=i686 -xc /dev/null -S -o /dev/null' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then libc_cv_as_i686=yes else libc_cv_as_i686=no fi fi -{ $as_echo "$as_me:$LINENO: result: $libc_cv_as_i686" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_as_i686" >&5 $as_echo "$libc_cv_as_i686" >&6; } -{ $as_echo "$as_me:$LINENO: checking for AVX support" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX support" >&5 $as_echo_n "checking for AVX support... " >&6; } -if test "${libc_cv_cc_avx+set}" = set; then +if test "${libc_cv_cc_avx+set}" = set; then : $as_echo_n "(cached) " >&6 else if { ac_try='${CC-cc} -mavx -xc /dev/null -S -o /dev/null' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then libc_cv_cc_avx=yes else libc_cv_cc_avx=no fi fi -{ $as_echo "$as_me:$LINENO: result: $libc_cv_cc_avx" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_avx" >&5 $as_echo "$libc_cv_cc_avx" >&6; } if test $libc_cv_cc_avx = yes; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_AVX_SUPPORT 1 -_ACEOF + $as_echo "#define HAVE_AVX_SUPPORT 1" >>confdefs.h fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -mno-vzeroupper support" >&5 +$as_echo_n "checking for -mno-vzeroupper support... " >&6; } +if test "${libc_cv_cc_novzeroupper+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if { ac_try='${CC-cc} -mno-vzeroupper -xc /dev/null -S -o /dev/null' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + libc_cv_cc_novzeroupper=yes +else + libc_cv_cc_novzeroupper=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_novzeroupper" >&5 +$as_echo "$libc_cv_cc_novzeroupper" >&6; } diff --git a/libc/sysdeps/i386/configure.in b/libc/sysdeps/i386/configure.in index d8dd648f8..67fd1d7df 100644 --- a/libc/sysdeps/i386/configure.in +++ b/libc/sysdeps/i386/configure.in @@ -66,3 +66,11 @@ fi]) if test $libc_cv_cc_avx = yes; then AC_DEFINE(HAVE_AVX_SUPPORT) fi + +dnl Check if -mno-vzeroupper works. +AC_CACHE_CHECK(for -mno-vzeroupper support, libc_cv_cc_novzeroupper, [dnl +if AC_TRY_COMMAND([${CC-cc} -mno-vzeroupper -xc /dev/null -S -o /dev/null]); then + libc_cv_cc_novzeroupper=yes +else + libc_cv_cc_novzeroupper=no +fi]) diff --git a/libc/version.h b/libc/version.h index 7cc6162c1..b6f9fcc4b 100644 --- a/libc/version.h +++ b/libc/version.h @@ -1,4 +1,4 @@ /* This file just defines the current version number of libc. */ -#define RELEASE "stable" -#define VERSION "2.13" +#define RELEASE "development" +#define VERSION "2.13.90" diff --git a/ports/ChangeLog b/ports/ChangeLog index 361838721..e42182fda 100644 --- a/ports/ChangeLog +++ b/ports/ChangeLog @@ -1,23 +1,3 @@ -2010-09-03 Luis Machado <luisgpm@br.ibm.com> - - * sysdeps/powerpc/dl-procinfo.c: New file. - * sysdeps/powerpc/dl-procinfo.h: New file. - * sysdeps/powerpc/powerpc32/405/memcmp.S: New file. - * sysdeps/powerpc/powerpc32/405/memcpy.S: New file. - * sysdeps/powerpc/powerpc32/405/memset.S: New file. - * sysdeps/powerpc/powerpc32/405/strcmp.S: New file. - * sysdeps/powerpc/powerpc32/405/strcpy.S: New file. - * sysdeps/powerpc/powerpc32/405/strlen.S: New file. - * sysdeps/powerpc/powerpc32/405/strncmp.S: New file. - * sysdeps/powerpc/powerpc32/440/Implies: New file. - * sysdeps/powerpc/powerpc32/464/Implies: New file. - * sysdeps/powerpc/powerpc32/476/Implies: New file. - * sysdeps/powerpc/powerpc32/Makefile: New file. - * sysdeps/unix/sysv/linux/powerpc/powerpc32/405/Implies: New file. - * sysdeps/unix/sysv/linux/powerpc/powerpc32/440/Implies: New file. - * sysdeps/unix/sysv/linux/powerpc/powerpc32/464/Implies: New file. - * sysdeps/unix/sysv/linux/powerpc/powerpc32/476/Implies: New file. - 2010-04-14 Joseph Myers <joseph@codesourcery.com> * libc-abis: Remove. diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm index 8951801aa..8ea3b9e34 100644 --- a/ports/ChangeLog.arm +++ b/ports/ChangeLog.arm @@ -1,3 +1,8 @@ +2011-01-25 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/arm/bits/mman.h (MADV_HUGEPAGE, + MADV_NOHUGEPAGE): Define. + 2011-01-07 Joseph Myers <joseph@codesourcery.com> * sysdeps/arm/eabi/fclrexcpt.c (__feclearexcept): Return zero if diff --git a/ports/ChangeLog.mips b/ports/ChangeLog.mips index 0d933f390..0c2285f13 100644 --- a/ports/ChangeLog.mips +++ b/ports/ChangeLog.mips @@ -1,3 +1,13 @@ +2011-01-25 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/mips/bits/mman.h (MADV_HUGEPAGE, + MADV_NOHUGEPAGE): Define. + +2011-01-25 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/mips/bits/socket.h (AF_CAIF, AF_ALG, + PF_CAIF, PF_ALG): Define. + 2010-12-30 Joseph Myers <joseph@codesourcery.com> * sysdeps/mips/init-first.c: Don't call __libc_global_ctors if diff --git a/ports/ChangeLog.powerpc b/ports/ChangeLog.powerpc index d8989b0b3..36a88d69d 100644 --- a/ports/ChangeLog.powerpc +++ b/ports/ChangeLog.powerpc @@ -1,3 +1,23 @@ +2010-09-03 Luis Machado <luisgpm@br.ibm.com> + + * sysdeps/powerpc/dl-procinfo.c: New file. + * sysdeps/powerpc/dl-procinfo.h: New file. + * sysdeps/powerpc/powerpc32/405/memcmp.S: New file. + * sysdeps/powerpc/powerpc32/405/memcpy.S: New file. + * sysdeps/powerpc/powerpc32/405/memset.S: New file. + * sysdeps/powerpc/powerpc32/405/strcmp.S: New file. + * sysdeps/powerpc/powerpc32/405/strcpy.S: New file. + * sysdeps/powerpc/powerpc32/405/strlen.S: New file. + * sysdeps/powerpc/powerpc32/405/strncmp.S: New file. + * sysdeps/powerpc/powerpc32/440/Implies: New file. + * sysdeps/powerpc/powerpc32/464/Implies: New file. + * sysdeps/powerpc/powerpc32/476/Implies: New file. + * sysdeps/powerpc/powerpc32/Makefile: New file. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/405/Implies: New file. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/440/Implies: New file. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/464/Implies: New file. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/476/Implies: New file. + 2010-10-11 Joseph Myers <joseph@codesourcery.com> * sysdeps/powerpc/nofpu/feupdateenv.c (feupdateenv): Add diff --git a/ports/sysdeps/unix/sysv/linux/arm/bits/mman.h b/ports/sysdeps/unix/sysv/linux/arm/bits/mman.h index 0240aed8a..058c7a0fb 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/bits/mman.h +++ b/ports/sysdeps/unix/sysv/linux/arm/bits/mman.h @@ -1,5 +1,5 @@ /* Definitions for POSIX memory map interface. Linux/ARM version. - Copyright (C) 1997, 2000, 2003, 2005, 2006, 2009 + Copyright (C) 1997, 2000, 2003, 2005, 2006, 2009, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -94,6 +94,8 @@ # define MADV_DOFORK 11 /* Do inherit across fork. */ # define MADV_MERGEABLE 12 /* KSM may merge identical pages. */ # 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_HWPOISON 100 /* Poison a page for testing. */ #endif diff --git a/ports/sysdeps/unix/sysv/linux/mips/bits/mman.h b/ports/sysdeps/unix/sysv/linux/mips/bits/mman.h index f639e0464..097cb8f15 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/bits/mman.h +++ b/ports/sysdeps/unix/sysv/linux/mips/bits/mman.h @@ -1,5 +1,5 @@ /* Definitions for POSIX memory map interface. Linux/MIPS version. - Copyright (C) 1997, 2000, 2003, 2004, 2005, 2006, 2009 + Copyright (C) 1997, 2000, 2003, 2004, 2005, 2006, 2009, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -96,6 +96,8 @@ # define MADV_DOFORK 11 /* Do inherit across fork. */ # define MADV_MERGEABLE 12 /* KSM may merge identical pages. */ # 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_HWPOISON 100 /* Poison a page for testing. */ #endif diff --git a/ports/sysdeps/unix/sysv/linux/mips/bits/socket.h b/ports/sysdeps/unix/sysv/linux/mips/bits/socket.h index 9f90216c9..91af8b2f8 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/bits/socket.h +++ b/ports/sysdeps/unix/sysv/linux/mips/bits/socket.h @@ -1,6 +1,6 @@ /* System-specific socket constants and types. Linux/MIPS version. Copyright (C) 1991, 92, 1994-1999, 2000, 2001, 2004, 2005, 2006, 2007, 2008, - 2009, 2010 Free Software Foundation, Inc. + 2009, 2010, 2011 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 @@ -109,7 +109,9 @@ enum __socket_type #define PF_ISDN 34 /* mISDN sockets. */ #define PF_PHONET 35 /* Phonet sockets. */ #define PF_IEEE802154 36 /* IEEE 802.15.4 sockets. */ -#define PF_MAX 37 /* For now.. */ +#define PF_CAIF 37 /* CAIF sockets. */ +#define PF_ALG 38 /* Algorithm sockets. */ +#define PF_MAX 39 /* For now.. */ /* Address families. */ #define AF_UNSPEC PF_UNSPEC @@ -150,6 +152,8 @@ enum __socket_type #define AF_ISDN PF_ISDN #define AF_PHONET PF_PHONET #define AF_IEEE802154 PF_IEEE802154 +#define AF_CAIF PF_CAIF +#define AF_ALG PF_ALG #define AF_MAX PF_MAX /* Socket level values. Others are defined in the appropriate headers. |