![](https://seccdn.libravatar.org/avatar/e2145bc5cf53dda95c308a3c75e8fef3.jpg?s=120&d=mm&r=g)
Hello community, here is the log from the commit of package glibc for openSUSE:Factory checked in at Wed Apr 28 22:36:10 CEST 2010. -------- --- glibc/glibc.changes 2010-02-14 15:34:47.000000000 +0100 +++ glibc/glibc.changes 2010-04-26 22:10:59.000000000 +0200 @@ -1,0 +2,68 @@ +Mon Apr 26 22:09:40 CEST 2010 - pbaudis@suse.cz + +- Remove stale resolv.dynamic.diff patch file + +------------------------------------------------------------------- +Thu Apr 22 08:30:50 CEST 2010 - meissner@suse.de + +- for powerpc32 build a generic library and also a power4 library + to allow older 32bit powerpc to work. bnc#596271 + +------------------------------------------------------------------- +Tue Apr 20 13:15:19 CEST 2010 - pbaudis@suse.cz + +- Consider private IPv4 addresses as global-scope in gai.conf [bnc#597616] + +------------------------------------------------------------------- +Wed Mar 24 13:04:12 CET 2010 - pbaudis@suse.cz + +- Fix get_nprocs() large CPU count handling [bnc#590665] + +------------------------------------------------------------------- +Tue Mar 23 15:09:09 CET 2010 - pbaudis@suse.cz + +- Fix interference of STB_GNU_UNIQUE and prelink [bnc#586979] +- Make time() use VDSO on PPC64 [bnc#590216] +- Make pthread_cond_timedway() use VDSO on PPC64 [bnc#590517] + +------------------------------------------------------------------- +Thu Mar 18 14:45:34 CET 2010 - pbaudis@suse.cz + +- Add PreReq for cat to glibc-locale [bnc#588997] + +------------------------------------------------------------------- +Thu Mar 18 14:29:42 CET 2010 - pbaudis@suse.cz + +- Fix /etc/resolv.conf change detection for multi-threaded applications + (by Sebastian Kienzl) + +------------------------------------------------------------------- +Fri Mar 5 12:59:44 CET 2010 - pbaudis@suse.cz + +- Fix spurious mapping from lowercase sharp s to uppercase sharp S + which is less standard and causes problems for ISO encodings [bnc#541773] + +------------------------------------------------------------------- +Mon Mar 1 18:55:37 CET 2010 - pbaudis@suse.cz + +- Fix spurious overflow messages on some R_X86_64_PC32 relocations, + patch by Richard Guenther [bnc#583019] + +------------------------------------------------------------------- +Wed Feb 24 11:53:41 CET 2010 - pbaudis@suse.cz + +- Fix assertion failures within valloc(), patch by Michael Matz + [bnc#581391] + +------------------------------------------------------------------- +Wed Feb 17 12:02:24 CET 2010 - pbaudis@suse.cz + +- S/390: Disable two UTF conversion instructions due to the hardware + mishandling some error conditions in the input stream [bnc#579871] + +------------------------------------------------------------------- +Mon Feb 15 22:34:29 CET 2010 - pbaudis@suse.cz + +- Further fix previous power5 fix + +------------------------------------------------------------------- @@ -4,0 +73,29 @@ + +------------------------------------------------------------------- +Thu Feb 11 21:36:32 CET 2010 - pbaudis@suse.cz + +- Fix another upgrade problem on power5 and older - correctly remove + the old optimized libraries; found out by matz@suse.de [bnc#563978] + +------------------------------------------------------------------- +Fri Feb 5 21:07:54 CET 2010 - pbaudis@suse.cz + +- Final fix for memchr() overflow on IA64 provided by upstream + [bnc#567516] + +------------------------------------------------------------------- +Thu Jan 28 17:11:59 CET 2010 - pbaudis@suse.cz + +- Fix another memchr() overflow on IA64; another known one still + remains a mystery [bnc#567516] + +------------------------------------------------------------------- +Wed Jan 27 02:49:46 CET 2010 - pbaudis@suse.cz + +- Remove now-obsolete powerpc-cpu addon usage [bnc#572819] +- Fix statfs64() on IA64 in 32-bit mode ia32el [bnc#534828] + +------------------------------------------------------------------- +Tue Jan 26 03:33:38 CET 2010 - pbaudis@suse.cz + +- Fix upgrade from previous distributions on power5 and older [bnc#563978] calling whatdependson for head-i586 Old: ---- glibc-2.5-ppc-llrintl.diff minmem powerpc-cpu.tar.bz2 resolv.dynamic.diff New: ---- glibc-dl-x86-64-pc32.diff glibc-gai-private4.diff glibc-getnprocs.diff glibc-memchr-ia64.diff glibc-ppc64-vdso-time.diff glibc-resolv-reload.diff glibc-sap-captialsharps.diff glibc-statfs64-ia64.diff glibc-utf-s390.diff glibc-valloc-assert.diff ld-prelink-unique.diff nptl-ppc64-vdso-timedwait.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ glibc.spec ++++++ --- /var/tmp/diff_new_pack.HSbOO6/_old 2010-04-28 22:34:41.000000000 +0200 +++ /var/tmp/diff_new_pack.HSbOO6/_new 2010-04-28 22:34:41.000000000 +0200 @@ -28,8 +28,15 @@ %define enable_stackguard_randomization 1 %ifarch ppc ppc64 %define optimize_power 1 + %ifarch ppc + %define powerpc_optimize_base power3 + %define powerpc_optimize_tune power3 + %define powerpc_optimize_cpu_power4 1 + %else %define powerpc_optimize_base power4 %define powerpc_optimize_tune power5 + %define powerpc_optimize_cpu_power4 0 + %endif # We are not building Power CPU specific optimizations for openSUSE. %define powerpc_optimize_cpu_power6 0 %define powerpc_optimize_cpu_power7 0 @@ -37,11 +44,12 @@ %else %define optimize_power 0 %define powerpc_optimize_base 0 + %define powerpc_optimize_cpu_power4 0 %define powerpc_optimize_cpu_power6 0 %define powerpc_optimize_cpu_power7 0 %define powerpc_optimize_cpu_cell 0 %endif # ppc, ppc64 -License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ +License: GPLv2+ Summary: Standard Shared Libraries (from the GNU C Library) Group: System/Libraries Obsoletes: ngpt <= 2.2.2 ngpt-devel <= 2.2.2 @@ -56,7 +64,7 @@ Provides: rtld(GNU_HASH) AutoReqProv: on Version: 2.11.1 -Release: 2 +Release: 3 Url: http://www.gnu.org/software/libc/libc.html PreReq: filesystem BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -70,7 +78,6 @@ Source10: bindresvport.blacklist Source11: ctype_b.c Source12: glibc_post_upgrade.c -Source14: powerpc-cpu.tar.bz2 Source15: glibc.rpmlintrc Source16: baselibs.conf %if %_target_cpu == "i686" @@ -82,7 +89,7 @@ Patch0: glibc-2.3-SuSE.diff Patch1: glibc-2.3.90-noversion.diff Patch2: glibc-2.3.90-fnmatch.diff -Patch3: resolv.dynamic.diff +Patch3: glibc-resolv-reload.diff Patch4: glibc-2.3.locales.diff.bz2 Patch5: crypt_blowfish-1.0-suse.diff Patch7: glibc-version.diff @@ -106,7 +113,6 @@ Patch25: glibc-2.3.5-nscd-zeronegtimeout.diff Patch26: glibc-2.3.90-langpackdir.diff Patch27: glibc-nptl-2.4-nofixsyscallnr.diff -Patch29: glibc-2.5-ppc-llrintl.diff Patch30: glibc-2.6-configure.diff Patch31: glibc-2.2-sunrpc.diff Patch32: glibc-2.8-getconf.diff @@ -125,6 +131,17 @@ Patch47: libm-x86-64-exceptions.diff Patch48: glibc-uio-cell.diff Patch50: glibc-nameserver-localhost.diff +Patch54: glibc-statfs64-ia64.diff +Patch55: glibc-memchr-ia64.diff +Patch56: glibc-utf-s390.diff +Patch57: glibc-valloc-assert.diff +Patch58: glibc-dl-x86-64-pc32.diff +Patch59: glibc-sap-captialsharps.diff +Patch60: ld-prelink-unique.diff +Patch61: glibc-ppc64-vdso-time.diff +Patch62: nptl-ppc64-vdso-timedwait.diff +Patch63: glibc-getnprocs.diff +Patch64: glibc-gai-private4.diff Patch500: ARM_glibc-2.10.1-local-eabi-wchar.diff Patch501: ARM_glibc-2.10.1-local-hwcap-updates.diff Patch502: ARM_glibc-2.10.1-local-lowlevellock.diff @@ -184,6 +201,7 @@ Summary: Locale Data for Localized Programs Group: System/Libraries Requires: glibc = %{version} +PreReq: /bin/cat AutoReqProv: on # bug437293 %ifarch ppc64 @@ -278,10 +296,10 @@ # add glibc-ports for arm # this is CURRENTLY BROKEN; ARM-interested contributors need to provide # new tested glibc-ports source -%setup -n glibc-%{version} -q -a 2 -a 3 -a 4 -a 14 +%setup -n glibc-%{version} -q -a 2 -a 3 -a 4 %else # any other leave out ports -%setup -n glibc-%{version} -q -a 3 -a 4 -a 14 +%setup -n glibc-%{version} -q -a 3 -a 4 %endif %patch0 # libNoVersion part is only active on ix86 @@ -320,7 +338,6 @@ rm nscd/s-stamp %patch26 %patch27 -%patch29 %patch30 %patch31 %patch32 @@ -339,6 +356,17 @@ %patch47 %patch48 -p1 %patch50 -p1 +%patch54 +%patch55 -p1 +%patch56 -p1 +%patch57 -p1 +%patch58 +%patch59 +%patch60 -p1 +%patch61 -p1 +%patch62 -p1 +%patch63 -p1 +%patch64 %ifarch %arm armv5tel armv7l %patch500 %patch501 @@ -364,6 +392,7 @@ # rm -fv sysdeps/powerpc/powerpc32/power4/hp-timing.c sysdeps/powerpc/powerpc32/power4/hp-timing.h find . -name configure | xargs touch + ####################################################################### ### ### BUILD @@ -441,6 +470,7 @@ # fails to build otherwise - need to recheck and fix %define enable_stackguard_randomization 0 %endif + configure_and_build_glibc() { local dirname="$1"; shift local cflags="$1"; shift @@ -464,6 +494,7 @@ make $PARALLEL cd .. } + %if !%{optimize_power} # # Build base glibc @@ -475,9 +506,17 @@ # # First, base build: pBuildFlags="$BuildFlags -mcpu=%{powerpc_optimize_base} -mtune=%{powerpc_optimize_tune}" - configure_and_build_glibc base "$pBuildFlags" "$add_ons,powerpc-cpu" --with-cpu=%{powerpc_optimize_base} + %if %{powerpc_optimize_base} != "power3" + configure_and_build_glibc base "$pBuildFlags" "$add_ons" --with-cpu=%{powerpc_optimize_base} + %else + # Use no default CPU + configure_and_build_glibc base "$pBuildFlags" "$add_ons" + %endif # Then other power variants: for pcpu in \ + %if %{powerpc_optimize_cpu_power4} + power4 \ + %endif %if %{powerpc_optimize_cpu_power6} power6 \ %endif @@ -485,7 +524,7 @@ power7 \ %endif ; do - configure_and_build_glibc $pcpu "$BuildFlags -mcpu=$pcpu" "$add_ons,powerpc-cpu" \ + configure_and_build_glibc $pcpu "$BuildFlags -mcpu=$pcpu" "$add_ons" \ --with-cpu=$pcpu --disable-runbinaries done # Eventually, special Cell variant: @@ -493,17 +532,22 @@ configure_and_build_glibc ppc-cell-be "$BuildFlags -mcpu=cell" "$add_ons" --disable-runbinaries %endif %endif # optimize_power + # # Build html documentation # make -C cc-base html + # # Build glibc_post_upgrade binary # $BuildCC -static -Os -g $RPM_SOURCE_DIR/glibc_post_upgrade.c -o glibc_post_upgrade \ -Lcc-base -Bcc-base/csu \ - '-DREMOVE_TLS_DIRS' \ + '-DREMOVE_TLS_DIRS' '-DREMOVE_PPC_OPTIMIZE_POWER5' \ %ifarch ppc ppc64 + %if !%{powerpc_optimize_cpu_power4} + '-DREMOVE_PPC_OPTIMIZE_POWER4' \ + %endif %if !%{powerpc_optimize_cpu_power6} '-DREMOVE_PPC_OPTIMIZE_POWER6' \ %endif @@ -515,6 +559,7 @@ %endif %endif '-DLIBDIR="/%{_lib}"' '-DGCONV_MODULES_DIR="%{_prefix}/%{_lib}/gconv"' + ####################################################################### ### ### CHECK @@ -536,6 +581,7 @@ %endif %endif make -C cc-base check-abi || echo check-abi failed + ####################################################################### ### ### INSTALL @@ -553,12 +599,15 @@ # debugging tools currently require these sections directly inside the main # files - specifically valgrind and PurifyPlus. export STRIP_KEEP_SYMTAB=*.so* + # Make sure we will create the gconv-modules.cache mkdir -p $RPM_BUILD_ROOT%{_libdir}/gconv touch $RPM_BUILD_ROOT%{_libdir}/gconv/gconv-modules.cache + # Install base glibc # Do not install in parallel, timezone Makefile will fail make install_root=$RPM_BUILD_ROOT install -C cc-base + # Install power-optimized glibc %if %{optimize_power} # run ldconfig to create the library symlinks @@ -566,6 +615,9 @@ # it may contain instructions not suitable for the cpu on the builhost my_ldconfig=/sbin/ldconfig for pcpu in \ + %if %{powerpc_optimize_cpu_power4} + power4 \ + %endif %if %{powerpc_optimize_cpu_power6} power6 \ %endif @@ -597,6 +649,7 @@ fi %endif %endif # optimize_power + # Install locales %if %{build_locales} # Do not install locales in parallel! @@ -606,31 +659,43 @@ %endif # Create file list for glibc-locale package %{find_lang} libc + # Prepare obsolete/, used only on some architectures: export RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/%{_lib}/obsolete + # NPTL <bits/stdio-lock.h> is not usable outside of glibc, so include # the generic one (RH#162634) cp -av bits/stdio-lock.h $RPM_BUILD_ROOT%{_prefix}/include/bits/stdio-lock.h + %ifarch s390x # s390x is different ... mkdir $RPM_BUILD_ROOT/lib ln -sf ../%{_lib}/ld-%{version}.so $RPM_BUILD_ROOT/lib/ld64.so.1 %endif + # Miscelanna: + install -m 0700 glibc_post_upgrade $RPM_BUILD_ROOT%{_sbindir} + install -m 644 $RPM_SOURCE_DIR/bindresvport.blacklist $RPM_BUILD_ROOT/etc install -m 644 $RPM_SOURCE_DIR/nsswitch.conf $RPM_BUILD_ROOT/etc install -m 644 posix/gai.conf $RPM_BUILD_ROOT/etc + mkdir -p $RPM_BUILD_ROOT/etc/default install -m 644 nis/nss $RPM_BUILD_ROOT/etc/default/ + mkdir -p $RPM_BUILD_ROOT/usr/include/resolv install -m 0644 resolv/mapv4v6addr.h $RPM_BUILD_ROOT/usr/include/resolv/ install -m 0644 resolv/mapv4v6hostent.h $RPM_BUILD_ROOT/usr/include/resolv/ + mkdir -p $RPM_BUILD_ROOT/usr/share/doc/glibc cp -p manual/libc/*.html $RPM_BUILD_ROOT/usr/share/doc/glibc + cd manpages; make install_root=$RPM_BUILD_ROOT install; cd .. + # nscd tools: + cp nscd/nscd.conf $RPM_BUILD_ROOT/etc mkdir -p $RPM_BUILD_ROOT/etc/apparmor.d cp $RPM_SOURCE_DIR/usr.sbin.nscd $RPM_BUILD_ROOT/etc/apparmor.d @@ -640,6 +705,7 @@ mkdir -p $RPM_BUILD_ROOT/var/run/nscd touch $RPM_BUILD_ROOT/var/run/nscd/{passwd,group,hosts} touch $RPM_BUILD_ROOT/var/run/nscd/{socket,nscd.pid} + # # Create ld.so.conf # @@ -679,23 +745,28 @@ # Empty the ld.so.cache: rm -f $RPM_BUILD_ROOT/etc/ld.so.cache touch $RPM_BUILD_ROOT/etc/ld.so.cache + # libNoVersion belongs only to glibc-obsolete: %ifarch %ix86 rm -f $RPM_BUILD_ROOT%{_libdir}/libNoVersion* mkdir -p $RPM_BUILD_ROOT/%{_lib}/obsolete/noversion mv -v $RPM_BUILD_ROOT/%{_lib}/libNoVersion* $RPM_BUILD_ROOT/%{_lib}/obsolete/noversion/ %endif + # Don't look at ldd! We don't wish a /bin/sh requires chmod 644 $RPM_BUILD_ROOT/usr/bin/ldd + # Remove timezone data, now coming in standalone package: for i in sbin/sln usr/bin/tzselect usr/sbin/zic usr/sbin/zdump etc/localtime; do rm -f $RPM_BUILD_ROOT/$i done rm -rf $RPM_BUILD_ROOT/usr/share/zoneinfo + # Remove the buildflags tracking section and the build-id for o in $RPM_BUILD_ROOT/%{_libdir}/crt[1in].o $RPM_BUILD_ROOT/%{_libdir}/lib*_nonshared.a; do objcopy -R ".comment.SUSE.OPTs" -R ".note.gnu.build-id" $o done + ####################################################################### ### ### ... @@ -732,11 +803,13 @@ %restart_on_update nscd %insserv_cleanup exit 0 + ####################################################################### ### ### FILES ### ####################################################################### + # glibc %files @@ -833,6 +906,9 @@ /%{_lib}/%1/librt.so.1\ /%{_lib}/%1/libthread_db-1.0.so\ /%{_lib}/%1/libthread_db.so.1 + %if %{powerpc_optimize_cpu_power4} + %{optimized_libs power4} + %endif %if %{powerpc_optimize_cpu_power6} %{optimized_libs power6} %{optimized_libs power6x} ++++++ glibc-dl-x86-64-pc32.diff ++++++ --- sysdeps/x86_64/dl-machine.h~ 2010-03-01 18:51:13.914317000 +0100 +++ sysdeps/x86_64/dl-machine.h 2010-03-01 18:52:01.258038000 +0100 @@ -453,7 +453,7 @@ case R_X86_64_PC32: value += reloc->r_addend - (Elf64_Addr) reloc_addr; *(unsigned int *) reloc_addr = value; - if (__builtin_expect (value != (unsigned int) value, 0)) + if (__builtin_expect (value != (int) value, 0)) { fmt = "\ %s: Symbol `%s' causes overflow in R_X86_64_PC32 relocation\n"; ++++++ glibc-gai-private4.diff ++++++ Pending acceptance upstream when this gets RFC'd: http://sourceware.org/bugzilla/show_bug.cgi?id=11438 --- posix/gai.conf~ 2010-04-20 13:05:50.197813000 +0200 +++ posix/gai.conf 2010-04-20 13:08:46.472675000 +0200 @@ -66,3 +66,68 @@ #scopev4 ::ffff:172.16.0.0/108 5 #scopev4 ::ffff:192.168.0.0/112 5 #scopev4 ::ffff:0.0.0.0/96 14 + + +# Back in 2003, the sorting algorithm used by getaddrinfo() was defined in RFC +# 3484. However, this document did not take into account (or foresee) the +# ubiquity of IPv4 NAT on today's internet. This in turn causes some real +# operational problems that's hindering the deployment of IPv6 for content +# providers. +# +# The problem scenario is the following: +# +# An end user is located in a network numbered with private (RFC 1918) IPv4 +# addresses and transitional 6to4 (RFC 3056) IPv6 addresses. The network is +# connected to the internet by a CPE/SOHO device implementing NAT for IPv4 and +# anycasted 6to4 (RFC 3068) for IPv6. +# +# When the user attempts to connect to a server whose hostname has both IPv4 +# and IPv6 addresses published in DNS, an IPv6 connection using the +# transitional 6to4 service will be preferred. This happens because the scope +# comparsion fails for IPv4, the RFC 1918 addresses are assumed to have +# site-local scope, which is smaller than the global scope of the server's IPv4 +# address. For IPv6, both the server's and the client's (6to4) address have +# global scope. +# +# Unfortunately, the operational reality is that a transitional technique such +# as 6to4 is much less reliable than IPv4. The relay routers might be located +# far away from the optimal IPv4 path, and thus cause a significant latency +# increase, or they might not even work optimally (they're usually operated by +# voulenteering third parties on a best-effort basis), and finally some ISPs +# simply filter away all proto-41 traffic. Transitional techniques are useful +# to give end users with IPv4-only service a real shot at accessing IPv6-only +# content, but it should never be preferred over IPv4 service when accessing +# dual-stacked content. +# +# RFC 3484 even acknowledges this, by saying to "�avoid the use of transitional +# addresses when native addresses are available"�. +# +# An IETF draft document which describes the problem in a much more detailed +# manner than I have is available here: +# +# http://tools.ietf.org/html/draft-denis-v6ops-nat-addrsel-00 +# +# There's also an IETF draft that aims to revise RFC 3484 in order to fix this +# problem (amongst others): +# +# http://tools.ietf.org/html/draft-arifumi-6man-rfc3484-revise-02 +# +# Quoting from this document: +# +# > 2.7. To change private IPv4 address scope +# > +# > As detailed in Remi's draft [I-D.denis-v6ops-nat-addrsel], when a +# > host is in NATed site, and has a private IPv4 address and +# > transitional addresses like 6to4 and Teredo, the host chooses +# > transitional IPv6 address to access most of the dual-stack servers. +# > +# > This is because private IPv4 address is defined to be site-local +# > scope, and as in RFC 3484, the scope matching rules (Rule 2) set +# > lower priority for private IPv4 address. +# > +# > By changing the address scope of private IPv4 address to global, this +# > problem can be solved. + +scopev4 ::ffff:10.0.0.0/104 14 +scopev4 ::ffff:172.16.0.0/108 14 +scopev4 ::ffff:192.168.0.0/112 14 ++++++ glibc-getnprocs.diff ++++++ This bug is in reference to a bug introduced in glibc 2.11 but present in glibc HEAD by the following patch set: http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=6a3d03ff58742430a252be... The patch came from this bugzilla bug: https://bugzilla.redhat.com/show_bug.cgi?id=494631 Which simply proposed the first part: + nl = memchr (*cp, '\n', *re - *cp); + while (nl == NULL && *re == buffer_end) + { + /* Truncate too long lines. */ + *re = buffer + 3 * (buffer_end - buffer) / 4; + n = read_not_cancel (fd, *re, buffer_end - *re); + if (n < 0) + return NULL; + + nl = memchr (*re, '\n', n); + **re = '\n'; + *re += n; + } } + else + nl = memchr (*cp, '\n', *re - *cp); This was checked in with a second part: else if (nl + 5 >= *re) { memmove (buffer, nl, *re - nl); *re = buffer + (*re - nl); nl = *cp = buffer; ssize_t n = read_not_cancel (fd, *re, buffer_end - *re); if (n < 0) return NULL; *re += n; } Which is meant to determine whether there's enough room at the end of the buffer to hold "cpu*\n". else if (nl + 5 >= *re) { memmove (buffer, nl, *re - nl); *re = buffer + (*re - nl); nl = *cp = buffer; ssize_t n = read_not_cancel (fd, *re, buffer_end - *re); if (n < 0) return NULL; *re += n; } *cp = nl + 1; This second block is erroneous (and redundant). If there's not enough room to complete a cpu[:digit:] line it'll try to move what's partially in the end of the buffer to the front (preserving that portion) and then read in a bunch more, assuming that a \n is in the next read. But it actually ends up overwriting the current line with the contents of the second line. Consider the following line | C | P | U | 1 | \n | C | P | U | 2 | \n | C | P | U | 3 | F | O | O | B | A | R | F | O | O | B | A | R | \n | ... where sizeof(buffer) == 12. The first time through 'buffer' is filled as follows: | C | P | U | 1 | \n | C | P | U | 2 | \n | C | P | and 'cpu1' is the line that is returned. The second time through 'cpu2' is the line that is supposed to be returned but this problematic branch is hit and the last C P is copied to the front of the buffer over top of C P U 2. Following this U 3 F O O B A R F O is read into the rest of 'buffer': | C | P ||| U | 3 | F | O | O | B | A | R | F | O | This throws off the whole incrementing calculation. This second else block isn't necessary. Jakub's first part covers the scenario shown in the example above quite well: The following test case: #include<stdio.h> #include<sys/sysinfo.h> int main() { int lcpus=get_nprocs(); printf("logical cpus = %d\n",lcpus); return 0; } Can be run against the attached /proc/stat file which is known to reproduce the problem: This stat file can be used with the testcase by bind mounting it over /proc/stat: cp stat /dev/shm/stat mount --bind /dev/shm/stat /proc/stat When run this should show: logical cpus = 1024 since cpu1024 is high cpu number. But it shows something like: logical cpus = 137 Also attached is a patch which removes the erroneous else block. When re-run against with this patch it reports the correct number of cpus. Thanks to Milton Miller for describing this problem. --- glibc-2.11.1/sysdeps/unix/sysv/linux/getsysstats.c 2010-01-18 11:01:41.000000000 -0600 +++ glibc-2.11.1-new/sysdeps/unix/sysv/linux/getsysstats.c 2010-03-23 08:00:26.000000000 -0500 @@ -117,18 +117,6 @@ if (nl == NULL) nl = *re - 1; } - else if (nl + 5 >= *re) - { - memmove (buffer, nl, *re - nl); - *re = buffer + (*re - nl); - nl = *cp = buffer; - - ssize_t n = read_not_cancel (fd, *re, buffer_end - *re); - if (n < 0) - return NULL; - - *re += n; - } *cp = nl + 1; assert (*cp <= *re); ++++++ glibc-memchr-ia64.diff ++++++ 2010-02-05 H.J. Lu <hongjiu.lu@intel.com> PR libc/11230 * sysdeps/ia64/memchr.S: Don't read beyond the last byte during recovery. diff --git a/sysdeps/ia64/memchr.S b/sysdeps/ia64/memchr.S index cdd71ca..56d8056 100644 --- a/sysdeps/ia64/memchr.S +++ b/sysdeps/ia64/memchr.S @@ -47,7 +47,7 @@ #define saved_lc r16 #define chr r17 #define len r18 -#define pos0 r20 +#define last r20 #define val r21 #define tmp r24 #define chrx8 r25 @@ -67,6 +67,7 @@ ENTRY(__memchr) mov saved_pr = pr // save the predicates .body mov ret0 = str + add last = str, in2 // last byte and tmp = 7, str // tmp = str % 8 cmp.ne p7, p0 = r0, r0 // clear p7 extr.u chr = in1, 0, 8 // chr = (unsigned char) in1 @@ -143,7 +144,10 @@ ENTRY(__memchr) ld8 tmp = [ret0];; // load the first unchecked 8byte xor aux[1] = tmp, chrx8;; czx1.r poschr[1] = aux[1];; - cmp.ne p7, p0 = 8, poschr[1] + cmp.ne p7, p0 = 8, poschr[1];; +(p7) add ret0 = addr[MEMLAT+2], poschr[1];; +(p7) cmp.geu p6, p7 = ret0, last // don't go over the last byte +(p6) br.cond.spnt .notfound;; (p7) br.cond.spnt .foundit;; adds ret0 = 8, ret0 // load the next unchecked 8byte br.sptk .l4;; ++++++ glibc-ppc64-vdso-time.diff ++++++ 2010-03-04 Carlos Eduardo Seo <cseo@linux.vnet.ibm.com> * sysdeps/unix/sysv/linux/powerpc/powerpc64/time.c: New file. Index: src/sysdeps/unix/sysv/linux/powerpc/powerpc64/time.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ src/sysdeps/unix/sysv/linux/powerpc/powerpc64/time.c 2010-03-04 20:02:23.000000000 -0300 @@ -0,0 +1,19 @@ +/* Copyright (C) 2010 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 <sysdeps/unix/time.c> ++++++ glibc-resolv-reload.diff ++++++
From libc-alpha-return-22754-pasky=ucw.cz@sourceware.org Tue Mar 16 00:47:00 2010 Return-Path: <libc-alpha-return-22754-pasky=ucw.cz@sourceware.org> X-Original-To: pasky@pasky.or.cz Delivered-To: pasky@pasky.or.cz Received: from nikam.ms.mff.cuni.cz (nikam-dmz.ms.mff.cuni.cz [195.113.20.16]) by machine.or.cz (Postfix) with ESMTPS id C1B8586202A for <pasky@pasky.or.cz>; Tue, 16 Mar 2010 00:47:00 +0100 (CET) Received: by nikam.ms.mff.cuni.cz (Postfix) id 9CDEC9AC7A4; Tue, 16 Mar 2010 00:47:00 +0100 (CET) Delivered-To: pasky@kam.mff.cuni.cz Received: from jabberwock.ucw.cz (jabberwock.ucw.cz [89.250.246.4]) by nikam.ms.mff.cuni.cz (Postfix) with ESMTP id 99F0E9AC77B for <pasky@kam.mff.cuni.cz>; Tue, 16 Mar 2010 00:47:00 +0100 (CET) Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by jabberwock.ucw.cz (Postfix) with SMTP id 14E1ACF040 for <pasky@ucw.cz>; Tue, 16 Mar 2010 00:46:59 +0100 (CET) Received: (qmail 18956 invoked by alias); 15 Mar 2010 23:46:58 -0000 Delivered-To: moderator for libc-alpha@sourceware.org Received: (qmail 15843 invoked by uid 22791); 15 Mar 2010 17:23:15 -0000 X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=BAYES_00 X-Spam-Check-By: sourceware.org Message-ID: <4B9E6CFA.7020002@riot.org> Date: Mon, 15 Mar 2010 18:23:06 +0100 From: Sebastian Kienzl <seb@riot.org> User-Agent: Thunderbird 2.0.0.23 (Windows/20090812) MIME-Version: 1.0 To: libc-alpha@sourceware.org Subject: Reloading of /etc/resolv.conf Content-Type: multipart/mixed; boundary="------------060407080409020101000002" Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: <libc-alpha.sourceware.org> List-Unsubscribe: <mailto:libc-alpha-unsubscribe-pasky=ucw.cz@sourceware.org> List-Subscribe: <mailto:libc-alpha-subscribe@sourceware.org> List-Archive: <http://sourceware.org/ml/libc-alpha/> List-Post: <mailto:libc-alpha@sourceware.org> List-Help: <mailto:libc-alpha-help@sourceware.org>, <http://sourceware.org/ml/#faqs> Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org
This is a multi-part message in MIME format. --------------060407080409020101000002 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Hello! There's a patch in the wild against the resolver which makes it reload /etc/resolv.conf on change, see http://sources.redhat.com/ml/libc-alpha/2004-09/msg00130.html However, this patch actually doesn't work properly for multi-threaded programs, as only one thread will notice the change and refresh its resolver state. I've attached a proper patch. It's for 2.5 but it should work with current versions, too. Even though the patch may not be interesting for upstream, I decided to let you know about this problem, since the mentioned patch seems to be used by at least Debian and Ubuntu. Regards, Seb. --------------060407080409020101000002 Content-Type: text/plain; name="glibc-2.5-resolvconf.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="glibc-2.5-resolvconf.patch" diff -ur resolv.orig/res_libc.c resolv/res_libc.c --- resolv.orig/res_libc.c 2005-11-01 01:06:40.000000000 +0100 +++ resolv/res_libc.c 2010-03-15 14:13:18.000000000 +0100 @@ -22,7 +22,7 @@ #include <arpa/nameser.h> #include <resolv.h> #include <bits/libc-lock.h> - +#include <sys/stat.h> /* The following bit is copied from res_data.c (where it is #ifdef'ed out) since res_init() should go into libc.so but the rest of that @@ -89,12 +89,34 @@ return (__res_vinit(&_res, 1)); } +static time_t resconf_mtime; +__libc_lock_define_initialized (static, resconf_mtime_lock); + +/* Check if the modification time of resolv.conf has changed. + If so, have all threads re-initialize their resolver states */ +static void +__res_check_resconf (void) +{ + struct stat statbuf; + if (stat (_PATH_RESCONF, &statbuf) == 0) { + __libc_lock_lock (resconf_mtime_lock); + if (statbuf.st_mtime != resconf_mtime) { + resconf_mtime = statbuf.st_mtime; + atomicinclock (lock); + atomicinc (__res_initstamp); + atomicincunlock (lock); + } + __libc_lock_unlock (resconf_mtime_lock); + } +} + /* Initialize resp if RES_INIT is not yet set or if res_init in some other thread requested re-initializing. */ int __res_maybe_init (res_state resp, int preinit) { if (resp->options & RES_INIT) { + __res_check_resconf (); if (__res_initstamp != resp->_u._ext.initstamp) { if (resp->nscount > 0) __res_iclose (resp, true); --------------060407080409020101000002-- ++++++ glibc-sap-captialsharps.diff ++++++ --- localedata/locales/i18n~ 2010-01-19 03:51:14.208960000 +0100 +++ localedata/locales/i18n 2010-01-19 03:51:24.444040000 +0100 @@ -928,7 +928,7 @@ (<U006D>,<U004D>);(<U006E>,<U004E>);(<U006F>,<U004F>);(<U0070>,<U0050>);/ (<U0071>,<U0051>);(<U0072>,<U0052>);(<U0073>,<U0053>);(<U0074>,<U0054>);/ (<U0075>,<U0055>);(<U0076>,<U0056>);(<U0077>,<U0057>);(<U0078>,<U0058>);/ - (<U0079>,<U0059>);(<U007A>,<U005A>);(<U00B5>,<U039C>);(<U00DF>,<U1E9E>);/ + (<U0079>,<U0059>);(<U007A>,<U005A>);(<U00B5>,<U039C>);/ (<U00E0>,<U00C0>);/ (<U00E1>,<U00C1>);(<U00E2>,<U00C2>);(<U00E3>,<U00C3>);(<U00E4>,<U00C4>);/ (<U00E5>,<U00C5>);(<U00E6>,<U00C6>);(<U00E7>,<U00C7>);(<U00E8>,<U00C8>);/ ++++++ glibc-statfs64-ia64.diff ++++++ --- sysdeps/unix/sysv/linux/statfs64.c~ 2010-01-27 02:47:32.884315000 +0100 +++ sysdeps/unix/sysv/linux/statfs64.c 2010-01-27 02:49:17.943657000 +0100 @@ -24,6 +24,9 @@ #include <sysdep.h> #include <kernel-features.h> +/* On IA64, ia32el does not provide wrapper for statfs64() for some reason. + Force the compatibility code to get compiled in. [bnc#534828] */ +#undef __ASSUME_STATFS64 # if __ASSUME_STATFS64 == 0 int __no_statfs64 attribute_hidden; ++++++ glibc-utf-s390.diff ++++++ Hi, unfortunately it turned out that the UTF-16 to UTF-32 and UTF-16 to UTF-8 conversion instructions fail to recognize certain conditions if the input stream is corrupted. The attached patch disables these instructions and adjusts the software implementation in order to take care of the error condition. Hopefully we can re-enable them if a millicode fix becomes available. Tested without regressions on s390x. Please apply if you think it is ok. Bye, -Andreas- 2010-02-11 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * sysdeps/s390/s390-64/utf8-utf16-z9.c: Disable hardware instructions cu21 and cu24. Add well-formedness checking parameter and adjust the software implementation. * sysdeps/s390/s390-64/utf16-utf32-z9.c: Likewise. Index: libc/sysdeps/s390/s390-64/utf8-utf16-z9.c =================================================================== --- libc.orig/sysdeps/s390/s390-64/utf8-utf16-z9.c +++ libc/sysdeps/s390/s390-64/utf8-utf16-z9.c @@ -345,9 +345,12 @@ gconv_end (struct __gconv_step *data) Operation. */ #define BODY \ { \ - if (GLRO (dl_hwcap) & HWCAP_S390_ETF3EH) \ + /* The hardware instruction currently fails to report an error for \ + isolated low surrogates so we have to disable the instruction \ + until this gets resolved. */ \ + if (0) /* (GLRO (dl_hwcap) & HWCAP_S390_ETF3EH) */ \ { \ - HARDWARE_CONVERT ("cu21 %0, %1"); \ + HARDWARE_CONVERT ("cu21 %0, %1, 1"); \ if (inptr != inend) \ { \ /* Check if the third byte is \ @@ -388,7 +391,7 @@ gconv_end (struct __gconv_step *data) \ outptr += 2; \ } \ - else if (c >= 0x0800 && c <= 0xd7ff) \ + else if ((c >= 0x0800 && c <= 0xd7ff) || c > 0xdfff) \ { \ /* Three byte UTF-8 char. */ \ \ Index: libc/sysdeps/s390/s390-64/utf16-utf32-z9.c =================================================================== --- libc.orig/sysdeps/s390/s390-64/utf16-utf32-z9.c +++ libc/sysdeps/s390/s390-64/utf16-utf32-z9.c @@ -203,7 +203,10 @@ gconv_end (struct __gconv_step *data) swapping). */ #define BODY \ { \ - if (GLRO (dl_hwcap) & HWCAP_S390_ETF3EH) \ + /* The hardware instruction currently fails to report an error for \ + isolated low surrogates so we have to disable the instruction \ + until this gets resolved. */ \ + if (0) /* (GLRO (dl_hwcap) & HWCAP_S390_ETF3EH) */ \ { \ HARDWARE_CONVERT ("cu24 %0, %1, 1"); \ if (inptr != inend) \ @@ -229,6 +232,12 @@ gconv_end (struct __gconv_step *data) } \ else \ { \ + /* An isolated low-surrogate was found. This has to be \ + considered ill-formed. */ \ + if (__builtin_expect (u1 >= 0xdc00, 0)) \ + { \ + STANDARD_FROM_LOOP_ERR_HANDLER (2); \ + } \ /* It's a surrogate character. At least the first word says \ it is. */ \ if (__builtin_expect (inptr + 4 > inend, 0)) \ ++++++ glibc-valloc-assert.diff ++++++ Index: glibc-2.11.1/malloc/malloc.c =================================================================== --- glibc-2.11.1.orig/malloc/malloc.c 2010-01-18 18:01:41.000000000 +0100 +++ glibc-2.11.1/malloc/malloc.c 2010-02-23 13:47:59.000000000 +0100 @@ -3933,9 +3933,10 @@ public_vALLOc(size_t bytes) if(!p) { /* Maybe the failure is due to running out of mmapped areas. */ if(ar_ptr != &main_arena) { - (void)mutex_lock(&main_arena.mutex); - p = _int_memalign(&main_arena, pagesz, bytes); - (void)mutex_unlock(&main_arena.mutex); + ar_ptr = &main_arena; + (void)mutex_lock(&ar_ptr->mutex); + p = _int_memalign(ar_ptr, pagesz, bytes); + (void)mutex_unlock(&ar_ptr->mutex); } else { #if USE_ARENAS /* ... or sbrk() has failed and there is still a chance to mmap() */ @@ -3978,9 +3979,10 @@ public_pVALLOc(size_t bytes) if(!p) { /* Maybe the failure is due to running out of mmapped areas. */ if(ar_ptr != &main_arena) { - (void)mutex_lock(&main_arena.mutex); - p = _int_memalign(&main_arena, pagesz, rounded_bytes); - (void)mutex_unlock(&main_arena.mutex); + ar_ptr = &main_arena; + (void)mutex_lock(&ar_ptr->mutex); + p = _int_memalign(ar_ptr, pagesz, rounded_bytes); + (void)mutex_unlock(&ar_ptr->mutex); } else { #if USE_ARENAS /* ... or sbrk() has failed and there is still a chance to mmap() */ ++++++ glibc_post_upgrade.c ++++++ --- /var/tmp/diff_new_pack.HSbOO6/_old 2010-04-28 22:34:42.000000000 +0200 +++ /var/tmp/diff_new_pack.HSbOO6/_new 2010-04-28 22:34:42.000000000 +0200 @@ -34,6 +34,9 @@ char initpath[256]; struct stat root, init_root; + /* First, get rid of platform-optimized libraries. We remove any we have + ever built, since otherwise we might end up using some old leftover + libraries when new ones aren't installed in their place anymore. */ #ifdef REMOVE_TLS_DIRS const char *library[] = {"libc.so.6", "libc.so.6.1", "libm.so.6", "libm.so.6.1", "librt.so.1", "librtkaio.so.1", @@ -43,6 +46,14 @@ "/lib/i686/", #endif #ifdef __powerpc64__ +#ifdef REMOVE_PPC_OPTIMIZE_POWER4 + "/lib64/power4/", + "/lib64/ppc970/", +#endif +#ifdef REMOVE_PPC_OPTIMIZE_POWER5 + "/lib64/power5/", + "/lib64/power5+/", +#endif #ifdef REMOVE_PPC_OPTIMIZE_POWER6 "/lib64/power6/", "/lib64/power6x/", @@ -55,6 +66,14 @@ #endif #endif /* __powerpc64__ */ #ifdef __powerpc__ +#ifdef REMOVE_PPC_OPTIMIZE_POWER4 + "/lib/power4/", + "/lib/ppc970/", +#endif +#ifdef REMOVE_PPC_OPTIMIZE_POWER5 + "/lib/power5/", + "/lib/power5+/", +#endif #ifdef REMOVE_PPC_OPTIMIZE_POWER6 "/lib/power6/", "/lib/power6x/", ++++++ ld-prelink-unique.diff ++++++ 2010-03-23 Jakub Jelinek <jakub@redhat.com> * elf/dl-lookup.c (do_lookup_x): If tab->entries is NULL, but tab->size != 0, just unlock and goto success, without allocating anything or entering anything into the hash table. (_dl_debug_bindings): Temporarily set tab->entries to NULL around do_lookup_x in undef_map->l_local_scope[0]. --- libc/elf/dl-lookup.c.jj 2009-12-16 00:10:37.000000000 +0100 +++ libc/elf/dl-lookup.c 2010-03-23 11:03:45.850560036 +0100 @@ -1,5 +1,6 @@ /* Look up a symbol in the loaded objects. - Copyright (C) 1995-2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Copyright (C) 1995-2005, 2006, 2007, 2009, 2010 + 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 @@ -414,6 +415,20 @@ do_lookup_x (const char *undef_name, uin assert (!RTLD_CHECK_FOREIGN_CALL); #endif +#ifdef SHARED + /* If tab->entries is NULL, but tab->size is not, it means + this is the second, conflict finding, lookup for + LD_TRACE_PRELINKING in _dl_debug_bindings. Don't + allocate anything and don't enter anything into the + hash table. */ + if (__builtin_expect (tab->size, 0)) + { + assert (GLRO(dl_debug_mask) & DL_DEBUG_PRELINK); + __rtld_lock_unlock_recursive (tab->lock); + goto success; + } +#endif + #define INITIAL_NUNIQUE_SYM_TABLE 31 size = INITIAL_NUNIQUE_SYM_TABLE; entries = calloc (sizeof (struct unique_sym), size); @@ -917,13 +932,17 @@ _dl_debug_bindings (const char *undef_na { const uint_fast32_t new_hash = dl_new_hash (undef_name); unsigned long int old_hash = 0xffffffff; + struct unique_sym *saved_entries + = GL(dl_ns)[LM_ID_BASE]._ns_unique_sym_table.entries; + GL(dl_ns)[LM_ID_BASE]._ns_unique_sym_table.entries = NULL; do_lookup_x (undef_name, new_hash, &old_hash, *ref, &val, undef_map->l_local_scope[0], 0, version, 0, NULL, type_class, undef_map); if (val.s != value->s || val.m != value->m) conflict = 1; + GL(dl_ns)[LM_ID_BASE]._ns_unique_sym_table.entries = saved_entries; } if (value->s) ++++++ nptl-ppc64-vdso-timedwait.diff ++++++ Index: glibc-2.11.1/nptl/pthread_cond_timedwait.c =================================================================== --- glibc-2.11.1.old/nptl/pthread_cond_timedwait.c +++ glibc-2.11.1/nptl/pthread_cond_timedwait.c @@ -27,6 +27,15 @@ #include <shlib-compat.h> +#ifndef HAVE_CLOCK_GETTIME_VSYSCALL +# undef INTERNAL_VSYSCALL +# define INTERNAL_VSYSCALL INTERNAL_SYSCALL +# undef INLINE_VSYSCALL +# define INLINE_VSYSCALL INLINE_SYSCALL +#else +# include <bits/libc-vdso.h> +#endif + /* Cleanup handler, defined in pthread_cond_wait.c. */ extern void __condvar_cleanup (void *arg) @@ -102,7 +111,7 @@ __pthread_cond_timedwait (cond, mutex, a #ifdef __NR_clock_gettime INTERNAL_SYSCALL_DECL (err); int ret; - ret = INTERNAL_SYSCALL (clock_gettime, err, 2, + ret = INTERNAL_VSYSCALL (clock_gettime, err, 2, (cond->__data.__nwaiters & ((1 << COND_NWAITERS_SHIFT) - 1)), &rt); ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org