GNU C Library NEWS -- history of user-visible changes.
Copyright (C) 1992-2016 Free Software Foundation, Inc.
See the end for copying conditions.

Please send GNU C library bug reports via <http://sourceware.org/bugzilla/>
using `glibc' in the "product" field.

Version 2.23

* Unicode 8.0.0 Support: Character encoding, character type info, and
  transliteration tables are all updated to Unicode 8.0.0, using new
  and/or improved generator scripts contributed by Mike FABIAN (Red Hat).
  These updates cause user visible changes, such as the fixes for bugs
  89, 16061, and 18568.

* sched_setaffinity, pthread_setaffinity_np no longer attempt to guess the
  kernel-internal CPU set size.  This means that requests that change the
  CPU affinity which failed before (for example, an all-ones CPU mask) will
  now succeed.  Applications that need to determine the effective CPU
  affinities need to call sched_getaffinity or pthread_getaffinity_np after
  setting it because the kernel can adjust it (and the previous size check
  would not detect this in the majority of cases).

* The fts.h header can now be used with -D_FILE_OFFSET_BITS=64.  With LFS
  the following new symbols are used: fts64_children, fts64_close,
  fts64_open, fts64_read and fts64_set.

* getaddrinfo now detects certain invalid responses on an internal netlink
  socket.  If such responses are received, an affected process will
  terminate with an error message of "Unexpected error <number> on netlink
  descriptor <number>" or "Unexpected netlink response of size <number> on
  descriptor <number>".  The most likely cause for these errors is a
  multi-threaded application which erroneously closes and reuses the netlink
  file descriptor while it is used by getaddrinfo.

* A defect in the malloc implementation, present since glibc 2.15 (2012) or
  glibc 2.10 via --enable-experimental-malloc (2009), could result in the
  unnecessary serialization of memory allocation requests across threads.
  The defect is now corrected.  Users should see a substantial increase in
  the concurent throughput of allocation requests for applications which
  trigger this bug.  Affected applications typically create create and
  destroy threads frequently.  (Bug 19048 was reported and analyzed by
  Ericsson.)

* There is now a --disable-timezone-tools configure option for disabling the
  building and installing of the timezone related utilities (zic, zdump, and
  tzselect).  This is useful for people who build the timezone data and code
  independent of the GNU C Library.

* The obsolete header <regexp.h> has been removed.  Programs that require
  this header must be updated to use <regex.h> instead.

* The obsolete functions bdflush, create_module, get_kernel_syms,
  query_module and uselib are no longer available to newly linked binaries;
  the header <sys/kdaemon.h> has been removed.  These functions and header
  were specific to systems using the Linux kernel and could not usefully be
  used with the GNU C Library on systems with version 2.6 or later of the
  Linux kernel.

* Optimized string, wcsmbs and memory functions for IBM z13.
  Implemented by Stefan Liebler.

* Newly linked programs that define a variable called signgam will no longer
  have it set by the lgamma, lgammaf and lgammal functions.  Programs that
  require signgam to be set by those functions must ensure that they use the
  variable provided by the GNU C Library and declared in <math.h>, without
  defining their own copy.

* The minimum GCC version that can be used to build this version of the GNU
  C Library is GCC 4.7.  Older GCC versions, and non-GNU compilers, can
  still be used to compile programs using the GNU C Library.

Security related changes:

* An out-of-bounds value in a broken-out struct tm argument to strftime no
  longer causes a crash.  Reported by Adam Nielsen.  (CVE-2015-8776)

* The LD_POINTER_GUARD environment variable can no longer be used to disable
  the pointer guard feature.  It is always enabled.  Previously,
  LD_POINTER_GUARD could be used to disable security hardening in binaries
  running in privileged AT_SECURE mode.  Reported by Hector Marco-Gisbert.
  (CVE-2015-8777)

* An integer overflow in hcreate and hcreate_r could lead to an
  out-of-bounds memory access.  Reported by Szabolcs Nagy.  (CVE-2015-8778)

* The catopen function no longer has unbounded stack usage.  Reported by
  Max.  (CVE-2015-8779)

* The nan, nanf and nanl functions no longer have unbounded stack usage
  depending on the length of the string passed as an argument to the
  functions.  Reported by Joseph Myers.  (CVE-2014-9761)

* A stack-based buffer overflow was found in libresolv when invoked from
  libnss_dns, allowing specially crafted DNS responses to seize control
  of execution flow in the DNS client.  The buffer overflow occurs in
  the functions send_dg (send datagram) and send_vc (send TCP) for the
  NSS module libnss_dns.so.2 when calling getaddrinfo with AF_UNSPEC
  family.  The use of AF_UNSPEC triggers the low-level resolver code to
  send out two parallel queries for A and AAAA.  A mismanagement of the
  buffers used for those queries could result in the response of a query
  writing beyond the alloca allocated buffer created by
  _nss_dns_gethostbyname4_r.  Buffer management is simplified to remove
  the overflow.  Thanks to the Google Security Team and Red Hat for
  reporting the security impact of this issue, and Robert Holiday of
  Ciena for reporting the related bug 18665. (CVE-2015-7547)

The following bugs are resolved with this release:

  [89] localedata: Locales nb_NO and nn_NO should transliterate æøå
  [887] math: Math library function "logb" and "nextafter" inconsistent
  [2542] math: Incorrect return from float gamma (-0X1.FA471547C2FE5P+1)
  [2543] math: Incorrect return from float gamma (-0X1.9260DCP+1)
  [2558] math: Incorrect return from double gamma (-0X1.FA471547C2FE5P+1)
  [2898] libc: [improve]  warning: the use  of `mktemp' is dangerous, better
    use `mkstemp'
  [4404] localedata: German translation of "Alarm clock" is misleading
  [6799] math: nextafter() and nexttoward() doen't set errno on
    overflow/underflow errors
  [6803] math: scalb(), scalbln(), scalbn() do not set errno on
    overflow/underflow
  [10432] nis: _nss_nis_setnetgrent assertion failure
  [11460] libc: fts has no LFS support
  [12926] network: getaddrinfo()/make_request() may spin forever
  [13065] nptl: Race condition in pthread barriers
  [13690] nptl: pthread_mutex_unlock potentially cause invalid access
  [14341] dynamic-link: Dynamic linker crash when DT_JMPREL and DT_REL{,A}
    are not contiguous
  [14551] math: [ldbl-128ibm] strtold overflow handling for IBM long double
  [14912] libc: Rename non-installed bits/*.h headers
  [15002] libc: Avoid undefined behavior in posix_fallocate overflow check
  [15367] math: Let gcc use __builtin_isinf
  [15384] math: One constant fewer in ieee754/dbl-64/wordsize-64/s_finite.c
  [15421] math: lgamma wrongly sets signgam for ISO C
  [15470] math: [arm] On ARM llrintl() and llroundl() do not raise
    FE_INVALID with argument out of range
  [15491] math: [i386/x86_64] x86 nearbyint implementations wrongly clear
    all exceptions
  [15786] dynamic-link: ifunc resolver functions can smash function
    arguments
  [15918] math: Unnecessary check for equality in hypotf()
  [16061] localedata: Review / update transliteration data
  [16068] math: [i386/x86_64] x86 and x86_64 fesetenv exclude state they
    should include
  [16141] time: strptime %z offset restriction
  [16171] math: drem should be alias of remainder
  [16296] math: fegetround is pure?
  [16347] math: [ldbl-128ibm] ldbl-128/e_lgammal_r.c may not be suitable.
  [16364] libc: sleep may leave SIGCHLD blocked on sync cancellation on
    GNU/Linux
  [16399] math: [mips] lrint / llrint / lround / llround missing exceptions
  [16415] math: Clean up ldbl-128 / ldbl-128ibm expm1l for large positive
    arguments
  [16422] math: [powerpc] math-float, math-double failing llrint tests with
    "Exception "Inexact" set" on ppc32
  [16495] localedata: nl_NL: date_fmt: shuffle year/month around
  [16517] math: Missing underflow exception from tanf/tan/tanl
  [16519] math: Missing underflow exception from sinhf
  [16520] math: Missing underflow exception from tanhf
  [16521] math: Missing underflow exception from exp2
  [16620] math: [ldbl-128ibm] exp10l spurious overflows / bad directed
    rounding results
  [16734] stdio: fopen calls mmap to allocate its buffer
  [16961] math: nan function incorrect handling of bad sequences
  [16962] math: nan function unbounded stack allocation (CVE-2014-9761)
  [16973] localedata: Fix lang_lib/lang_term as per ISO 639-2
  [16985] locale: localedef: confusing error message when opening output
    fails
  [17118] math: ctanh(INFINITY + 2 * I) returns incorrect value
  [17197] locale: Redundant shift character in iconv conversion output at
    block boundary
  [17243] libc: trunk/posix/execl.c:53: va_args problem ?
  [17244] libc: trunk/sysdeps/unix/sysv/linux/semctl.c:116: va_args muxup ?
  [17250] dynamic-link: static linking breaks nss loading
    (getaddrinfo/getpwnam/etc...)
  [17404] libc: atomic_exchange_rel lacking a barrier on MIPS16, GCC before
    4.7?
  [17441] math: isnan() should use __builtin_isnan() in GCC
  [17514] nptl: Assert failure unlocking ERRORCHECK mutex after timedlock
    (related to lock elision)
  [17787] manual: Exponent on page 324 of the PDF ends prematurely
  [17886] time: strptime should be able to parse "Z" as a timezone with %z
  [17887] time: strptime should be able to parse "+01:00" style timezones
  [17905] libc: catopen() Multiple unbounded stack allocations
    (CVE-2015-8779)
  [18084] libc: backtrace (..., 0) dumps core on x86
  [18086] libc: nice() sets errno to 0 on success
  [18240] libc: hcreate, hcreate_r should fail with ENOMEM if element count
    is too large (CVE-2015-8778)
  [18251] dynamic-link: SONAME missing when audit modules provides path
  [18265] libc: add attributes for wchar string and memory functions
  [18370] math: csqrt missing underflows
  [18421] libc: [hppa] read-only segment has dynamic relocations
  [18472] libc: Obsolete syscall wrappers should be compat symbols
  [18480] libc: hppa glibc miscompilation in sched_setaffinity()
  [18491] localedata: Update tr_TR LC_CTYPE as part of Unicode updates
  [18525] localedata: Remove locale timezone information
  [18560] libc: [powerpc] spurious bits/ipc.h definitions
  [18568] localedata: Update locale data to Unicode 8.0
  [18589] locale: sort-test.sh fails at random
  [18595] math: ctan, ctanh missing underflows
  [18604] libc: assert macro-expands its argument
  [18610] math: S390: fetestexcept() reports any exception if DXC-code
    contains a vector instruction exception.
  [18611] math: j1, jn missing errno setting on underflow
  [18618] localedata: sync Chechen locale definitions with other *_RU
    locales
  [18647] math: powf(-0x1.000002p0, 0x1p30) returns 0 instead of +inf
  [18661] libc: Some x86-64 assembly codes don't align stack to 16 bytes
  [18665] network: In send_dg, the recvfrom function is NOT always using the
    buffer size of a newly created buffer (CVE-2015-7547)
  [18674] libc: [i386] trunk/sysdeps/i386/tst-auditmod3b.c:84: possible
    missing break ?
  [18675] libc: fpathconf(_PC_NAME_MAX) fails against large filesystems for
    32bit processes
  [18681] libc: regexp.h is obsolete and buggy, and should be desupported
  [18699] math: tilegx cproj() for various complex infinities does not yield
    infinity
  [18724] libc: Harden put*ent functions against data injection
  [18743] nptl: PowerPC: findutils testcase fails with --enable-lock-elision
  [18755] build: build errors with -DNDEBUG
  [18757] stdio: fmemopen fails to set errno on failure
  [18778] dynamic-link: ld.so crashes if failed dlopen causes libpthread to
    be forced unloaded
  [18781] libc: openat64 lacks O_LARGEFILE
  [18787] libc: [hppa] sysdeps/unix/sysv/linux/hppa/bits/atomic.h:71:6:
    error: can’t find a register in class ‘R1_REGS’ while reloading ‘asm’
  [18789] math: [ldbl-128ibm] sinhl inaccurate near 0
  [18790] math: [ldbl-128ibm] tanhl inaccurate
  [18795] libc: stpncpy fortification misses buffer lengths that are
    statically too large
  [18796] build: build fails for --disable-mathvec
  [18803] math: hypot missing underflows
  [18820] stdio: fmemopen may leak memory on failure
  [18823] math: csqrt spurious underflows
  [18824] math: fma spurious underflows
  [18825] math: pow missing underflows
  [18857] math: [ldbl-128ibm] nearbyintl wrongly uses signaling comparisons
  [18868] nptl: pthread_barrier_init typo has in-theory-undefined behavior
  [18870] build: sem_open.c fails to compile with missing symbol
    FUTEX_SHARED
  [18872] stdio: Fix memory leak in printf_positional
  [18873] libc: posix_fallocate overflow check ineffective
  [18875] math: Excess precision leads incorrect libm
  [18877] libc: arm: mmap offset regression
  [18887] libc: memory corruption when using getmntent on blank lines
  [18918] localedata: hu_HU: change time to HH:MM:SS format
  [18921] libc: Regression: extraneous stat() and fstat() performed by
    opendir()
  [18928] dynamic-link: LD_POINTER_GUARD is not ignored for privileged
    binaries (CVE-2015-8777)
  [18951] math: tgamma missing underflows
  [18952] math: [ldbl-128/ldbl-128ibm] lgammal spurious "invalid", incorrect
    signgam
  [18953] localedata: lt_LT: change currency symbol to the euro
  [18956] math: powf inaccuracy
  [18961] math: [i386] exp missing underflows
  [18966] math: [i386] exp10 missing underflows
  [18967] math: math.h XSI POSIX namespace (gamma, isnan, scalb)
  [18969] build: multiple string test failures due to missing locale
    dependencies
  [18970] libc: Reference of pthread_setcancelstate in libc.a
  [18977] math: float / long double Bessel functions not in XSI POSIX
  [18980] math: i386 libm functions return with excess range and precision
  [18981] math: i386 scalb*, ldexp return with excess range and precision
  [18982] stdio: va_list and vprintf
  [18985] time: Passing out of range data to strftime() causes a segfault
    (CVE-2015-8776)
  [19003] math: [x86_64] fma4 version of pow inappropriate contraction
  [19007] libc: FAIL: elf/check-localplt with -z now and binutils 2.26
  [19012] locale: iconv_open leaks memory on error path
  [19016] math: clog, clog10 inaccuracy
  [19018] nptl: Mangle function pointers in tls_dtor_list
  [19032] math: [i386] acosh (-qNaN) spurious "invalid" exception
  [19046] math: ldbl-128 / ldbl-128ibm lgamma bad overflow handling
  [19048] malloc: malloc: arena free list can become cyclic, increasing
    contention
  [19049] math: [powerpc] erfc incorrect zero sign
  [19050] math: [powerpc] log* incorrect zero sign
  [19058] math: [x86_64] Link fail with -fopenmp and -flto
  [19059] math: nexttoward overflow incorrect in non-default rounding modes
  [19071] math: ldbl-96 lroundl incorrect just below powers of 2
  [19074] network: Data race in _res_hconf_reorder_addrs
  [19076] math: [ldbl-128ibm] log1pl (-1) wrong sign of infinity
  [19077] math: [ldbl-128ibm] logl (1) incorrect sign of zero result
  [19078] math: [ldbl-128ibm] expl overflow incorrect in non-default
    rounding modes
  [19079] math: dbl-64/wordsize-64 lround based on llround incorrect for
    ILP32
  [19085] math: ldbl-128 lrintl, lroundl missing exceptions for 32-bit long
  [19086] manual: posix_fallocate64 documented argument order is wrong.
  [19088] math: lround, llround missing exceptions close to overflow
    threshold
  [19094] math: lrint, llrint missing exceptions close to overflow threshold
  [19095] math: dbl-64 lrint incorrect for 64-bit long
  [19122] dynamic-link: Unnecessary PLT relocations in librtld.os
  [19124] dynamic-link: ld.so failed to build with older assmebler
  [19125] math: [powerpc32] llroundf, llround incorrect exceptions
  [19129] dynamic-link: [arm] Concurrent lazy TLSDESC resolution can crash
  [19134] math: [powerpc32] lround, lroundf spurious exceptions
  [19137] libc: i386/epoll_pwait.S doesn't support cancellation
  [19143] nptl: Remove CPU set size checking from sched_setaffinity,
    pthread_setaffinity_np
  [19156] math: [ldbl-128] j0l spurious underflows
  [19164] nptl: tst-getcpu fails with many possible CPUs
  [19168] math: math/test-ildoubl and math/test-ldouble failure
  [19174] nptl: PowerPC: TLE enabled pthread mutex performs poorly.
  [19178] dynamic-link: ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA confuses
    prelink
  [19181] math: [i386/x86_64] fesetenv (FE_DFL_ENV), fesetenv
    (FE_NOMASK_ENV) do not clear SSE exceptions
  [19182] malloc: malloc deadlock between ptmalloc_lock_all and
    _int_new_arena/reused_arena
  [19189] math: [ldbl-128] log1pl (-qNaN) spurious "invalid" exception
  [19201] math: dbl-64 remainder incorrect sign of zero result
  [19205] math: bits/math-finite.h conditions do not match math.h and
    bits/mathcalls.h
  [19209] math: bits/math-finite.h wrongly maps ldexp to scalbn
  [19211] math: lgamma functions do not set signgam for -ffinite-math-only
    for C99-based standards
  [19212] libc: features.h not -Wundef clean
  [19213] math: [i386/x86_64] log* (1) incorrect zero sign for -ffinite-
    math-only
  [19214] libc: Family and model identification for AMD CPU's are incorrect.
  [19219] libc: GLIBC build fails for ia64 with missing __nearbyintl
  [19228] math: [powerpc] nearbyint wrongly clears "inexact", leaves traps
    disabled
  [19235] math: [powerpc64] lround, lroundf, llround, llroundf spurious
    "inexact" exceptions
  [19238] math: [powerpc] round, roundf spurious "inexact" for integer
    arguments
  [19242] libc: strtol incorrect in Turkish locales
  [19243] malloc: reused_arena can pick an arena on the free list, leading
    to an assertion failure and reference count corruption
  [19253] time: tzset() ineffective when temporary TZ did not include DST
    rules
  [19266] math: strtod ("NAN(I)") incorrect in Turkish locales
  [19270] math: [hppa] Shared libm missing __isnanl
  [19285] libc: [hppa] sysdeps/unix/sysv/linux/hppa/bits/mman.h: missing
    MAP_HUGETLB and MAP_STACK defines
  [19313] nptl: Wrong __cpu_mask for x32
  [19347] libc: grantpt: try to force a specific gid even without pt_chown
  [19349] math: [ldbl-128ibm] tanhl inaccurate for small arguments
  [19350] math: [ldbl-128ibm] sinhl spurious overflows
  [19351] math: [ldbl-128ibm] logl inaccurate near 1
  [19363] time: x32: times() return value wrongly truncates/sign extends
    from 32bit
  [19367] dynamic-link: Improve branch prediction on Silvermont
  [19369] network: Default domain name not reset by res_ninit when "search"
    / "domain" entry is removed from resolv.conf
  [19375] math: powerpc: incorrect results for POWER7 logb with negative
    subnormals
  [19385] localedata: bg_BG: time separator should be colon, not comma
  [19408] libc: linux personality syscall wrapper may erroneously return an
    error on 32-bit architectures
  [19415] libc: dladdr returns wrong names on hppa
  [19432] libc: iconv rejects redundant escape sequences in IBM900, IBM903,
    IBM905, IBM907, and IBM909
  [19439] math: Unix98 isinf and isnan functions conflict with C++11
  [19443] build: build failures with -DDEBUG
  [19451] build: Make check fails on test-double-vlen2
  [19462] libc: Glibc failed to build with -Os
  [19465] math: Wrong code with -Os
  [19466] time: time/tst-mktime2.c is compiled into an infinite loop with
    -Os
  [19467] string: Fast_Unaligned_Load needs to be enabled for Excavator core
    CPU's.
  [19475] libc: Glibc 2.22 doesn't build on sparc [PATCH]
  [19486] math: S390: Math tests fail with "Exception Inexact set".
  [19529] libc: [ARM]: FAIL: stdlib/tst-makecontext
  [19550] libc: [mips] mmap negative offset handling inconsistent with other
    architectures
  [19590] math: Fail to build shared objects that use libmvec.so functions.

Version 2.22

* The following bugs are resolved with this release:

  438, 2981, 4719, 6544, 6792, 11216, 12836, 13028, 13064, 13151, 13152,
  14094, 14113, 14292, 14841, 14906, 14958, 15319, 15467, 15790, 15969,
  16159, 16339, 16350, 16351, 16352, 16353, 16361, 16512, 16526, 16538,
  16559, 16560, 16704, 16783, 16850, 17053, 17090, 17195, 17269, 17293,
  17322, 17403, 17475, 17523, 17542, 17569, 17581, 17588, 17596, 17620,
  17621, 17628, 17631, 17692, 17711, 17715, 17776, 17779, 17792, 17833,
  17836, 17841, 17912, 17916, 17930, 17932, 17944, 17949, 17964, 17965,
  17967, 17969, 17977, 17978, 17987, 17991, 17996, 17998, 17999, 18007,
  18019, 18020, 18029, 18030, 18032, 18034, 18036, 18038, 18039, 18042,
  18043, 18046, 18047, 18049, 18068, 18078, 18080, 18093, 18100, 18104,
  18110, 18111, 18116, 18125, 18128, 18134, 18138, 18185, 18196, 18197,
  18206, 18210, 18211, 18217, 18219, 18220, 18221, 18234, 18244, 18245,
  18247, 18287, 18319, 18324, 18333, 18346, 18371, 18383, 18397, 18400,
  18409, 18410, 18412, 18418, 18422, 18434, 18444, 18457, 18468, 18469,
  18470, 18479, 18483, 18495, 18496, 18497, 18498, 18502, 18507, 18508,
  18512, 18513, 18519, 18520, 18522, 18527, 18528, 18529, 18530, 18532,
  18533, 18534, 18536, 18539, 18540, 18542, 18544, 18545, 18546, 18547,
  18549, 18553, 18557, 18558, 18569, 18583, 18585, 18586, 18592, 18593,
  18594, 18602, 18612, 18613, 18619, 18633, 18635, 18641, 18643, 18648,
  18657, 18676, 18694, 18696, 18887.

* Cache information can be queried via sysconf() function on s390 e.g. with
  _SC_LEVEL1_ICACHE_SIZE as argument.

* A buffer overflow in gethostbyname_r and related functions performing DNS
  requests has been fixed.  If the NSS functions were called with a
  misaligned buffer, the buffer length change due to pointer alignment was
  not taken into account.  This could result in application crashes or,
  potentially arbitrary code execution, using crafted, but syntactically
  valid DNS responses.  (CVE-2015-1781)

* The time zone file parser has been made more robust against crafted time
  zone files, avoiding heap buffer overflows related to the processing of
  the tzh_ttisstdcnt and tzh_ttisgmtcnt fields, and a stack overflow due to
  large time zone data files.  Overly long time zone specifiers in the TZ
  variable no longer result in stack overflows and crashes.

* A powerpc and powerpc64 optimization for TLS, similar to TLS descriptors
  for LD and GD on x86 and x86-64, has been implemented.  You will need
  binutils-2.24 or later to enable this optimization.

* Character encoding and ctype tables were updated to Unicode 7.0.0, using
  new generator scripts contributed by Pravin Satpute and Mike FABIAN (Red
  Hat).  These updates cause user visible changes, such as the fix for bug
  17998.

* CVE-2014-8121 The NSS backends shared internal state between the getXXent
  and getXXbyYY NSS calls for the same database, causing a denial-of-service
  condition in some applications.

* Added vector math library named libmvec with the following vectorized x86_64
  implementations: cos, cosf, sin, sinf, sincos, sincosf, log, logf, exp, expf,
  pow, powf.
  The library can be disabled with --disable-mathvec. Use of the functions is
  enabled with -fopenmp -ffast-math starting from -O1 for GCC version >= 4.9.0.
  Shared library libmvec.so is linked in as needed when using -lm (no need to
  specify -lmvec explicitly for not static builds).
  Visit <https://sourceware.org/glibc/wiki/libmvec> for detailed information.

* A new fmemopen implementation has been added with the goal of POSIX
  compliance. The new implementation fixes the following long-standing
  issues: BZ#6544, BZ#11216, BZ#12836, BZ#13151, BZ#13152, and BZ#14292. The
  old implementation is still present for use be by existing binaries.

* The 32-bit sparc sigaction ABI was inadvertently broken in the 2.20 and 2.21
  releases.  It has been fixed to match 2.19 and older, but binaries built
  against 2.20 and 2.21 might need to be recompiled.  See BZ#18694.

* Port to Native Client running on ARMv7-A (--host=arm-nacl).
  Contributed by Roland McGrath (Google).

* The header <regexp.h> is deprecated, and will be removed in a future
  release.  Use of this header will trigger a deprecation warning.
  Application developers should update their code to use <regex.h> instead.

  This header was formerly part of SUS, but was deprecated in 1994 and
  removed from the standard in 2001.  Also, the glibc implementation
  leaks memory.  See BZ#18681 for more details.

Version 2.21

* The following bugs are resolved with this release:

  6652, 10672, 12674, 12847, 12926, 13862, 14132, 14138, 14171, 14498,
  15215, 15378, 15884, 16009, 16418, 16191, 16469, 16576, 16617, 16618,
  16619, 16657, 16740, 16857, 17192, 17266, 17273, 17344, 17363, 17370,
  17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508, 17522, 17555,
  17570, 17571, 17572, 17573, 17574, 17582, 17583, 17584, 17585, 17589,
  17594, 17601, 17608, 17616, 17625, 17630, 17633, 17634, 17635, 17647,
  17653, 17657, 17658, 17664, 17665, 17668, 17682, 17702, 17717, 17719,
  17722, 17723, 17724, 17725, 17732, 17733, 17744, 17745, 17746, 17747,
  17748, 17775, 17777, 17780, 17781, 17782, 17791, 17793, 17796, 17797,
  17801, 17803, 17806, 17834, 17844, 17848, 17868, 17869, 17870, 17885,
  17892.

* CVE-2015-1472 CVE-2015-1473 Under certain conditions wscanf can allocate
  too little memory for the to-be-scanned arguments and overflow the
  allocated buffer.  The implementation now correctly computes the required
  buffer size when using malloc, and switches to malloc from alloca as
  intended.

* A new semaphore algorithm has been implemented in generic C code for all
  machines. Previous custom assembly implementations of semaphore were
  difficult to reason about or ensure that they were safe. The new version
  of semaphore supports machines with 64-bit or 32-bit atomic operations.
  The new semaphore algorithm is used by sem_init, sem_open, sem_post,
  sem_wait, sem_timedwait, sem_trywait, and sem_getvalue.

* Port to Altera Nios II has been contributed by Mentor Graphics.

* Optimized strcpy, stpcpy, strncpy, stpncpy, strcmp, and strncmp
  implementations for powerpc64/powerpc64le.
  Implemented by Adhemerval Zanella (IBM).

* Added support for TSX lock elision of pthread mutexes on powerpc32, powerpc64
  and powerpc64le.  This may improve lock scaling of existing programs on
  HTM capable systems.  The lock elision code is only enabled with
  --enable-lock-elision=yes.  Also, the TSX lock elision implementation for
  powerpc will issue a transaction abort on every syscall to avoid side
  effects being visible outside transactions.

* Optimized strcpy, stpcpy, strchrnul and strrchr implementations for
  AArch64.  Contributed by ARM Ltd.

* i386 memcpy functions optimized with SSE2 unaligned load/store.

* CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag
  under certain input conditions resulting in the execution of a shell for
  command substitution when the application did not request it. The
  implementation now checks WRDE_NOCMD immediately before executing the
  shell and returns the error WRDE_CMDSUB as expected.

* CVE-2012-3406 printf-style functions could run into a stack overflow when
  processing format strings with a large number of format specifiers.

* CVE-2014-9402 The nss_dns implementation of getnetbyname could run into an
  infinite loop if the DNS response contained a PTR record of an unexpected
  format.

* The minimum GCC version that can be used to build this version of the GNU
  C Library is GCC 4.6.  Older GCC versions, and non-GNU compilers, can
  still be used to compile programs using the GNU C Library.

* The GNU C Library is now built with -Werror by default.  This can be
  disabled by configuring with --disable-werror.

* New locales: tu_IN, bh_IN, raj_IN, ce_RU.

* The obsolete sigvec function has been removed.  This was the original
  4.2BSD interface that inspired the POSIX.1 sigaction interface, which
  programs have been using instead for about 25 years.  Of course, ABI
  compatibility for old binaries using sigvec remains intact.

* Merged gettext 0.19.3 into the intl subdirectory.  This fixes building
  with newer versions of bison.

* Support for MIPS o32 FPXX, FP64A and FP64 ABI Extensions.
  The original MIPS o32 hard-float ABI requires an FPU where double-precision
  registers overlay two consecutive single-precision registers.  MIPS32R2
  introduced a new FPU mode (FR=1) where double-precision registers extend the
  corresponding single-precision registers which is incompatible with the
  o32 hard-float ABI.  The MIPS SIMD ASE and the MIPSR6 architecture both
  require the use of FR=1 making a transition necessary.  New o32 ABI
  extensions enable users to migrate over time from the original o32 ABI
  through to the updated o32 FP64 ABI.  To achieve this the dynamic linker now
  tracks the ABI of any loaded object and verifies that new objects are
  compatible.  Mode transitions will also be requested as required and
  unsupportable objects will be rejected.  The ABI checks include both soft and
  hard float ABIs for o32, n32 and n64.

  GCC 5 with GNU binutils 2.25 onwards:
  It is strongly recommended that all o32 system libraries are built using the
  new o32 FPXX ABI (-mfpxx) to facilitate the transition as this is compatible
  with the original and all new o32 ABI extensions.  Configure a MIPS GCC
  compiler using --with-fp-32=xx to set this by default.

Version 2.20

* The following bugs are resolved with this release:

  6804, 9894, 11505, 12994, 13347, 13651, 14308, 14770, 15119, 15132, 15347,
  15514, 15698, 15804, 15894, 15946, 16002, 16064, 16095, 16194, 16198,
  16275, 16284, 16287, 16315, 16348, 16349, 16354, 16357, 16362, 16447,
  16516, 16532, 16539, 16545, 16561, 16562, 16564, 16574, 16599, 16600,
  16609, 16610, 16611, 16613, 16619, 16623, 16629, 16632, 16634, 16639,
  16642, 16648, 16649, 16670, 16674, 16677, 16680, 16681, 16683, 16689,
  16695, 16701, 16706, 16707, 16712, 16713, 16714, 16724, 16731, 16739,
  16740, 16743, 16754, 16758, 16759, 16760, 16770, 16786, 16789, 16791,
  16796, 16799, 16800, 16815, 16823, 16824, 16831, 16838, 16839, 16849,
  16854, 16876, 16877, 16878, 16882, 16885, 16888, 16890, 16892, 16912,
  16915, 16916, 16917, 16918, 16922, 16927, 16928, 16932, 16943, 16958,
  16965, 16966, 16967, 16977, 16978, 16984, 16990, 16996, 17009, 17022,
  17031, 17042, 17048, 17050, 17058, 17061, 17062, 17069, 17075, 17078,
  17079, 17084, 17086, 17088, 17092, 17097, 17125, 17135, 17137, 17150,
  17153, 17187, 17213, 17259, 17261, 17262, 17263, 17319, 17325, 17354.

* Reverted change of ABI data structures for s390 and s390x:
  On s390 and s390x the size of struct ucontext and jmp_buf was increased in
  2.19. This change is reverted in 2.20. The introduced 2.19 symbol versions
  of getcontext, setjmp, _setjmp, __sigsetjmp, longjmp, _longjmp, siglongjmp
  are preserved pointing straight to the same implementation as the old ones.
  Given that, new callers will simply provide a too-big buffer to these
  functions. Any applications/libraries out there that embed jmp_buf or
  ucontext_t in an ABI-relevant data structure that have already been rebuilt
  against 2.19 headers will have to rebuilt again. This is necessary in any
  case to revert the breakage in their ABI caused by the glibc change.

* Support for file description locks is added to systems running the
  Linux kernel. The standard file locking interfaces are extended to
  operate on file descriptions, not file descriptors, via the use of
  F_OFD_GETLK, F_OFD_SETLK, and F_OFD_SETLKW. File description locks
  are associated with an open file instead of a process.

* Optimized strchr implementation for AArch64.  Contributed by ARM Ltd.

* The minimum Linux kernel version that this version of the GNU C Library
  can be used with is 2.6.32.

* Running the testsuite no longer terminates as soon as a test fails.
  Instead, a file tests.sum (xtests.sum from "make xcheck") is generated,
  with PASS or FAIL lines for individual tests.  A summary of the results is
  printed, including a list of failing lists, and "make check" exits with
  error status if there were any unexpected failures.  "make check
  stop-on-test-failure=y" may be used to keep the old behavior.

* The am33 port, which had not worked for several years, has been removed
  from ports.

* The _BSD_SOURCE and _SVID_SOURCE feature test macros are no longer
  supported; they now act the same as _DEFAULT_SOURCE (but generate a
  warning).  Except for cases where _BSD_SOURCE enabled BSD interfaces that
  conflicted with POSIX (support for which was removed in 2.19), the
  interfaces those macros enabled remain available when compiling with
  _GNU_SOURCE defined, with _DEFAULT_SOURCE defined, or without any feature
  test macros defined.

* Optimized strcmp implementation for ARMv7.  Contributed by ARM Ltd.

* Added support for TX lock elision of pthread mutexes on s390 and s390x.
  This may improve lock scaling of existing programs on TX capable systems.
  The lock elision code is only built with --enable-lock-elision=yes and
  then requires a GCC version supporting the TX builtins.  With lock elision
  default mutexes are elided via __builtin_tbegin, if the cpu supports
  transactions. By default lock elision is not enabled and the elision code
  is not built.

* CVE-2014-4043 The posix_spawn_file_actions_addopen implementation did not
  copy the path argument.  This allowed programs to cause posix_spawn to
  deference a dangling pointer, or use an unexpected pathname argument if
  the string was modified after the posix_spawn_file_actions_addopen
  invocation.

* All supported architectures now use the main glibc sysdeps directory
  instead of some being in a separate "ports" directory (which was
  distributed separately before glibc 2.17).

* The NPTL implementation of POSIX pthreads is no longer an "add-on".
  On configurations that support it (all Linux configurations), it's now
  used regardless of the --enable-add-ons switch to configure.  It is no
  longer possible to build such configurations without pthreads support.

* Locale names, including those obtained from environment variables (LANG
  and the LC_* variables), are more tightly checked for proper syntax.
  setlocale will now fail (with EINVAL) for locale names that are overly
  long, contain slashes without starting with a slash, or contain ".." path
  components. (CVE-2014-0475)  Previously, some valid locale names were
  silently replaced with the "C" locale when running in AT_SECURE mode
  (e.g., in a SUID program).  This is no longer necessary because of the
  additional checks.

* On x86-64, the dynamic linker's lazy-binding support is now compatible
  with application code using Intel MPX instructions.  (With all previous
  versions, the MPX register state could be clobbered when making calls
  into or out of a shared library.)  Note that while the new dynamic
  linker is compatible with all known x86 hardware whether or not it
  supports Intel MPX, some x86 instruction-set emulators might fail to
  handle the new instruction encodings.  This is known to affect Valgrind
  versions up through 3.9 (but will be fixed in the forthcoming 3.10
  release), and might affect other tools that do instruction emulation.

* Support for loadable gconv transliteration modules has been removed.
  The support for transliteration modules has been non-functional for
  over a decade, and the removal is prompted by security defects.  The
  normal gconv conversion modules are still supported.  Transliteration
  with //TRANSLIT is still possible, and the //IGNORE specifier
  continues to be  supported. (CVE-2014-5119)

* Decoding a crafted input sequence in the character sets IBM933, IBM935,
  IBM937, IBM939, IBM1364 could result in an out-of-bounds array read,
  resulting a denial-of-service security vulnerability in applications which
  use functions related to iconv. (CVE-2014-6040)

Version 2.19

* The following bugs are resolved with this release:

  156, 387, 431, 762, 832, 926, 2801, 4772, 6786, 6787, 6807, 6810, 6981,
  7003, 9721, 9954, 10253, 10278, 11087, 11157, 11214, 12100, 12486, 12751,
  12986, 13028, 13982, 13985, 14029, 14032, 14120, 14143, 14155, 14286,
  14547, 14699, 14752, 14782, 14876, 14910, 15004, 15048, 15073, 15089,
  15128, 15218, 15268, 15277, 15308, 15362, 15374, 15400, 15425, 15427,
  15483, 15522, 15531, 15532, 15593, 15601, 15608, 15609, 15610, 15632,
  15640, 15670, 15672, 15680, 15681, 15723, 15734, 15735, 15736, 15748,
  15749, 15754, 15760, 15763, 15764, 15797, 15799, 15825, 15843, 15844,
  15846, 15847, 15849, 15850, 15855, 15856, 15857, 15859, 15867, 15886,
  15887, 15890, 15892, 15893, 15895, 15897, 15901, 15905, 15909, 15915,
  15917, 15919, 15921, 15923, 15939, 15941, 15948, 15963, 15966, 15968,
  15985, 15988, 15997, 16032, 16034, 16036, 16037, 16038, 16041, 16046,
  16055, 16071, 16072, 16074, 16077, 16078, 16103, 16112, 16143, 16144,
  16146, 16150, 16151, 16153, 16167, 16169, 16172, 16195, 16214, 16245,
  16271, 16274, 16283, 16289, 16293, 16314, 16316, 16330, 16337, 16338,
  16356, 16365, 16366, 16369, 16372, 16375, 16379, 16381, 16384, 16385,
  16386, 16387, 16390, 16394, 16398, 16400, 16407, 16408, 16414, 16430,
  16431, 16453, 16474, 16506, 16510, 16529

* Slovenian translations for glibc messages have been contributed by the
  Translation Project's Slovenian team of translators.

* The public headers no longer use __unused nor __block.  This change is to
  support compiling programs that are derived from BSD sources and use
  __unused internally, and to support compiling with Clang's -fblock
  extension which uses __block.

* CVE-2012-4412 The strcoll implementation caches indices and rules for
  large collation sequences to optimize multiple passes.  This cache
  computation may overflow for large collation sequences and may cause a
  stack or buffer overflow.  This is now fixed to use a slower algorithm
  which does not use a cache if there is an integer overflow.

* CVE-2012-4424 The strcoll implementation uses malloc to cache indices and
  rules for large collation sequences to optimize multiple passes and falls
  back to alloca if malloc fails, resulting in a possible stack overflow.
  The implementation now falls back to an uncached collation sequence lookup
  if malloc fails.

* CVE-2013-4788 The pointer guard used for pointer mangling was not
  initialized for static applications resulting in the security feature
  being disabled. The pointer guard is now correctly initialized to a
  random value for static applications. Existing static applications need
  to be recompiled to take advantage of the fix (bug 15754).

* CVE-2013-4237 The readdir_r function could write more than NAME_MAX bytes
  to the d_name member of struct dirent, or omit the terminating NUL
  character.  (Bugzilla #14699).

* CVE-2013-4332 The pvalloc, valloc, memalign, posix_memalign and
  aligned_alloc functions could allocate too few bytes or corrupt the
  heap when passed very large allocation size values (Bugzilla #15855,
  #15856, #15857).

* CVE-2013-4458 Stack overflow in getaddrinfo with large number of results
  for AF_INET6 has been fixed (Bugzilla #16072).

* New locales: ak_GH, anp_IN, ar_SS, cmn_TW, hak_TW, lzh_TW, nan_TW, pap_AW,
  pap_CW, quz_PE, the_NP.

* Substantially revised locales: gd_GB, ht_HT

* The LC_ADDRESS field was updated to support country_car for almost all
  supported locales.

* ISO 1427 definitions were updated.

* ISO 3166 definitions were updated.

* The localedef utility now supports --big-endian and --little-endian
  command-line options to generate locales for a different system from that
  for which the C library was built.

* Binary locale files now only depend on the endianness of the system for
  which they are generated and not on other properties of that system.  As a
  consequence, binary files generated with new localedef may be incompatible
  with old versions of the GNU C Library, and binary files generated with
  old localedef may be incompatible with this version of the GNU C Library,
  in the following circumstances:

  + Locale files may be incompatible on m68k systems.

  + Locale archive files (but not separate files for individual locales) may
    be incompatible on systems where plain "char" is signed.

* The configure option --disable-versioning has been removed.  Builds with
  --disable-versioning had not worked for several years.

* ISO 639 definitions were updated for Chiga (cgg) and Chinese (gan, hak, czh,
  cjy, lzh, cmn, mnp, cdo, czo, cpx, wuu, hsn, yue).

* SystemTap probes for malloc have been introduced.

* SystemTap probes for slow multiple precision fallback paths of
  transcendental functions have been introduced.

* Support for powerpc64le has been added.

* The soft-float powerpc port now supports e500 processors.

* Support for STT_GNU_IFUNC symbols added for ppc32/power4+ and ppc64.

* A new feature test macro _DEFAULT_SOURCE is available to enable the same
  set of header declarations that are enabled by default, even when other
  feature test macros or compiler options such as -std=c99 would otherwise
  disable some of those declarations.

* The _BSD_SOURCE feature test macro no longer enables BSD interfaces that
  conflict with POSIX.  The libbsd-compat library (which was a dummy library
  that did nothing) has also been removed.

* Preliminary documentation about Multi-Thread, Async-Signal and
  Async-Cancel Safety has been added.

* Change of ABI data structures for s390 and s390x:
  On s390 and s390x the size of struct ucontext and jmp_buf was increased to
  allow for future hardware extensions. All library functions that accept or
  return these structures were versioned in order to provide backwards
  compatibility with existing code. However, not all cases can be handled
  with interface versioning. If an application embeds either structure into
  another structure and that structure is passed to another compilation unit
  which expects the newer larger-sized object then any access to the new
  fields will result in undefined behaviour. Similarly any access to fields
  that were moved by the enlarging of the structures will cause undefined
  behaviour. To fix the undefined behaviour all objects that are part of the
  final in-memory image must agree on the size of structures, and this may
  require recompilation.

Version 2.18

* The following bugs are resolved with this release:

  2546, 2560, 5159, 6809, 7006, 10060, 10062, 10283, 10357, 10686, 11120,
  11561, 12310, 12387, 12492, 12515, 12723, 13550, 13889, 13951, 13988,
  14142, 14176, 14200, 14256, 14280, 14293, 14317, 14327, 14478, 14496,
  14582, 14686, 14812, 14888, 14894, 14907, 14908, 14909, 14920, 14941,
  14952, 14964, 14981, 14982, 14985, 14991, 14994, 14996, 15000, 15003,
  15006, 15007, 15014, 15020, 15022, 15023, 15036, 15054, 15055, 15062,
  15078, 15084, 15085, 15086, 15100, 15160, 15214, 15221, 15232, 15234,
  15283, 15285, 15287, 15304, 15305, 15307, 15309, 15327, 15330, 15335,
  15336, 15337, 15339, 15342, 15346, 15359, 15361, 15366, 15380, 15381,
  15394, 15395, 15405, 15406, 15409, 15416, 15418, 15419, 15423, 15424,
  15426, 15429, 15431, 15432, 15441, 15442, 15448, 15465, 15480, 15485,
  15488, 15490, 15492, 15493, 15497, 15506, 15529, 15536, 15553, 15577,
  15583, 15618, 15627, 15631, 15654, 15655, 15666, 15667, 15674, 15711,
  15755, 15759.

* CVE-2013-2207 Incorrectly granting access to another user's pseudo-terminal
  has been fixed by disabling the use of pt_chown (Bugzilla #15755).
  Distributions can re-enable building and using pt_chown via the new configure
  option `--enable-pt_chown'.  Enabling the use of pt_chown carries with it
  considerable security risks and should only be used if the distribution
  understands and accepts the risks.

* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
  #15078).

* CVE-2013-1914 Stack overflow in getaddrinfo with many results has been
  fixed (Bugzilla #15330).

* Add support for calling C++11 thread_local object destructors on thread
  and program exit.  This needs compiler support for offloading C++11
  destructor calls to glibc.

* Improved worst case performance of libm functions with double inputs and
  output.

* Support for priority inherited mutexes in pthread condition variables on
  non-x86 architectures.

* Port to Xilinx MicroBlaze contributed by David Holsgrove.

* Optimized string functions for AArch64.  Implemented by Marcus Shawcroft.

* Optimized string functions for ARM.  Implemented by Will Newton and
  Richard Henderson.

* Optimized libm functions for SPARC.  Implemented by David S. Miller.

* Support for building more of ARM glibc as Thumb-2 code.  Implemented by
  Richard Henderson.

* Support for building most of MIPS glibc as MIPS16 code.  Implemented by
  Chung-Lin Tang, Maciej W. Rozycki and Maxim Kuvyrkov.

* Added a benchmark framework to track performance of functions in glibc.

* New <math.h> macro named issignaling to check for a signaling NaN (sNaN).
  It is based on draft TS 18661 and currently enabled as a GNU extension.

* On Linux, the clock function now uses the clock_gettime system call
  for improved precision, rather than old times system call.

* Added support for version-3 tz format files.  This is needed when using
  the tz database release 2013e or later, and affects a few unusual cases --
  currently only TZ='America/Godthab' for time stamps after 2037.

* Added new API functions pthread_getattr_default_np and
  pthread_setattr_default_np to get and set the default pthread
  attributes of a process.

* Added support for TSX lock elision for pthread mutexes on i386 and x86-64.
  This may improve lock scaling of existing programs on TSX capable systems.
  When the --enable-lock-elision=yes parameter is specified at configure
  time lock elision will be enabled by default for all PTHREAD_MUTEX_DEFAULT
  mutexes.

* Support added for AT_HWCAP2 (to coincide with Linux kernel 3.10
  availability).  Implemented by Ryan S. Arnold.

* Support added for POWER8 platform.  Implemented by Ryan S. Arnold.

Version 2.17

* The following bugs are resolved with this release:

  1349, 3439, 3479, 3665, 5044, 5246, 5298, 5400, 6530, 6677, 6778, 6808,
  9685, 9914, 10014, 10038, 10114, 10191, 10631, 10873, 11438, 11607, 11638,
  11741, 12140, 13013, 13412, 13542, 13601, 13603, 13604, 13629, 13679,
  13696, 13698, 13717, 13741, 13759, 13761, 13763, 13881, 13939, 13950,
  13952, 13966, 14042, 14047, 14090, 14150, 14151, 14152, 14154, 14157,
  14166, 14173, 14195, 14197, 14237, 14246, 14251, 14252, 14283, 14298,
  14303, 14307, 14328, 14331, 14336, 14337, 14347, 14349, 14368, 14376,
  14417, 14447, 14459, 14476, 14477, 14501, 14505, 14510, 14516, 14518,
  14519, 14530, 14532, 14538, 14543, 14544, 14545, 14557, 14562, 14568,
  14576, 14579, 14583, 14587, 14595, 14602, 14610, 14621, 14638, 14645,
  14648, 14652, 14660, 14661, 14669, 14672, 14683, 14694, 14716, 14719,
  14743, 14767, 14783, 14784, 14785, 14793, 14796, 14797, 14801, 14803,
  14805, 14807, 14811, 14815, 14821, 14822, 14824, 14828, 14831, 14833,
  14835, 14838, 14856, 14863, 14865, 14866, 14868, 14869, 14871, 14872,
  14879, 14889, 14893, 14898, 14914.

* Optimization of memcpy for MIPS.

* CVE-2011-4609 svc_run() produces high cpu usage when accept fails with
  EMFILE has been fixed (Bugzilla #14889).

* The add-on ports collection is now distributed in the "ports" subdirectory
  of the main GNU C Library distribution, rather than separately.

* Port to ARM AArch64 contributed by Linaro.

* Support for STT_GNU_IFUNC symbols added for s390 and s390x.
  Optimized versions of memcpy, memset, and memcmp added for System z10 and
  zEnterprise z196.
  Implemented by Andreas Krebbel.

* The new function secure_getenv allows secure access to the environment,
  returning NULL if running in a SUID/SGID process.  This function replaces
  the internal function __secure_getenv.

* SystemTap static probes have been added into the dynamic linker.
  Implemented by Gary Benson.

* Optimizations of string functions strstr, strcasestr and memmem.
  Implemented by Maxim Kuvyrkov.

* The minimum Linux kernel version that this version of the GNU C Library
  can be used with is 2.6.16.

* Optimizations of string functions memchr, wcschr, wcscpy, and wcsrchr for
  powerpc POWER7.  Implemented by Will Schmidt.

* New configure option --disable-nscd builds the C library such that it
  never attempts to contact the Name Service Caching Daemon (nscd).
  New configure option --disable-build-nscd avoids building nscd itself;
  this is the default if --disable-nscd is used.

* Improved support for cross-compilation, including cross-testing and
  bootstrap builds without a previously built glibc.

* Several testsuite tests are now able to test multiple IFUNC variants of an
  interface, rather than just testing the one that would be chooen by
  default.

* New configure options --with-bugurl and --with-pkgversion, for
  distributors to use to embed their bug-reporting and package version
  information in --help and --version output.

* The ttyname and ttyname_r functions on Linux now fall back to searching for
  the tty file descriptor in /dev/pts or /dev if /proc is not available.  This
  allows creation of chroots without the procfs mounted on /proc.

* The `crypt' function now fails if passed salt bytes that violate the
  specification for those values.  On Linux, the `crypt' function will
  consult /proc/sys/crypto/fips_enabled to determine if "FIPS mode" is
  enabled, and fail on encrypted strings using the MD5 or DES algorithm
  when the mode is enabled.

* The `clock_*' suite of functions (declared in <time.h>) is now available
  directly in the main C library.  Previously it was necessary to link with
  -lrt to use these functions.  This change has the effect that a
  single-threaded program that uses a function such as `clock_gettime' (and
  is not linked with -lrt) will no longer implicitly load the pthreads
  library at runtime and so will not suffer the overheads associated with
  multi-thread support in other code such as the C++ runtime library.

* New locales: ayc_PE, doi_IN, ia_FR, mni_IN, nhn_MX, niu_NU, niu_NZ,
  sat_IN, and szl_PL.

Version 2.16

* The following bugs are resolved with this release:

  174, 208, 350, 369, 411, 706, 766, 2074, 2541, 2547, 2548, 2550, 2551,
  2552, 2553, 2554, 2562, 2563, 2565, 2566, 2570, 2576, 2636, 2678, 3335,
  3440, 3748, 3768, 3866, 3868, 3906, 3976, 3992, 4026, 4108, 4596, 4822,
  5077, 5461, 5805, 5993, 6471, 6486, 6578, 6649, 6730, 6770, 6794, 6884,
  6890, 6894, 6895, 6907, 6911, 6959, 7064, 9739, 9902, 10110, 10135, 10140,
  10153, 10210, 10254, 10346, 10375, 10545, 10716, 10846, 10882, 11174,
  11261, 11322, 11365, 11451, 11494, 11521, 11677, 11837, 11959, 12047,
  12097, 12193, 12194, 12297, 12298, 12301, 12340, 12354, 12416, 12495,
  13058, 13223, 13361, 13525, 13526, 13527, 13528, 13529, 13530, 13531,
  13532, 13533, 13547, 13551, 13552, 13553, 13555, 13556, 13559, 13563,
  13566, 13576, 13579, 13583, 13592, 13594, 13613, 13618, 13637, 13656,
  13658, 13673, 13691, 13695, 13704, 13705, 13706, 13718, 13726, 13738,
  13739, 13743, 13750, 13758, 13760, 13761, 13775, 13786, 13787, 13792,
  13806, 13824, 13840, 13841, 13844, 13846, 13848, 13851, 13852, 13854,
  13871, 13872, 13873, 13879, 13882, 13883, 13884, 13885, 13886, 13892,
  13895, 13908, 13910, 13911, 13912, 13913, 13914, 13915, 13916, 13917,
  13918, 13919, 13920, 13921, 13922, 13923, 13924, 13926, 13927, 13928,
  13938, 13941, 13942, 13954, 13955, 13956, 13963, 13967, 13968, 13970,
  13973, 13979, 13983, 13986, 13996, 14012, 14027, 14033, 14034, 14036,
  14040, 14043, 14044, 14048, 14049, 14050, 14053, 14055, 14059, 14064,
  14075, 14080, 14083, 14103, 14104, 14109, 14112, 14117, 14122, 14123,
  14134, 14153, 14183, 14188, 14199, 14210, 14218, 14229, 14241, 14273,
  14277, 14278.

* Support for the x32 ABI on x86-64 added.  The x32 target is selected by
  configuring glibc with:
	BUILD_CC='gcc' CC='gcc -mx32' CXX='g++ -mx32'
  Visit <http://sites.google.com/site/x32abi/> for more x32 ABI info.
  Implemented by H.J. Lu.

* ISO C11 support:

  + define static_assert

  + do not declare gets

  + declare at_quick_exit and quick_exit also for ISO C11

  + aligned_alloc.  NB: The code is deliberately allows the size parameter
    to not be a multiple of the alignment.  This is a moronic requirement
    in the standard but it is only a requirement on the caller, not the
    implementation.

  + timespec_get added

  + uchar.h support added

  + CMPLX, CMPLXF, CMPLXL added

  Implemented by Ulrich Drepper.

* Support for the IA-64 has been moved to ports.

* Remove support for anything but ELF binary format

* Checking versions of poll, ppoll added.
  Implemented by Ulrich Drepper.

* More generic and 64-bit performance optimizations to math functions.
  Implemented by Ulrich Drepper.

* New configure option --enable-obsolete-rpc makes the deprecated RPC
  headers and functions available at compile time as they were before
  version 2.14.  This option will be removed at some time in the future
  after the TI-RPC library becomes fully sufficient for the needs of
  existing applications.

* Compatibility code for Linux kernel versions before 2.4 has been removed.
  Note that glibc is not expected to work with any Linux kernel version
  before 2.6.

* New header <sys/auxv.h> and function getauxval allowing easy access to
  the AT_* key-value pairs passed from the Linux kernel.  The header also
  defines the HWCAP_* bits associated with the AT_HWCAP key.

* New locales: mag_IN

* New configure option --enable-systemtap builds SystemTap static probes
  into libc for setjmp and longjmp and into libpthread for various operations.
  So far the setjmp/longjmp probes and some of the libpthread probes are
  provided only for i*86 and x86_64.
  Implemented by Roland McGrath and Rayson Ho.

* Optimized expf for x86-32 and x86-64.  Implemented by Liubov Dmitrieva.

* More optimized functions for PowerPC.  Implemented by Adhemerval Zanella
  and Will Schmidt.

* More optimized functions for SPARC.  Implemented by David S. Miller.

* Improved support for cross-compilation, especially bootstrap builds
  without a previously built glibc.

* Ports for the TILE-Gx and TILEPro families of processors.  Contributed by
  Chris Metcalf from Tilera.

* Support for the old ARM ABI has been removed from ports.  Only the EABI is
  now supported for ARM processors.

* The hard-float variant of the ARM EABI now uses /lib/ld-linux-armhf.so.3
  as the name of the dynamic linker, to distinguish it from the
  /lib/ld-linux.so.3 dynamic linker used for the base EABI.

* Support for CRIS has been removed from ports.

* A new class of installed header has been documented for low-level
  platform-specific functionality.  PowerPC added the first instance with a
  function to provide time base register access.  Contributed by Tulio
  Magno Quites Machado Filho.

* ix86 configurations now install header files that are consistent with
  what x86-64 configurations install.  These same header files can be used
  for -m32, -m64, or -mx32 builds.
  Contributed by H.J. Lu.

* Math library bug fixes.  A thorough audit of all open math library bugs was
  conducted by Joseph Myers.  Significant progress was made on many math
  library bugs resulting in more accurate exceptions and function results.
  Many thanks to all those that contributed including Andreas Jaeger for his
  patch review and work on the x87 trigonometric instruction issues.

* Timezone data is no longer installed.  Timezone-related binaries and scripts
  will continue to be installed.  Users should obtain their timezone data from
  their distribution provider or from the tzdata package at
  <ftp://munnari.oz.au/pub/>.

Version 2.15

* The following bugs are resolved with this release:

  6779, 6783, 9696, 10103, 10709, 11589, 11929, 12403, 12786, 12840, 12847,
  12868, 12852, 12874, 12885, 12892, 12906, 12907, 12922, 12935, 12962,
  13007, 13021, 13061, 13062, 13067, 13068, 13085, 13088, 13090, 13092,
  13096, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13166, 13179,
  13185, 13189, 13192, 13268, 13276, 13282, 13291, 13305, 13328, 13335,
  13337, 13344, 13358, 13367, 13413, 13416, 13423, 13439, 13446, 13472,
  13484, 13506, 13515, 13523, 13524, 13538, 13540

* New program pldd to list loaded object of a process
  Implemented by Ulrich Drepper.

* Add nss_db support back to glibc.  No more dependency on Berkeley db
  and support for initgroups lookups.
  Implemented by Ulrich Drepper.

* Optimized strcpy, strncpy, stpcpy, stpncpy for SSE2 and SSSE3 on x86-32.
  Contributed by HJ Lu.

* Improved strcpy, strncpy, stpcpy, stpncpy for SSE2 and SSSE3 on x86-64.
  Contributed by HJ Lu.

* Optimized strcat, strncat on x86-64 and optimized wcscmp, wcslen, strnlen
  on x86-32 and x86-64.
  Contributed by Liubov Dmitrieva.

* Optimized strchr and strrchr for SSE on x86-32.
  Contributed by Liubov Dmitrieva.

* Optimized memchr, memrchr, rawmemchr, memcmp, wmemcmp, wcschr, wcscpy
  for x86-64 and x86-32.
  Contributed by Liubov Dmitrieva.

* New interfaces: scandirat, scandirat64
  Implemented by Ulrich Drepper.

* Checking versions of FD_SET, FD_CLR, and FD_ISSET added.
  Implemented by Ulrich Drepper.

* nscd now also caches the netgroup database.
  Implemented by Ulrich Drepper.

* Integrate libm with gcc's -ffinite-math-only option.
  Implemented by Ulrich Drepper.

* Lots of generic, 64-bit, and x86-64-specific performance optimizations
  to math functions.  Implemented by Ulrich Drepper.

* Optimized strcasecmp and strncasecmp for AVX on x86-64.
  Implemented by Ulrich Drepper.

* New Linux interfaces: process_vm_readv, process_vm_writev

* Optimized strcasecmp and strncasecmp for SSSE3 and SSE4.2 on x86-32.
  Implemented by Ulrich Drepper.

* Optimized nearbyint and strcasecmp for PPC.
  Implemented by Adhemerval Zanella.

* New locales: bho_IN, unm_US, es_CU, ta_LK

Version 2.14

* The following bugs are resolved with this release:

  386, 6420, 7101, 9730, 9732, 9809, 10138, 10149, 10157, 11099, 11257,
  11258, 11487, 11532, 11558, 11578, 11634, 11653, 11668, 11697, 11724,
  11781, 11799, 11820, 11837, 11857, 11884, 11892, 11895, 11901, 11945,
  11947, 11952, 11987, 12052, 12083, 12158, 12178, 12200, 12346, 12350,
  12393, 12420, 12432, 12445, 12449, 12453, 12454, 12460, 12469, 12489,
  12509, 12510, 12511, 12518, 12527, 12541, 12545, 12551, 12582, 12583,
  12587, 12597, 12601, 12611, 12625, 12626, 12631, 12650, 12653, 12655,
  12660, 12671, 12681, 12684, 12685, 12711, 12713, 12714, 12717, 12723,
  12724, 12734, 12738, 12746, 12766, 12775, 12777, 12782, 12788, 12792,
  12795, 12811, 12813, 12814, 12841

* The RPC implementation in libc is obsoleted.  Old programs keep working
  but new programs cannot be linked with the routines in libc anymore.
  Programs in need of RPC functionality must be linked against TI-RPC.
  The TI-RPC implementation is IPv6 enabled and there are other benefits.

  Visible changes of this change include (obviously) the inability to link
  programs using RPC functions without referencing the TI-RPC library and the
  removal of the RPC headers from the glibc headers.
  Implemented by Ulrich Drepper.

* New Linux interfaces: clock_adjtime, name_to_handle_at, open_by_handle_at,
  syncfs, setns, sendmmsg

* New locales: os_RU, bem_ZA, en_ZA, ff_SN, sw_KE, sw_TZ, lb_LU, wae_CH,
  yue_HK, lij_IT, mhr_RU

* New encodings: CP770, CP771, CP772, CP773, CP774

* New program sotruss to trace calls through PLTs
  Implemented by Ulrich Drepper.

* The malloc hook implementation is marked deprecated and will be removed
  from the default implementation in the next version.  The design never
  worked ever since the introduction of threads.  Even programs which do
  not create threads themselves can use multiple threads created internally.

Version 2.13

* The following bugs are resolved with this release:

  3268, 6812, 7066, 10085, 10484, 10563, 10851, 11149, 11155, 11577, 11611,
  11640, 11655, 11701, 11840, 11856, 11883, 11903, 11904, 11968, 11979,
  12005, 12037, 12067, 12077, 12078, 12092, 12093, 12107, 12108, 12113,
  12140, 12159, 12167, 12191, 12194, 12201, 12204, 12205, 12207, 12348,
  12378, 12394, 12397

* New Linux interfaces: prlimit, prlimit64, fanotify_init, fanotify_mark

* POWER7 optimizations: memset, memcmp, strncmp

* New optimized string functions for x86-64: strnlen (SSE2),
  strcasecmp (SSE2, SSSE3, SSE4.2), strncasecmp (SSE2, SSSE3, SSE4.2)
  Implemented by Ulrich Drepper.

Version 2.12

* The following bugs are resolved with this release:

  3662, 4457, 5553, 10162, 10401, 10414, 10554, 10824, 10864, 10915,
  10918, 10936, 10939, 10958, 10968, 10969, 10972, 10992, 11000, 11001,
  11007, 11010, 11027, 11039, 11040, 11041, 11043, 11046, 11056, 11070,
  11093, 11115, 11125, 11126, 11127, 11134, 11141, 11149, 11183, 11184,
  11185, 11186, 11187, 11188, 11189, 11190, 11191, 11192, 11193, 11194,
  11200, 11230, 11235, 11242, 11254, 11258, 11271, 11272, 11276, 11279,
  11287, 11292, 11319, 11332, 11333, 11387, 11389, 11390, 11394, 11397,
  11410, 11438, 11449, 11470, 11471, 11520, 11537, 11538, 11571

* New interfaces: pthread_getname_np, pthread_setname_np

* New Linux interface: recvmmsg

* STT_GNU_IFUNC implemented for Sparc by David Miller.

* The dynamic linker now recognizes supported ABI versions from the
  EI_ABIVERSION field in the ELF header.
  Implemented by Ulrich Drepper.

* New NIS mode selector ADJUNCT_AS_SHADOW.  The passwd.adjunct.byname table
  will not be used to fill in password fields in the passwd.byname replies.
  Instead it is used to synthesize the shadow.byname table, should it be
  missing.  This is a useful mode in some installations involving Solaris.
  Implemented by Ulrich Drepper.

* New locales: kok_IN, sq_MK, cv_RU

Version 2.11

* The following bugs are resolved with this release:

  3270, 7094, 9924, 9986, 10011, 10085, 10107, 10159, 10162, 10166, 10183,
  10195, 10196, 10200, 10203, 10207, 10211, 10213, 10217, 10221, 10229,
  10262, 10286, 10312, 10315, 10319, 10349, 10360, 10391, 10402, 10416,
  10418, 10422, 10425, 10446, 10448, 10452, 10540, 10553, 10560, 10564,
  10609, 10643, 10692, 10713, 10717, 10730, 10731, 10742, 10780, 10784,
  10789, 10817, 10823, 10840, 10847

* New interfaces: execvpe, pthread_sigqueue, mkstemps, mkstemps64, mkostemps,
  mkostemps64
  Implemented by Ulrich Drepper.

* Checking version of longjmp added that fails if an uninitialized stack
  frame would be created.  Implemented by Ulrich Drepper.

* STT_GNU_IFUNC is now supported in static executables.
  Implemented by H.J. Lu.

* STT_GNU_IFUNC implemented for PPC by Alan Modra.

* New optimized string functions for x86-64: strstr, strcasestr, memcmp,
  strcspn, strpbrk, strspn, strcpy, stpcpy, strncpy, strcmp (SSE2, SSE4.2),
  strncmp (SSE2, SSE4.2), strchr (SSE4.2), strrchr (SSE4.2).
  Contributed by H.J. Lu.

  strlen, rawmemchr, strcmp (SSSE3), strncmp (SSSE3).
  Implemented by Ulrich Drepper.

* New optimized string functions for x86: strlen, strcspn, strspn, strpbrk,
  strstr, strcasestr.
  Contributed by H.J. Lu.

* Support for fma instruction in AVX on x86-64.
  Implemented by H.J. Lu and Ulrich Drepper.

* AVX support in x86-64 auditing support in ld.so.
  Implemented by H.J. Lu.

* STB_GNU_UNIQUE support added.
  Implemented by Ulrich Drepper.

* Implement second fallback mode for optimized DNS lookup for even more
  broken environments.  If two requests from the same port are not
  handled correctly close the socket and open a new one before sending
  the second request.  The 'single-request-reopen' option in /etc/resolv.conf
  can be used to select this mode right away, instead of rediscovering the
  necessity is every process again.
  Implemented by Ulrich Drepper.

* New resolver flag RES_USE_DNSSEC to enable use of verified lookup.
  Implemented by Adam Tkac.

* Optimized iconv conversions for S390x.
  Implemented by Andreas Krebbel.

* Using condvars with PI mutexes is now more efficient due to kernel
  support for requeueing to PI futexes.  NPTL support added for x86-64.
  Implemented by Ulrich Drepper.

* New locales: ps_AF, my_MM

Version 2.10

* The following bugs are resolved with this release:

  697, 5381, 5807, 6411, 6545, 7040, 7058, 7067, 7080, 7083, 7095, 7098,
  9677, 9694, 9697, 9701, 9704, 9705, 9706, 9720, 9726, 9730, 9733, 9736,
  9741, 9750, 9753, 9759, 9781, 9791, 9793, 9823, 9833, 9844, 9880, 9881,
  9891, 9893, 9895, 9913, 9916, 9920, 9948, 9955, 9957, 9963, 9985, 10052,
  10069, 10086, 10087, 10090, 10092, 10093, 10100, 10118, 10128

* New interfaces: preadv, preadv64, pwritev, pwritev64, malloc_info
  Implemented by Ulrich Drepper.

* New Linux interfaces: accept4, fallocate, fallocate64.
  Implemented by Ulrich Drepper.

* Correct declarations of string function when used in C++ code.  This
  could lead to compile errors for invalid C++ code.

* XPG7/POSIX 2008 compilation environment.  Many GNU-specific functions are
  now in POSIX.

* New POSIX 2008 interface: psiginfo
  Implemented by Ulrich Drepper.

* New ISO C++1x interfaces: quick_exit, at_quick_exit
  Implemented by Ulrich Drepper.

* Support for selecting between multiple function definitions at runtime
  using STT_GNU_IFUNC symbols.  Implemented by Ulrich Drepper.

* The libcrypt library can now use the hash function implementations in
  NSS.  Implemented by Ulrich Drepper.

* The malloc implementation can be compiled to be less memory efficient
  but higher performing in multi-threaded programs.
  Implemented by Ulrich Drepper.

* New locales: nan_TW@latin, ks_IN

* Faster strlen, strchr, strchrnul, strrchr, memchr, and rawmemchr for x86-64.
  Implemented by Ulrich Drepper.

* Extended printf hook support.  It is possible to use user-defined types
  and extend existing format specifiers.
  Implemented by Ulrich Drepper.

* Handling for group shadow files has been added.
  Implemented by Ulrich Drepper.

* DNS IPv4-IPv6 parallel lookup now deals better with broken DNS
  servers (the case, e.g., for some people using the built-in DNS
  server in ADSL modems/routers).  There is a once-per-process timeout
  in case of a broken server.  To avoid it, users can run nscd or put
  'options single-request' in /etc/resolv.conf.
  Implemented by Ulrich Drepper.

Version 2.9

* The following bugs are resolved with this release:

  3406, 5209, 5210, 5381, 5794, 5814, 5911, 6428, 6438, 6442, 6447, 6461,
  6472, 6505, 6544, 6589, 6612, 6634, 6653, 6654, 6657, 6698, 6712, 6713,
  6719, 6723, 6724, 6740, 6763, 6771, 6790, 6791, 6817, 6824, 6839, 6843,
  6845, 6856, 6857, 6860, 6867, 6875, 6919, 6920, 6942, 6947, 6955, 6966,
  6968, 6974, 6980, 6995, 7008, 7009, 7029

* Unified lookup for getaddrinfo: IPv4 and IPv6 addresses are now looked
  up at the same time.  Implemented by Ulrich Drepper.

* TLS descriptors for LD and GD on x86 and x86-64.
  Implemented by Alexandre Oliva.

* getaddrinfo now handles DCCP and UDPlite.
  Implemented by Ulrich Drepper.

* New fixed-size conversion macros: htobe16, htole16, be16toh, le16toh,
  htobe32, htole32, be32toh, le32toh, htobe64, htole64, be64toh, le64toh.
  Implemented by Ulrich Drepper.

* New implementation of memmem, strstr, and strcasestr which is O(n).
  Implemented by Eric Blake.

* New Linux interfaces: inotify_init1, dup3, epoll_create1, pipe2

* Implement "e" option for popen to open file descriptor with the
  close-on-exec flag set.  Implemented by Ulrich Drepper.

* Implement "b" mode for fmemopen.  In this mode writes writes don't
  implicitly add a NUL byte and seeks from the end of the buffer really
  use the buffer end, not the string length as the basis.
  Implemented by Ulrich Drepper.

* Many functions, exported and internal, now atomically set the close-on-exec
  flag when run on a sufficiently new kernel.  Implemented by Ulrich Drepper.

* Sorting rules for some Indian languages (Kannada, Gurumukhi, Telugu,
  Sinhala)
  Implemented by Pravin Satpute.

* New locales: sd_IN, sd_IN@devanagari, ks_IN@devanagari, ht_HT, en_AG, nl_AW.

Version 2.8

* The following bugs are resolved with this release:

  2549, 3112, 4314, 4407, 4997, 5012, 5040, 5112, 5204, 5208, 5209, 5220,
  5222, 5224, 5225, 5237, 5238, 5240, 5245, 5277, 5346, 5375, 5378, 5382,
  5424, 5427, 5428, 5435, 5436, 5439, 5441, 5442, 5443, 5451, 5452, 5454,
  5455, 5463, 5464, 5465, 5475, 5477, 5478, 5520, 5541, 5545, 5553, 5600,
  5602, 5607, 5614, 5627, 5628, 5736, 5737, 5741, 5753, 5760, 5762, 5768,
  5774, 5777, 5778, 5779, 5786, 5790, 5818, 5854, 5857, 5903, 5939, 5979,
  5983, 5995, 5998, 6004, 6007, 6020, 6021, 6024, 6040, 6042

* New locales: bo_CN, bo_IN, shs_CA.

* New encoding: HP-ROMAN9, HP-GREEK8, HP-THAI8, HP-TURKISH8.

* Sorting rules for some Indian languages (Devanagari and Gujarati).
  Implemented by Pravin Satpute.

* IPV6 addresses in /etc/resolv.conf can now have a scope ID

* nscd caches now all timeouts for DNS entries
  Implemented by Ulrich Drepper.

* nscd is more efficient and wakes up less often.
  Implemented by Ulrich Drepper.

* More checking functions: asprintf, dprintf, obstack_printf, vasprintf,
  vdprintf, and obstack_vprintf.
  Implemented by Jakub Jelinek.

* Faster memset for x86-64.
  Implemented by Harsha Jagasia and H.J. Lu.

* Faster memcpy on x86.
  Implemented by Ulrich Drepper.

* ARG_MAX is not anymore constant on Linux.  Use sysconf(_SC_ARG_MAX).
  Implemented by Ulrich Drepper.

* Faster sqrt and sqrtf implemention for some PPC variants.
  Implemented by Steven Munroe.

Version 2.7

* The following bugs are resolved with this release:

  4125, 4126, 4178, 4359, 4407, 4512, 4514, 4525, 4554, 4556, 4557, 4566,
  4582, 4586, 4588, 4599, 4610, 4647, 4702, 4705, 4726, 4745, 4772, 4773,
  4775, 4776, 4792, 4813, 4814, 4816, 4833, 4858, 4860, 4896, 4905, 4925,
  4936, 4937, 4938, 4941, 4946, 4963, 4972, 5010, 5028, 5043, 5058, 5063,
  5071, 5103, 5104, 5112, 5113, 5184, 5186

* More checking functions: fread, fread_unlocked, open*, mq_open.
  Implemented by Jakub Jelinek and Ulrich Drepper.

* Extend fortification to C++.  Implemented by Jakub Jelinek.

* Implement 'm' modifier for scanf.  Add stricter C99/SUS compliance
  by not recognizing 'a' as a modifier when those specs are requested.
  Implemented by Jakub Jelinek.

* PPC optimizations to math and string functions.
  Implemented by Steven Munroe.

* New interfaces: mkostemp, mkostemp64.  Like mkstemp* but allow additional
  options to be passed.  Implemented by Ulrich Drepper.

* More CPU set manipulation functions.  Implemented by Ulrich Drepper.

* New Linux interfaces: signalfd, eventfd, eventfd_read, and eventfd_write.
  Implemented by Ulrich Drepper.

* Handle private futexes in the NPTL implementation.
  Implemented by Jakub Jelinek and Ulrich Drepper.

* Add support for O_CLOEXEC.  Implement in Hurd.  Use throughout libc.
  Implemented by Roland McGrath and Ulrich Drepper.

* Linux/x86-64 vDSO support.  Implemented by Ulrich Drepper.

* SHA-256 and SHA-512 based password encryption.
  Implemented by Ulrich Drepper.

* New locales: ber_DZ, ber_MA, en_NG, fil_PH, fur_IT, fy_DE, ha_NG, ig_NG,
  ik_CA, iu_CA, li_BE, li_NL, nds_DE, nds_NL, pap_AN, sc_IT, tk_TM, ug_CN,
  yo_NG.

+ New iconv modules: MAC-CENTRALEUROPE, ISO-8859-9E, KOI8-RU.
  Implemented by Ulrich Drepper.

Version 2.6

* The following bugs are resolved with this release:

  3156, 3213, 3285, 3291, 3306, 3313, 3320, 3322, 3325, 3326, 3334, 3348,
  3352, 3363, 3369, 3426, 3427, 3429, 3451, 3458, 3465, 3480, 3483, 3493,
  3514, 3515, 3559, 3632, 3664, 3673, 3674, 3745, 3747, 3818, 3840, 3842,
  3851, 3855, 3884, 3885, 3902, 3905, 3919, 3944, 3954, 3955, 3957, 3991,
  3995, 3996, 4024, 4040, 4069, 4070, 4074, 4076, 4096, 4101, 4102, 4114,
  4130, 4131, 4181, 4276, 4306, 4342, 4344, 4349, 4364, 4368, 4381, 4392,
  4403, 4405, 4406, 4411, 4438, 4439, 4455, 4456, 4465, 4512, 4514, 4586,
  4702, 4858

* New Linux interfaces: epoll_pwait, sched_getcpu.

* New generic interfaces: strerror_l.

* nscd can now cache the services database.   Implemented by Ulrich Drepper.

Version 2.5

* The following bugs are resolved with this release:

  39, 68, 192, 352, 388, 531, 935, 1006, 1201, 1203, 1386, 1782, 1783, 1784,
  1785, 1786, 1787, 1951, 1974, 1996, 2072, 2098, 2125, 2134, 2158, 2182,
  2349, 2376, 2386, 2389, 2415, 2418, 2420, 2423, 2450, 2451, 2466, 2472,
  2473, 2477, 2498, 2499, 2501, 2502, 2505, 2507, 2508, 2509, 2517, 2526,
  2569, 2571, 2592, 2611, 2625, 2632, 2644, 2662, 2680, 2683, 2684, 2693,
  2695, 2703, 2734, 2751, 2764, 2766, 2775, 2792, 2821, 2823, 2832, 2841,
  2843, 2883, 2892, 2908, 2914, 2926, 2961, 2978, 2980, 2987, 2997, 2998,
  3013, 3018, 3034, 3040, 3044, 3123, 3124, 3137, 3138, 3143, 3155, 3189,
  3225, 3251, 3252, 3253, 3273

* For Linux, the sorting of addresses returned by getaddrinfo now also
  handles rules 3, 4, and 7 from RFC 3484.  I.e., all rules are handled.
  Implemented by Ulrich Drepper.

* Allow system admin to configure getaddrinfo with the /etc/gai.conf file.
  Implemented by Ulrich Drepper.

* New Linux interfaces: splice, tee, sync_file_range, vmsplice.

* New iconv module for MIK.  Contributed by Alexander Shopov.

* For sites with broken group and/or passwd database, the auto-propagate
  option of nscd can prevent creating ID lookup entries from the results
  of a name lookup and vice versa.   This usually is no problem but some
  site might have problems with the default behavior.
  Implemented by Ulrich Drepper.

* Iterating over entire database in NIS can be slow.  With the
  SETENT_BATCH_READ option in /etc/default/nss a system admin can decide
  to trade time for memory.  The entire database will be read at once.
  Implemented by Ulrich Drepper.

* The interfaces introduced in RFC 3542 have been implemented by
  Ulrich Drepper.

* Support for the new ELF hash table format was added by Ulrich Drepper.

* Support for priority inheritance mutexes added by Jakub Jelinek and
  Ulrich Drepper.

* Support for priority protected mutexes added by Jakub Jelinek.

* New locales: nr_ZA, pa_PK, ca_AD, ca_FR, ca_IT, el_CY, tr_CY, as_IN,
  or_IN, csb_PL, fy_NL, sr_ME.

Version 2.4

* More overflow detection functions.

* New iconv converters for IBM1025, IBM1122, IBM1137, IBM1153,
  IBM1154, IBM1155, IBM1156, IBM1157, and IBM1158 contributed by Jiro Sekiba.

  More converters for IBM803, IBM901, IBM902, IBM921, IBM1008, IBM1097,
  IBM1112, IBM1123, IBM1130, IBM1140, IBM1141, IBM1142, IBM1143, IBM1144,
  IBM1145, IBM1146, IBM1147, IBM1148, IBM1149, IBM1166, IBM1167, IBM4517,
  IBM4899, IBM4909, IBM4971, IBM5347, IBM9030, IBM9066, IBM9448, IBM12712,
  IBM16804, IBM1364, IBM1371, IBM1388, IBM1390, and IBM1399 contributed
  by Masahide Washizawa.

* It is now possible to install audit libraries for the dynamic linker using
  LD_AUDIT.  Implemented by Ulrich Drepper.

* The LinuxThreads add-on, providing pthreads on Linux 2.4 kernels, is no
  longer supported.  The new NPTL implementation requires Linux 2.6 kernels.
  For a libc and libpthread that works well on Linux 2.4 kernels, we
  recommend using the stable 2.3 branch.

* The new function open_wmemstream acts like open_memstream,
  but uses a wchar_t wide character buffer.

* The new function ppoll is an improved version of poll, similar to pselect.

* New interfaces: fdopendir, openat, fstatat, fchmodat, fchownat,
  futimesat, faccessat, mkdirat, mkfifoat, mknodat,
  renameat, unlinkat, linkat, symlinkat, readlinkat.

* New Linux kernel system calls: unshare,
  inotify_init, inotify_add_watch, inotify_rm_watch.

* The euidaccess function is now also known by the alias eaccess,
  for compatibility with some other systems.

* Timezone data updated to 2006b version.

Version 2.3.6

* The following bugs are resolved with this release:

  38, 253, 549, 622, 653, 721, 758, 851, 877, 915, 934, 955, 961,
  1016, 1037, 1076, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086,
  1087, 1088, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098,
  1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109,
  1110, 1111, 1112, 1113, 1125, 1137, 1138, 1249, 1250, 1251, 1252,
  1253, 1254, 1350, 1358, 1394, 1438, 1498, 1534

  Visit <http://sources.redhat.com/bugzilla/> for the details of each bug.

* As of this release, GCC 4 can be used to compile the C Library.

* Timezone data updated to 2005m version.

Version 2.3.5

* The following bugs are resolved with this release:

  284, 592, 602, 626, 633, 640, 650, 661, 671, 681, 693, 700, 710, 719,
  722, 723, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736,
  737, 738, 739, 740, 741, 742, 743, 744, 745, 765, 767, 768, 769, 776,
  777, 787, 821, 822, 823, 825

  Visit <http://sources.redhat.com/bugzilla/> for the details of each bug.

Version 2.3.4

* Support for RFC 3678.  Real implementations exist only for Linux so far.
  Implemented by Ulrich Drepper.

* nscd can now cache entries persistently.  Expiring entries are reloaded.
  For speedups the cache can be shared in memory with client processes.
  Implemented by Ulrich Drepper.

* nscd can now perform SELinux checks.
  Implemented by Matthew Rickard <mjricka@epoch.ncsc.mil>.

* getaddrinfo queries are now cached.  Canonical name lookup is performed
  efficiently.
  Implemented by Ulrich Drepper.

* The nothrow function attribute is used when headers are used by gcc when
  compiling C code.  This can avoid significant amounts of exception
  handling data.

* The malloc functions perform more error checking and are stricter when
  it comes to reacting on errors.  The default action is to terminate
  the process after showing an error message.  Implemented by Ulrich Drepper.

* Reverse lookups of IPv6 addresses does not use bit string or .ip6.int
  lookups anymore unless explicitly requested.  Implemented by Ulrich Drepper.

* Namespaces in ld.so are implemented.  DSOs can be loaded in separate
  namespaces using the new function dlmopen().  This feature is of course,
  like most other dynamic loading functionality, not available in statically
  linked applications.  Implemented by Ulrich Drepper.

* Low-overhead boundary checking variants of string and some stdio functions
  were added.  These are to be used in conjunction with a gcc patch by
  Jakub Jelinek which adds calls to these functions if possible.
  Implemented by Jakub Jelinek and Ulrich Drepper.

* Old code for several operating systems and machine architectures that
  have not been in working condition in a long time have been removed from
  the main source tree maintained by the GNU C Library's maintainers.
  These files are now reside in the separate `ports' source module
  that is usable as an add-on when building the library.

Version 2.3.3

* New functions `dladdr1' and `dlinfo' in <dlfcn.h> provide more ways to
  interrogate the dynamic linker, compatible with the Solaris interface.

* ELF thread-local storage support (TLS) now works on PowerPC and PowerPC64;
  implemented by Paul Mackerras, Steven Munroe, and Roland McGrath.

* getifaddrs now uses the netlink interface on Linux to get its information.
  Implemented by Thorsten Kukuk.

* getaddrinfo now implements AI_V4MAPPED, AI_ALL, and AI_ADDRCONF.
  Implemented by Ulrich Drepper.

* support for non-executable stacks on x86 has been added.  Changes mostly
  by Roland McGrath.

* regex is now much faster for multibyte locales.  Changes by Jakub Jelinek
  and Ulrich Drepper.

* getaddrinfo now performs destination address selection according to
  RFC 3484.

Version 2.3.2

* Thread-safe interfaces for many functions that access locale data
  were added in version 2.3, but these features were omitted from NEWS.
  Many functions have variants with an `_l' suffix that take a `locale_t'
  object as a parameter rather than consulting the current locale.
  The new functions `newlocale', `duplocale', and `freelocale' in <locale.h>
  create and maintain `locale_t' objects.  Additionally, the new function
  `uselocale' sets "the current locale" (as used by functions not so
  parameterized) set for an individual thread.  These features were added
  in version 2.3, implemented by Ulrich Drepper and Roland McGrath.

* The functions getresuid, getresgid, setresuid, and setresgid, which
  have long been available on Linux, are now declared in <unistd.h>
  and are now also available on the Hurd.

* ELF thread-local storage support (TLS) now works on x86-64.

* The new dynamic string token $LIB is expanded in shared library names.
  This normally expands to lib, but on some 64-bit platforms to lib64 instead.

* Aldy Hernandez contributed complete software floating point support for
  PowerPC machines with no FPU.

* fexecve is implemented on Linux.

* The `btowc' function should work at least twice as fast due to
  specialized callbacks in the iconv modules.  Implemented by Bruno Haible.

* With approriate thread add-ons cancelable functions are now implemented
  in libc.so as well.  No need to call the function in libpthread.  This
  change allowed to finally disable the incorrect and expensive handling
  of weak definition in ld.so.

* Yet more PLT entries in libc.so have been removed.  We finally arrived
  at the bare minimum.  Startup times improved appropriately.

* Support for the new Linux/x86 system call interface was added.  The
  AT_SYSINFO auxiliary vector entry is recognized and handled.

Version 2.3

* Masahide Washizawa contributed iconv modules for IBM1163 and IBM1164
  charsets.

* iconv (the program and the interface) now accepts empty names (excluding
  options like //TRANSLIT) to mean "use charset of current locale".

* localedef can now transliterate characters in strings which are not in
  the provided charmap.  The information from the input locale is used.

* Prelinking support was added for ELF targets.  This requires additional
  tools and recent versions of the GNU binutils.  Contributed by Jakub Jelinek.

* Read-only stdio streams now use mmap to speed up operation by eliminating
  copying and buffer underflows.  To use add 'm' to the mode string of
  the fopen/fdopen/freopen call.  Implemented by Ulrich Drepper.

* The malloc functions were completely rewritten by Wolfram Gloger based
  on Doug Lea's malloc-2.7.0.c.

* Isamu Hasegawa contributed a completely new and POSIX-conformant
  implementation of regex.

* Bruno Haible upgraded the iconv and locale implementation to support
  Unicode 3.2.

* Contents of the LC_* and LANG environment variables in the CEN style are
  not recognized anymore.   It never was used.  Change by Ulrich Drepper.

* The runtime (ld.so, libc, libpthread for Linux) now can handle the ELF
  thread-local storage (TLS) ABI on some platforms.
  Changes by Ulrich Drepper.  SH support by Kaz Kojima.

* Bruno Haible contributed iconv converters for ISO-2022-JP-3, SHIFT JIS-X0213,
  EUC-JISX0213, and TSCII.

* New header <ifaddrs.h> with functions `getifaddrs' and `freeifaddrs':
  BSD-compatible interface for getting all network interface addresses.
  Implementation for IPv4 by Roland McGrath.

* Loading of locale data is faster due to the introduction of a locale
  archive.  Implemented by Roland McGrath and Ulrich Drepper.

* Startup times are significantly reduced by not using exported functions
  inside the library itself.  Changes by Jakub Jelinek, Roland McGrath,
  and Ulrich Drepper.

* Steven Munroe contributed a port to PowerPC64/Linux.

Version 2.2.6

* The Hurd now uses the GNU libio implementation of stdio rather than the
  old GNU stdio implementation, and uses a new ABI (libc.so.0.3).

* The Hurd on x86 now has the `ioperm' function and <sys/io.h> header file
  with the same behavior as the Linux system call of the same name.

Version 2.2.5

* Stephen Moshier implemented log2, log10, powl and cbrtl for the
  128-bit long double format.

* Masahide Washizawa contributed iconv modules for IBM1132, IBM1133, IBM1160,
  IBM1161, and IBM1162 charsets.

* Andreas Jaeger contributed a port to x86-64/Linux.

* Peter Bruin contributed a port to PowerPC/Hurd.

* libc functions using I/O streams now can handle wide-oriented streams
  as well.

* optimizations in the dynamic linker.  Binaries created by recent binutils
  versions start up quicker due to reduced time spent on relocations.

* Support for use of gcc3 added by Jakub Jelinek and HJ Lu.

Version 2.2.4

* Stephen Moshier implemented cosh, expm1, log1p, acos, sinh, tanh,
  asinh, atanh, j0 for the 128-bit long double format.

* Bruno Haible updated all the code handling Unicode in some form to
  support Unicode 3.1.

* Speed of regex for single-byte locales is back to previous levels.
  Patch by Isamu Hasegawa.

* Alpha, SPARC, and IA-64 now also using floating stacks.

* Startup time of internationalized applications greatly improved through
  iconv cache.  Use iconvconfig to generate the cache file.
  Contributed by Ulrich Drepper.

* The IA-64 specific part of ld.so was rewritten to eliminate some pretty
  severe performance problems.  Patch by David Mosberger.

* The Hurd port got a lot more functionality like AIO, various stdio
  extensions, etc.  Mainly done by Roland McGrath.

* mtrace can now lookup symbols in shared libraries.

Version 2.2.3

* Intel's IA-64 math library is largely integrated.  It provides fast and
  accurate implementatations for most basic and standard math functions
  in float, double, and long double format.

* Stephen Moshier implemented j0, j1, jn, y0, y1, yn, lgamma, erf, erfc,
  and asin for the 96-bit long double format and asin, log, tan for the
  128-bit long double format.

* The beginning of a last-bit accurate math library by IBM Haifa were added.
  The basic double functions exist today.  Contributed by Abraham Ziv
  <ziv@il.ibm.com>, Moshe Olshansky <olshansk@il.ibm.com>, Ealan Henis
  <ealan@il.ibm.com>, and Anna Reitman <reitman@il.ibm.com>.

* An asynchronous name lookup library was added.  The interface is designed
  after POSIX AIO.  The proposal was circulated beforehand to get comments.
  No negative ones came in.  Implemented by Ulrich Drepper.

* Port to S390/64bit contributed by Martin Schwidefsky
  <schwidefsky@de.ibm.com>.

* David Mosberger <davidm@hpl.hp.com> implemented the setcontext family
  of functions for Linux/IA-64.

* The RPC code is now thread safe.  Threads can now use the same service
  of different services at the same time.  Patch by Eric Norum
  <eric.norum@usask.ca> with some help by Ulrich Drepper.

* Martin Schwidefsky <schwidefsky@de.ibm.com> implemented the setcontext
  family of functions for Linux/S390.

* Ulrich Drepper <drepper@redhat.com> implemented the setcontext family
  of functions for Linux/x86.

* Port to Linux/CRIS contributed by Axis Communications.

Version 2.2.2

* Lots of headers were cleaned up.  Using the tool in the conform/ subdir
  we can now check for namespace violations and missing declarations.  The
  result is that almost all headers are now Unix-compliant (as defined in
  the upcoming XPG6).  The negative side is that some programs might need
  corrections, too, if they depend on the incorrect form of the headers in
  previous versions which defined too many symbols and included too many
  other headers.

* regex now handles multibyte character sets correctly.
  Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.

* iconv (the program) does now conform to the upcoming XPG6 and handles
  charmaps.  Instead of the charset names the path of charmaps can be
  provided and the conversion happens based on this data.
  Contributed by Ulrich Drepper.

* The locale program now provides detailed information about the installed
  locales.  While

    locale -a

  only lists the names of the supported locales

    locale -a --verbose

  provides details such as country, language, and codeset name.
  Contributed by Ulrich Drepper.

Version 2.2.1

* The gencat program now parses the input file according to the charset
  selected by the LC_CTYPE category.  This is important for stateful
  character sets.  To make generating catalogs easier there is a way
  to overwrite the charset selected by the locale: before the first
  message or $ quote line the catalog can contain a line like

    $ codeset=ISO-8859-2

  to select the charset (ISO-8859-2 in this case).

  Implemented by Shinya Hanataka and Ulrich Drepper.

* New codeset conversion modules: IBM-922  (Estonia PC codeset),
  IBM-1124 (Ukraine PC codeset), IBM-1129 (Vietnamese PC codeset).
  Contributed by Masahide Washizawa <washi@jp.ibm.com>.

* Optimized string functions for Alpha ev6 and ev67 by Richard Henderson
  <rth@redhat.com> and Rick Gorton <rick.gorton@alpha-processor.com>.

* The LANGUAGE environment variable is now ignored unless the locale is
  changed from the default "C" locale.

* The usual bug fixes.

Version 2.2

* Greg McGary added runtime support for bounds checking using gcc's
  new -fbounded-pointers option.  ix86 target is complete.  PowerPC
  is in progress.

* Thorsten Kukuk added secure mode support to nscd.

* The Berkeley db libraries have been removed.

  Related, the nss_db module is now in a separate package since it
  obviously requires a database library being available.

* Wide character I/O streams implemented by Ulrich Drepper.

* Functions from the extended socket API added by Ulrich Drepper.

* Functions feenableexcept and fedisableexcept to control the
  behaviour of individual exceptions have been added by Andreas Jaeger.

* ldconfig program added by Andreas Jaeger and Jakub Jelinek.

* The resolver code has been updated from bind 8.2.3-T5B which supports
  threads.  The integration was done by Andreas Jaeger, Adam D. Bradley,
  and Mark Kettenis.

  This change could in some situations effect backward compatibility.  Since
  now `_res' is a thread-local instead of a global variable, modifying it
  in one thread does not have any effect in other threads.

  The resolver library was also extended to allow IPv6 as the transport
  protocol for the requests.  This work was done by Stig Venaas.

* Compatibility code for K&R C compilers has been removed from the
  header files.  A ISO C compiler is needed to use the library
  (conforming to either C89 or C99 standard).

* Complete rewrite of the localedef program to support multibyte character
  sets.  Implement handling of ISO 14651 and ISO 14652.  Rewrite strcoll,
  strxfrm, wcscoll, and wcsxfrm functions.  Make isw*() functions work.
  Implemented by Ulrich Drepper.

  Bruno Haible significantly improved the generation and use of the data
  structures for the wide character tables.

* Plural handling in gettext implemented by Ulrich Drepper.

* The utmp daemon has been removed.

* The port to MIPS-Linux has been finished by Andreas Jaeger.

* A port to Hitachi SH3 and SH4 has been contributed by Kazumoto Kojima
  and Yutaka Niibe.

* POSIX clocks and timers implemented by Kaz Kylheku and Ulrich Drepper.

* POSIX barriers implemented by Kaz Kylheku.

* POSIX spawn function family implemented by Ulrich Drepper.

* POSIX spinlocks are now available.

* Timed wait functions for mutex, rwlock, and semaphores are implemented.

* the configure option --enable-kernel=X.Y.Z allows to strip out
  compatibility for kernel versions before X.Y.Z.  This is currently only
  implemented for Linux.

* the sockaddr_in6 structure changed.  The IPv6 working group added a new
  field sin6_scope_id.  This means that all programs using IPv6 should be
  recompiled.  Don't expect binary compatibility with previous glibc
  versions.

* various conversion modules for IBM character sets contributed by
  Masahide Washizawa.

* IA-64 port by Jes Sorensen and HJ Lu.

Version 2.1.3

* bug fixes


Version 2.1.2

* bug fixes


Version 2.1.1

* New ISO C 9x function _Exit, imaxabs, and imaxdiv are added.

* New xdr functions are added; some rpc functions are now 64bit clean.

* Fixed a number of bugs and memory leaks (especially in NIS+ code).

* Fixed known incompatibilities with glibc 2.0.

* New functions lock64, strchrnul, rawmemchr, getutmp and getutmpx.

* Optimized a number of functions (especially the ELF dynamic loader).

* Update timezone data files.

* lots of charmaps corrections

* some new locale definitions and charmaps


Version 2.1

* Richard Henderson corrected size of struct timeval on Linux/Alpha to
  conform to POSIX member type requirements.  Symbol versions have been
  adjusted as needed within the library, and for direct use by applications,
  but there is potential for problems if third-party libraries use
  struct timeval as part of their interface.  This does not present
  a problem for X and other "essential" system libraries.

* An additional locale model to support C++ Standard Library locale
  model and probably more was implemented by Ulrich Drepper.

* Eric Youngdale and Ulrich Drepper implemented versioning of objects on
  symbol level.

* Miles Bader provided the `argp' function family to support hierachical
  command line argument parsing, layered on top of getopt.

* strtod accepts new hexadecimal floating-point format from ISO C 9X.

* printf has two new specifiers %a and %A to print hexadecimal flaoting-point
  numbers.

* scanf recognizes the %a and %A format for scanning floating point numbers.

* the new headers <stdint.h> and <inttypes.h> from ISO C 9X provides
  information and interfaces for the available integer types.

* about 130 new math functions were added to implement the ISO C9x math
  library.

* the new header <complex.h> contains definitions of the complex math
  functions from ISO C 9X.

* the new header <tgmath.h> defines generic macros to use complex or
  real valued functions.

* Thorsten Kukuk provided an implementation for NIS+, securelevel 0, 1 and 2.

* Andreas Jaeger provided a test suite for the math library.

* Mark Kettenis implemented the utmpx interface and an utmp daemon.

* Ulrich Drepper added character set conversion functions (iconv).

* Optimized string functions have been added.

* The localedata addon is now part of glibc.

* An implementation of profiling shared libraries was added by Ulrich Drepper.

* Thorsten Kukuk and Ulrich Drepper provided an implementation for a caching
  daemon for NSS (nscd).

  Missing a better place here are some numbers on improvements.  Under
  Linux 2.1.125 un-tar-ing the kernel sources takes

				  user	system	   wall

    using local files		12.19s	 6.88s	 22.91s

    using NIS			13.92s	 8.91s	 26.34s

    using NIS & nscd		10.37s	 7.34s	 25.30s

    using NIS+			27.57s	30.37s  640.46s

    using NIS+ & nscd           10.25s   7.83s   26.51s

    using NIS & old nscd [1]	13.83s	 8.32s	 29.60s

  Keep in mind that non-namelookup related operations dominate above times.
  It was just a common complain that using NIS+ unpacking the kernel is
  horribly slow.

  [1] The old nscd implementation is not available anymore since it was
  distributed with glibc up to version 2.0.98 and thus is now replaced.

* Tim Waugh provided an implementation of the POSIX.2 wordexp function family.

* Mark Kettenis provided a Hesiod NSS module.

* The ELF dynamic loader knows how to process dynamic string tokens ($ORIGIN
  and $PLATFORM) in RPATHs and similar strings (Ulrich Drepper).

* rcmd can now handle netgroups (Dick Streefland).

* A port to the ARM was contributed by Phil Blundell, Pat Beirne and Scott
  Bambrough.

* Support for the IPv6 protocol has been added to the socket API, as per the
  latest draft standards.

* Support for Linux 2.2 has been added.

* Interface changes relative to the latest 2.0.x release:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
addseverity			NEW: Unix98
alphasort64			NEW: LFS
argp_err_exit_status		NEW: argp, GNU ext
argp_error			NEW: argp, GNU ext
argp_failure			NEW: argp, GNU ext
argp_help			NEW: argp, GNU ext
argp_parse			NEW: argp, GNU ext
argp_program_bug_address	NEW: argp, GNU ext
argp_program_version		NEW: argp, GNU ext
argp_program_version_hook	NEW: argp, GNU ext
argp_state_help			NEW: argp, GNU ext
argp_usage			NEW: argp, GNU ext
authdes_create			NEW: Secure RPC
authdes_getucred		NEW: Secure RPC
authdes_pk_create		NEW: Secure RPC
backtrace			NEW: GNU ext.
backtrace_symbols		NEW: GNU ext.
backtrace_symbols_fd		NEW: GNU ext.
cacos				NEW: ISO C 9x
cacosf				NEW: ISO C 9x
cacosh				NEW: ISO C 9x
cacoshf				NEW: ISO C 9x
cacoshl				NEW: ISO C 9x
cacosl				NEW: ISO C 9x
capget				NEW: kernel
capset				NEW: kernel
carg				NEW: ISO C 9x
cargf				NEW: ISO C 9x
cargl				NEW: ISO C 9x
casin				NEW: ISO C 9x
casinf				NEW: ISO C 9x
casinh				NEW: ISO C 9x
casinhf				NEW: ISO C 9x
casinhl				NEW: ISO C 9x
casinl				NEW: ISO C 9x
catan				NEW: ISO C 9x
catanf				NEW: ISO C 9x
catanh				NEW: ISO C 9x
catanhf				NEW: ISO C 9x
catanhl				NEW: ISO C 9x
catanl				NEW: ISO C 9x
cbc_crypt			NEW: Secure RPC
ccos				NEW: ISO C 9x
ccosf				NEW: ISO C 9x
ccosh				NEW: ISO C 9x
ccoshf				NEW: ISO C 9x
ccoshl				NEW: ISO C 9x
ccosl				NEW: ISO C 9x
cexp				NEW: ISO C 9x
cexpf				NEW: ISO C 9x
cexpl				NEW: ISO C 9x
cimag				NEW: ISO C 9x
cimagf				NEW: ISO C 9x
cimagl				NEW: ISO C 9x
clearerr_locked			REMOVED
clntunix_create			NEW: sunrpc ext
clog				NEW: ISO C 9x
clog10				NEW: ISO C 9x
clog10f				NEW: ISO C 9x
clog10l				NEW: ISO C 9x
clogf				NEW: ISO C 9x
clogl				NEW: ISO C 9x
conj				NEW: ISO C 9x
conjf				NEW: ISO C 9x
conjl				NEW: ISO C 9x
cpow				NEW: ISO C 9x
cpowf				NEW: ISO C 9x
cpowl				NEW: ISO C 9x
cproj				NEW: ISO C 9x
cprojf				NEW: ISO C 9x
cprojl				NEW: ISO C 9x
creal				NEW: ISO C 9x
crealf				NEW: ISO C 9x
creall				NEW: ISO C 9x
creat64				NEW: LFS
csin				NEW: ISO C 9x
csinf				NEW: ISO C 9x
csinh				NEW: ISO C 9x
csinhf				NEW: ISO C 9x
csinhl				NEW: ISO C 9x
csinl				NEW: ISO C 9x
csqrt				NEW: ISO C 9x
csqrtf				NEW: ISO C 9x
csqrtl				NEW: ISO C 9x
ctan				NEW: ISO C 9x
ctanf				NEW: ISO C 9x
ctanh				NEW: ISO C 9x
ctanhf				NEW: ISO C 9x
ctanhl				NEW: ISO C 9x
ctanl				NEW: ISO C 9x
des_setparity			NEW: Secure RPC
ecb_crypt			NEW: Secure RPC
endutxent			NEW: Unix98
exp10				NEW: ISO C 9x
exp10f				NEW: ISO C 9x
exp10l				NEW: ISO C 9x
exp2				NEW: ISO C 9x
exp2f				NEW: ISO C 9x
exp2l				NEW: ISO C 9x
fattach				NEW: STREAMS
fdetach				NEW: STREAMS
fdim				NEW: ISO C 9x
fdimf				NEW: ISO C 9x
fdiml				NEW: ISO C 9x
feclearexcept			NEW: ISO C 9x
fegetenv			NEW: ISO C 9x
fegetexceptflag			NEW: ISO C 9x
fegetround			NEW: ISO C 9x
feholdexcept			NEW: ISO C 9x
feof_locked			REMOVED
feraiseexcept			NEW: ISO C 9x
ferror_locked			REMOVED
fesetenv			NEW: ISO C 9x
fesetexceptflag			NEW: ISO C 9x
fesetround			NEW: ISO C 9x
fetestexcept			NEW: ISO C 9x
feupdateenv			NEW: ISO C 9x
fflush_locked			REMOVED
ffsl				NEW: GNU ext.
ffsll				NEW: GNU ext.
fgetpos64			NEW: LFS
fgets_unlocked			NEW: GNU ext.
fileno_locked			REMOVED
fma				NEW: ISO C 9x
fmaf				NEW: ISO C 9x
fmal				NEW: ISO C 9x
fmax				NEW: ISO C 9x
fmaxf				NEW: ISO C 9x
fmaxl				NEW: ISO C 9x
fmin				NEW: ISO C 9x
fminf				NEW: ISO C 9x
fminl				NEW: ISO C 9x
fmtmsg				NEW: Unix98
fopen64				NEW: LFS
fputc_locked			REMOVED
fputs_unlocked			NEW: GNU ext.
fread_unlocked			NEW: GNU ext.
freopen64			NEW: LFS
fseeko				NEW: Unix98
fsetpos64			NEW: LFS
fstatfs64			NEW: LFS
fstatvfs			NEW: Unix98
fstatvfs64			NEW: LFS
ftello				NEW: Unix98
ftello64			NEW: LFS
ftruncate64			NEW: LFS
ftw64				NEW: LFS
fwrite_unlocked			NEW: GNU ext.
gai_strerror			NEW: IPv6
gamma_r				REMOVED
gammaf_r			REMOVED
gammal_r			REMOVED
getchar_locked			REMOVED
getdate				NEW: Unix98
getdate_err			NEW: Unix98
getdate_r			NEW: GNU ext.
getmsg				NEW: STREAMS
getnameinfo			NEW: IPv6
getnetname			NEW: Secure RPC
getpmsg				NEW: STREAMS
getpt				NEW: Unix98 PTY
getrlimit64			NEW: LFS
getutxent			NEW: Unix98
getutxid			NEW: Unix98
getutxline			NEW: Unix98
glob64				NEW: GNU ext.
globfree64			NEW: GNU ext.
gnu_get_libc_release		NEW: GNU ext.
gnu_get_libc_version		NEW: GNU ext.
grantpt				NEW: Unix98 PTY
host2netname			NEW: Secure RPC
iconv				NEW: iconv
iconv_close			NEW: iconv
iconv_open			NEW: iconv
if_freenameindex		NEW: IPv6
if_indextoname			NEW: IPv6
if_nameindex			NEW: IPv6
if_nametoindex			NEW: IPv6
in6addr_any			NEW: IPv6
in6addr_loopback		NEW: IPv6
inet6_isipv4mapped		NEW: IPv6
isastream			NEW: STREAMS
iswblank			NEW: GNU ext.
key_decryptsession		NEW: Secure RPC
key_decryptsession_pk		NEW: Secure RPC
key_encryptsession		NEW: Secure RPC
key_encryptsession_pk		NEW: Secure RPC
key_gendes			NEW: Secure RPC
key_get_conv			NEW: Secure RPC
key_secretkey_is_set		NEW: Secure RPC
key_setnet			NEW: Secure RPC
key_setsecret			NEW: Secure RPC
llrint				NEW: ISO C 9x
llrintf				NEW: ISO C 9x
llrintl				NEW: ISO C 9x
llround				NEW: ISO C 9x
llroundf			NEW: ISO C 9x
llroundl			NEW: ISO C 9x
log2				NEW: ISO C 9x
log2f				NEW: ISO C 9x
log2l				NEW: ISO C 9x
lrint				NEW: ISO C 9x
lrintf				NEW: ISO C 9x
lrintl				NEW: ISO C 9x
lround				NEW: ISO C 9x
lroundf				NEW: ISO C 9x
lroundl				NEW: ISO C 9x
lseek64				NEW: LFS
makecontext			NEW: Unix98
mempcpy				NEW: GNU ext.
mmap64				NEW: LFS
moncontrol			REMOVED
modify_ldt			NEW: kernel
nan				NEW: ISO C 9x
nanf				NEW: ISO C 9x
nanl				NEW: ISO C 9x
nearbyint			NEW: ISO C 9x
nearbyintf			NEW: ISO C 9x
nearbyintl			NEW: ISO C 9x
netname2host			NEW: Secure RPC
netname2user			NEW: Secure RPC
nexttoward			NEW: ISO C 9x
nexttowardf			NEW: ISO C 9x
nexttowardl			NEW: ISO C 9x
nftw				NEW: Unix98
nftw64				NEW: LFS
open64				NEW: LFS
passwd2des			NEW: Secure RPC
pow10				NEW: GNU ext.
pow10f				NEW: GNU ext.
pow10l				NEW: GNU ext.
pread				NEW: Unix98
pread64				NEW: LFS
printf_size			NEW: GNU ext.
printf_size_info		NEW: GNU ext.
profil_counter			REMOVED
pthread_mutexattr_getkind_np	REPLACED
pthread_mutexattr_setkind_np	REPLACED
ptsname				NEW: Unix98 PTY
ptsname_r			NEW: Unix98 PTY
putc_locked			REMOVED
putchar_locked			REMOVED
putgrent			NEW: GNU ext.
putmsg				NEW: STREAMS
putpmsg				NEW: STREAMS
pututxline			NEW: Unix98
pwrite				NEW: Unix98
pwrite64			NEW: LFS
readdir64			NEW: LFS
readdir64_r			NEW: LFS
remquo				NEW: ISO C 9x
remquof				NEW: ISO C 9x
remquol				NEW: ISO C 9x
round				NEW: ISO C 9x
roundf				NEW: ISO C 9x
roundl				NEW: ISO C 9x
rtime				NEW: GNU ext.
scalbln				NEW: ISO C 9x
scalblnf			NEW: ISO C 9x
scalblnl			NEW: ISO C 9x
scandir64			NEW: LFS
sendfile			NEW: kernel
setcontext			NEW: Unix98
setrlimit64			NEW: LFS
setutxent			NEW: Unix98
sighold				NEW: Unix98
sigignore			NEW: Unix98
sigqueue			NEW: POSIX.1b
sigrelse			NEW: Unix98
sigset				NEW: POSIX.1b
sigtimedwait			NEW: POSIX.1b
sigwaitinfo			NEW: POSIX.1b
sincos				NEW: GNU ext.
sincosf				NEW: GNU ext.
sincosl				NEW: GNU ext.
statfs64			NEW: LFS
statvfs				NEW: Unix98
statvfs64			NEW: LFS
strcasestr			NEW: GNU ext.
strtoimax			NEW: ISO C 9x
strtoumax			NEW: ISO C 9x
strverscmp			NEW: GNU ext.
svcauthdes_stats		NEW: Secure RPC
svcunix_create			NEW: sunrpc etx
svcunixfd_create		NEW: sunrpc ext
swapcontext			NEW: Unix98
tcgetsid			NEW: Unix98 PTY
tdestroy			NEW: GNU ext.
tgamma				NEW: ISO C 9x
tgammaf				NEW: ISO C 9x
tgammal				NEW: ISO C 9x
tmpfile64			NEW: LFS
trunc				NEW: ISO C 9x
truncate64			NEW: LFS
truncf				NEW: ISO C 9x
truncl				NEW: ISO C 9x
umount2				NEW: kernel
unlockpt			NEW: Unix98 PTY
updwtmpx			NEW: Unix98
user2netname			NEW: Secure RPC
utmpxname			NEW: Unix98
versionsort			NEW: GNU ext.
versionsort64			NEW: GNU ext.
waitid				NEW: Unix98
wcscasecmp			NEW: GNU ext.
wcsncasecmp			NEW: GNU ext.
wcsnlen				NEW: GNU ext.
wcstoimax			NEW: ISO C 9x
wcstoll				NEW: ISO C 9x
wcstoull			NEW: ISO C 9x
wcstoumax			NEW: ISO C 9x
wcswcs				NEW: Unix98
wordexp				NEW: POSIX.2
wordfree			NEW: POSIX.2
write_profiling			REMOVED
xdecrypt			NEW: Secure RPC
xdr_authdes_cred		NEW: Secure RPC
xdr_authdes_verf		NEW: Secure RPC
xdr_cryptkeyarg			NEW: Secure RPC
xdr_cryptkeyarg2		NEW: Secure RPC
xdr_cryptkeyres			NEW: Secure RPC
xdr_getcredres			NEW: Secure RPC
xdr_key_netstarg		NEW: Secure RPC
xdr_key_netstres		NEW: Secure RPC
xdr_keybuf			NEW: Secure RPC
xdr_keystatus			NEW: Secure RPC
xdr_netnamestr			NEW: Secure RPC
xdr_sizeof			NEW: Secure RPC
xdr_unixcred			NEW: sunrpc ext
xencrypt			NEW: Secure RPC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Version 2.0.6

* more bug fixes


Version 2.0.5

* more bug fixes

* inet_ntoa is thread-safe

* updwtmp is moved from libutil to libc

* rewrite of cbrt function

* update of timezone data

Version 2.0.4

* more bug fixes

Version 2.0.3

* more bug fixes

Version 2.0.2

* more bug fixes

* add atoll function

* fix complex problems in Berkeley DB code

* fix math functions

Version 2.0.1

* fixed lots of header problems (especially Linux/GNU specific)

* dynamic loader preserves all registers

* Roland McGrath provided support for handling of auxiliary objects in
  the ELF dynamic loader.

* support for parallel builds is improved

Version 2.0

* GNU extensions are no longer declared by default.  To enable them you
  must define the macro `_GNU_SOURCE' in your program or compile with
  `-D_GNU_SOURCE'.

* The library has changed from using GNU ld symbol aliases to using weak
  symbols where available.  The ELF object file format supports weak
  symbols; GNU ld also supports weak symbols in the a.out format.  (There
  is also now support for other GNU ld extensions in ELF.  Use the
  `--with-elf' option to configure to indicate you have ELF, and
  `--with-gnu-ld' if using GNU ld.)  This change resulted in the deletion
  of many files which contained only symbol aliases, reducing the size of
  the source and the compiled library; many other files were renamed to
  less cryptic names previously occupied by the symbol alias files.
  There is a new header file <elf.h> for programs which operate on
  files in the ELF format.

* Converted to Autoconf version 2, so `configure' has more options.
  Run `configure --help' to see the details.

* The library can now be configured to build profiling, highly-optimized
  (but undebuggable), and/or shared libraries (ELF with GNU ld only).  The
  `--enable-profile', `--enable-omitfp', and `--enable-shared' options to
  `configure' enable building these extra libraries.  The shared library is
  built by default when using both ELF and GNU ld.  When shared libraries
  are enabled, the new library `-ldl' is available for arbitrary run-time
  loading of shared objects; its interface is defined in <dlfcn.h>.  The
  new header file <link.h> gives access to the internals of the run-time
  dynamic linker, `ld.so'.  The shell script `ldd' is similar to the
  application of same name on other systems and it provides information
  about dynamically linked binaries.

* The C library now provides the run-time support code for profiling
  executables compiled with `-pg'.  Programs can control the profiling code
  through the interface in <sys/gmon.h>.  The `gmon.out' files written by
  the GNU C library can be read only by GNU `gprof' (from GNU binutils);
  the support for this file format was contributed by David Mosberger-Tang.

* The math code has been replaced with a math library based on fdlibm from
  Sun, and modified by JT Conklin and Ulrich Drepper with i387 support, by
  Ian Taylor with `float' functions and by Ulrich Drepper with `long double'
  functions.  The math functions now reside in a separate library,  so
  programs using them will need to use `-lm' their linking commands.

* John C. Bowman contributed optimized ix87 assembler inline functions.

* Ulrich Drepper has contributed support for an `/etc/nsswitch.conf'
  mechanism similar to that found in Solaris 2.  This is now used for the
  group, passwd, hosts, networks, services, protocols, rpc, ethers,
  shadow, netgroup, publickey, and alias databases.  The `nsswitch.conf'
  file controls what services are used for each individual database.  This
  works by loading shared libraries with names specified in `nsswitch.conf',
  so service modules can be changed or added at any time without even
  relinking any program.  Currently there are the file, db, and NIS based
  NSS services available.

* The new functions `strtoq' and `strtouq' parse integer values from
  strings, like `strtol' and `strtoul', but they return `long long int' and
  `unsigned long long int' values, respectively (64-bit quantities).

* The new functions `strtof' and `strtold' parse floating-point values from
  strings, like `strtod', but they return `float' and `long double' values,
  respectively (on some machines `double' and `long double' are the same).

* Ulrich Drepper has contributed new implementations of the floating-point
  printing and reading code used in the `printf' family of functions and
  `strtod', `strtof', and `strtold'.  These new functions are perfectly
  accurate, and much faster than the old ones.

* The implementation of the POSIX locale model was completely rewritten by
  Ulrich Drepper.  This includes the new programs `localedef' and `locale'
  to compile the POSIX locale definition.

* The former dummy implementations of the strcoll and strxfrm function are
  now replaced by fully functional code contributed by Ulrich Drepper.  The
  collation information comes from the POSIX locale definitions.

* The new header <langinfo.h> defines an interface for accessing
  various locale-dependent data (using the locale chosen with `setlocale').

* Ulrich Drepper has contributed a new suite of functions for operation on
  wide-character and multibyte-character strings, in <wchar.h>;
  and classification and case conversion of wide characters, in <wctype.h>.
  These new functions are conforming to the ISO C, Amendement 1 specification.

* There is now a second implementation of the standard I/O library available.
  It comes from GNU libg++ as was written by Per Bothner, heavily modified
  by Hongjiu Lu and made thread safe by Ulrich Drepper.

* You can now use positional parameter specifications in format strings
  for the `printf' and `scanf' families of functions.  For example,
  `printf ("Number %2$d, Mr %1$s\n", "Jones", 6);'' prints
  ``Number 6, Mr Jones''.  This is mainly useful when providing different
  format strings for different languages, whose grammars may dictate
  different orderings of the values being printed.  To support this
  feature, the interface for `register_printf_handler' has changed; see
  the header file <printf.h> for details.

* The `printf' and `scanf' families of functions now understand a new
  formatting flag for numeric conversions: the ' flag (e.g. %'d or %'f) says
  to group numbers as indicated by the locale; for `scanf' and friends, this
  says to accept as valid only a number with all the proper grouping
  separators in the right places.  In the default "C" locale, numbers are
  not grouped; but locales for specific countries will define the usual
  conventions (i.e. separate thousands with `,' in the US locale).

* The pgrp functions have been regularized, slightly incompatibly but much
  less confusingly.  The core functions are now `getpgid' and `setpgid',
  which take arguments for the PID to operate on; the POSIX.1 `getpgrp' (no
  argument) and BSD `setpgrp' (identical to `setpgid') functions are
  provided for compatibility.  There is no longer an incompatible `getpgrp'
  with an argument declared under _BSD_SOURCE; no BSD code uses it.

* The new header file <fts.h> and suite of functions simplify programs that
  operate on directory trees.  This code comes from 4.4 BSD.

* The resolver code has been updated from the BIND 4.9.5-P1 release.
  Parts of the code were heavily modified by Ulrich Drepper to fit in the
  NSS scheme used in glibc.

* There is a new malloc debugging hook `__memalign_hook'.

* There are new typedefs `ushort' for `unsigned short int' and `uint' for
  `unsigned int' in <sys/types.h>.  These are for compatibility only and
  their use is discouraged.

* The `-lmcheck' library to enable standard malloc debugging hooks is now
  done differently, so that it works even without GNU ld.

* New function `euidaccess' checks allowed access to a file like `access',
  but using the effective IDs instead of the real IDs.

* The time zone data files have been updated for the latest and greatest
  local time conventions of the countries of the world.

* The new function `dirfd' extracts the file descriptor used by a DIR stream;
  see <dirent.h>.

* The new functions `ecvt', `fcvt', and `gcvt' provide an obsolete interface
  for formatting floating-point numbers.  They are provided only for
  compatibility; new programs should use `sprintf' instead.  There are
  also equivalent function for the `long double' floating-point type and
  all functions also exist in a reentrant form.

* The new auxiliary library `-lutil' from 4.4 BSD contains various
  functions for maintaining the login-record files (primarily of use to
  system programs such as `login'), and convenient functions for
  allocating and initializing a pseudo-terminal (pty) device.

* Ulrich Drepper has contributed new support for System V style
  shared memory and IPC on systems that support it.

* Ulrich Drepper has contributed several miscellaneous new functions found
  in System V: The `hsearch' family of functions provide an effective
  implementation of hash tables; `a64l' and `l64a' provide a very simple
  binary to ASCII mapping; `drand48' and friends provide a 48-bit random
  number generator.

* Ulrich Drepper has contributed new reentrant counterparts for the
  `random' and `hsearch' families of functions; `random_r', `hsearch_r', etc.

* Ulrich Drepper has contributed new, highly-optimized versions of several
  string functions for the i486/Pentium family of processors.

* Ulrich Drepper has updated the Linux-specific code, based largely
  on work done in Hongjiu Lu's version of GNU libc for Linux.
  The GNU library now supports Linux versions 2.0.10 and later,
  using the ELF object file format (i[3456]86-*-linux).

* Andreas Schwab has ported the C library to Linux/m68k (m68k-*-linux).

* David Mosberger-Tang and Richard Henderson have ported the C library
  to Linux/Alpha (alpha-*-linux).  Richard Henderson contributed the
  dynamic linking support for ELF/Alpha.

* Richard Henderson contributed several Alpha optimized assembler function
  for arithmetic and string handling.

* Ulrich Drepper has contributed a new set of message catalog functions to
  support multiple languages using the <libintl.h> interface, for use with
  his new package GNU gettext.  Translation volunteers have contributed
  catalogs of the library's messages in Spanish, German, and Korean.

* For compatibility with XPG4, Ulrich Drepper has contributed the `gencat'
  program and the `catgets' function for reading the catalog files it
  creates.  (The <libintl.h> interface is preferred; we include the
  <nl_types.h> interface using `catgets' only for source compatibility with
  programs already written to use it.)

* New header file <values.h> gives SVID-compatible names for <limits.h>
  constants.

* Various new macros, declarations, and small header files for compatibility
  with 4.4 BSD.

* New function `group_member' is a convenient way to check if a process has
  a given effective group ID.

* When using GCC 2.7 and later, the socket functions are now declared in a
  special way so that passing an argument of type `struct sockaddr_in *',
  `struct sockaddr_ns *', or `struct sockaddr_un *' instead of the generic
  `struct sockaddr *' type, does not generate a type-clash warning.

* New function `error' declared in header file <error.h> is a convenient
  function for printing error messages and optionally exiting; this is the
  canonical function used in GNU programs.  The new functions `err', `warn',
  and friends in header file <err.h> are the canonical 4.4 BSD interface for
  doing the same thing.

* The <glob.h> interface has several new flags from 4.4 BSD that extend the
  POSIX.2 `glob' function to do ~ and {...} expansion.

* New function `unsetenv' complements `setenv' for compatibility with 4.4 BSD.
  `clearenv' which is used in POSIX.9 is also available.

* New function `getsid' returns session ID number on systems that support it.

* We have incorporated the 4.4 BSD `db' library (version 1.85).  New header
  files <db.h> and <mpool.h> provide a rich set of functions for several
  types of simple databases stored in memory and in files, and <ndbm.h> is
  an old `ndbm'-compatible interface using the `db' functions.  Link with
  `-ldb' to get these functions.

* New macro `strdupa' copies a string like `strdup', but uses local stack
  space from `alloca' instead of dynamic heap space from `malloc'.

* New function `strnlen' is like `strlen' but searches only a given maximum
  number of characters for the null terminator.  `stpncpy', `strndup' and
  `strndupa' are similar variants for the `stpcpy', `strdup' and `strdupa'
  function.

* New function `statfs' in header <sys/statfs.h>.

* The new <argz.h> and <envz.h> interfaces contributed by Miles Bader
  provide convenient functions for operating on blocks of null-terminated
  strings.

* A new suite of functions in <utmp.h> handle all the details of reading
  and writing the utmp file.

* An implementation of the NIS/YP(tm) based NSS service was contributed by
  Thorsten Kukuk.

* Paul Eggert and Ulrich Drepper modified the `strftime' function to be
  completely POSIX compliant and also implemented the extended functionality
  to handle alternate digit representation and alternate era date formats.

* Ulrich Drepper provided an implementation of the `strptime' function
  defined in XPG4.2 which transforms a string into a `struct tm' value.

* Paul Eggert provided the tzselect shell script as part of the timezone
  code.  The shell script makes it easy to select the correct timezone
  specification.

* The implementation of the malloc family of functions is completely replaced
  by a new implementation by Doug Lea with many improvements by Wolfram Gloger.
  The implementation uses the mmap function (if available) and it is
  optimized for the use in multi threaded programs.

* Ulrich Drepper contributed a MD5 "encryption" for the crypt family of
  functions.  This new functionality is usable by specifying a special
  salt string and it is compatible with implementation on *BSD systems.

* Lots of functions from the XPG4.2 standard were added by Ulrich Drepper:
  `getsubopt' to handle second level command line options, `bsd_signal'
  to access BSD style `signal' functionality, the obsolete `regexp' style
  expression matcher.

* the `lchown' function is available on system which support this
  functionality.

* The implementation of the shadow password handling function was contributed
  by Ulrich Drepper.

* David Mosberger-Tang changed the SunRPC implementation to be 64bit safe.

* POSIX.1g support was added.  The <sys/select.h> header is available,
  `isfdtype' and `pselect' are implemented.  Craig Metz contributed an
  implementation of `getaddrinfo'.

Version 1.09

* For cross-compilation you should now set `BUILD_CC' instead of `HOST_CC'.

* New header file <fstab.h> and new functions `getfsspec', `getfsent' and
  friends, for parsing /etc/fstab.  This code comes from 4.4 BSD.

* The new function `daemon' from 4.4 BSD is useful for server programs that
  want to put themselves in the background.

* Joel Sherrill has contributed support for several standalone boards that
  run without an operating system.

* `printf', `scanf' and friends now accept a `q' type modifier for long
  long int as well as `ll'.  Formats using these might be `%qu' or `%lld'.

* All of the code taken from BSD (notably most of the math and networking
  routines) has been updated from the BSD 4.4-Lite release.

* The resolver code has been updated from the BIND-4.9.3-BETA9 release.

* The new functions `getdomainname' and `setdomainname' fetch or change the
  YP/NIS domain name.  These are system calls which exist on systems which
  have YP (aka NIS).

* The time zone data files have been updated for the latest international
  conventions.

* The SunRPC programs `portmap' and `rpcinfo' are now installed in
  $(sbindir) (usually /usr/local/sbin) instead of $(bindir).

Version 1.08

* The C library now includes support for Sun RPC, from Sun's free
  RPCSRC-4.0 distribution.  The `portmap', `rpcinfo', and `rpcgen' programs
  are included.  (There is still no support for YP.)

* Tom Quinn has contributed a port of the C library to SGI machines running
  Irix 4 (mips-sgi-irix4).

* The new `lockf' function is a simplified interface to the locking
  facilities of `fcntl', included for compatibility.

* New time functions `timegm', `timelocal', and `dysize' for compatibility.

* New header file <sys/timeb.h> and new function `ftime' for compatibility.

* New header files <poll.h> and <sys/poll.h> and new function `poll' for
  compatibility.

* The error message printed by `assert' for a failed assertion now includes
  the name of the program (if using GNU ld) and the name of the calling
  function (with versions of GCC that support this).

* The `psignal' function is now declared in <signal.h>, not <stdio.h>.

* The library now includes the <sys/mman.h> header file and memory
  management functions `mmap', `munmap', `mprotect', `msync', and
  `madvise', on systems that support those facilities.

* The interface for `mcheck' has changed slightly: the function called to
  abort the program when an allocation inconsistency is detected now takes
  an argument that indicates the type of failure.  The new function
  `mprobe' lets you request a consistency check for a particular block at
  any time (checks are normally done only when you call `free' or `realloc'
  on a block).

* It is now possible to easily cross-compile the C library, building on one
  system a library to run on another machine and/or operating system.  All
  you need to do is set the variable `HOST_CC' in `configparms' to the
  native compiler for programs to run on the machine you are building on (a
  few generator programs are used on Unix systems); set `CC' to the
  cross-compiler.

* The new function `fexecve' (only implemented on the GNU system) executes
  a program file given a file descriptor already open on the file.

Version 1.07

* Brendan Kehoe has contributed most of a port to the DEC Alpha
  running OSF/1 (alpha-dec-osf1).  He says it is 75% complete.

* You can set the variable `libprefix' in `configparms' to specify a prefix
  to be prepended to installed library files; this makes it easy to install
  the GNU C library to be linked as `-lgnuc' or whatever.

* The new `stpncpy' is a cross between `stpcpy' and `strncpy': It
  copies a limited number of characters from a string, and returns the
  address of the last character written.

* You no longer need to check for whether the installed `stddef.h' is
  compatible with the GNU C library.  configure now checks for you.

* You can now define a per-stream `fileno' function to convert the
  stream's cookie into an integral file descriptor.

* ``malloc (0)'' no longer returns a null pointer.  Instead, it
  allocates zero bytes of storage, and returns a unique pointer which
  you can pass to `realloc' or `free'.  The behavior is undefined if
  you dereference this pointer.

* The C library now runs on Sony NEWS m68k machines running either
  NewsOS 3 or NewsOS 4.

* The new `syscall' function is a system-dependent primitive function
  for invoking system calls.  It has the canonical behavior on Unix
  systems, including unreliable return values for some calls (such as
  `pipe', `fork' and `getppid').

* The error code `EWOULDBLOCK' is now obsolete; it is always defined
  to `EAGAIN', which is the preferred name.  On systems whose kernels
  use two distinct codes, the C library now translates EWOULDBLOCK to
  EAGAIN in every system call function.

Version 1.06

* The GNU C Library Reference Manual is now distributed with the library.
  `make dvi' will produce a DVI file of the printed manual.
  `make info' will produce Info files that you can read on line using C-h i
  in Emacs or the `info' program.
  Please send comments on the manual to bug-glibc-manual@gnu.org.

* The library now supports SVR4 on i386s (i386-unknown-sysv4).

* Brendan Kehoe has contributed a port to Sun SPARCs running Solaris 2.

* Jason Merrill has contributed a port to the Sequent Symmetry running
  Dynix version 3 (i386-sequent-dynix).

* The library has been ported to i386s running SCO 3.2.4 (also known as SCO
  ODT 2.0; i386-unknown-sco3.2.4) or SCO 3.2 (i386-unknown-sco3.2).

* New function `memory_warnings' lets you arrange to get warnings when
  malloc is running out of memory to allocate, like Emacs gives you.

* The C library now contains the relocating allocator used in Emacs 19 for
  its editing buffers.  This allocator (ralloc) minimizes allocation
  overhead and fragmentation by moving allocated regions around whenever it
  needs to.  You always refer to a ralloc'd region with a "handle" (a
  pointer to a pointer--an object of type `void **').

* There is a new `printf' format: `%m' gives you the string corresponding
  to the error code in `errno'.

* In `scanf' formats, you can now use `%as' or `%a[' to do the normal `%s'
  or `%[' conversion, but instead of filling in a fixed-sized buffer you
  pass, the `a' modifier says to fill in a `char **' you pass with a
  malloc'd string.

* The `fnmatch' function supports the new flag bits `FNM_LEADING_DIR' and
  `FNM_CASEFOLD'.  `FNM_LEADING_DIR' lets a pattern like `foo*' match a
  name like `foo/bar'.  `FNM_CASEFOLD' says to ignore case in matching.

* `mkstemp' is a traditional Unix function to atomically create and open a
  uniquely-named temporary file.

Version 1.05

* The standard location for the file that says what the local timezone is
  has changed again.  It is now `/usr/local/etc/localtime' (or more
  precisely, `${prefix}/etc/localtime') rather than `/etc/localtime'.

* The distribution no longer contains any files with names longer than 14
  characters.

* `struct ttyent' has two new flag bits: TTY_TRUSTED and TTY_CONSOLE.
  These are set by the new `trusted' and `console' keywords in `/etc/ttys'.

* New functions `ttyslot' and `syslog' from 4.4 BSD.

Version 1.04

* The configuration process has changed quite a bit.  The `configure'
  script is now used just like the configuration scripts for other GNU
  packages.  The `sysdeps' directory hierarchy is much rearranged.
  The file `INSTALL' explains the new scheme in detail.

* The header files no longer need to be processed into ANSI C and
  traditional C versions.  There is just one set of files to install, and
  it will work with ANSI or old C compilers (including `gcc -traditional').

* Brendan Kehoe and Ian Lance Taylor have ported the library to the
  MIPS DECStation running Ultrix 4.

* The Sun 4 startup code (crt0) can now properly load SunOS 4 shared libraries.
  Tom Quinn contributed the initial code.  The GNU C library can NOT yet be
  made itself into a shared library.

* Yet further improved support for the i386, running 4.3 BSD-like systems
  (such as Mach 3 with the Unix single-server), or System V.

* New function `strncasecmp' to do case-insensitive string comparison
  with limited length.

* New function `strsep' is a reentrant alternative to `strtok'.

* New functions `scandir' and `alphasort' for searching directories.

* New function `setenv' is a better interface to `putenv'.

* Ian Lance Taylor has contributed an implementation of the SVID `ftw'
  function for traversing a directory tree.

* The GNU obstack package is now also part of the C library.
  The new function `open_obstack_stream' creates a stdio stream that
  writes onto an obstack; `obstack_printf' and `obstack_vprintf' do
  formatted output directly to an obstack.

* Miscellaneous new functions: reboot, nice, sigaltstack (4.4 BSD only),
  cfmakeraw, getusershell, getpass, swab, getttyent, seteuid, setegid.

* `FNM_FILE_NAME' is another name for `FNM_PATHNAME', used with `fnmatch'.

* The new functions `strfry' and `memfrob' do mysterious and wonderful
  things to your strings.

* There are some new test programs: test-fseek, testmb, and testrand.

* Some work has been done to begin porting the library to 4.4 BSD and Linux.
  These ports are not finished, but are a good starting place for really
  supporting those systems.

* `/etc/localtime' is now the standard location for the file that says what
  the local timezone is, rather than `/usr/local/lib/zoneinfo/localtime'.
  This follows the general principle that `/etc' is the place for all local
  configuration files.

* The C library header files now use `extern "C"' when used by the C++
  compiler, so the C library should now work with C++ code.

* The header file <bstring.h> is gone.  <string.h> now declares bcopy,
  bcmp, bzero, and ffs.  (Update: nowadays these functions are declared
  in <strings.h>.)

* Mike Haertel (of GNU e?grep and malloc fame) has written a new sorting
  function which uses the `merge sort' algorithm, and is said to be
  significantly faster than the old GNU `qsort' function.  Merge sort is
  now the standard `qsort' function.  The new algorithm can require a lot
  of temporary storage; so, the old sorting function is called when the
  required storage is not available.

* The C library now includes Michael Glad's Ultra Fast Crypt, which
  provides the Unix `crypt' function, plus some other entry points.

* The code and header files taken from 4.4 BSD have been updated with the
  latest files released from Berkeley.

----------------------------------------------------------------------
Copyright information:

Copyright (C) 1992-2016 Free Software Foundation, Inc.

   Permission is granted to anyone to make or distribute verbatim copies
   of this document as received, in any medium, provided that the
   copyright notice and this permission notice are preserved,
   thus giving the recipient permission to redistribute in turn.

   Permission is granted to distribute modified versions
   of this document, or of portions of it,
   under the above conditions, provided also that they
   carry prominent notices stating who last changed them.

Local variables:
version-control: never
fill-column: 76
End:
