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

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

Major new features:

* Nominative and genitive month names are now supported for the Catalan and
  Czech languages.  The Catalan and Greek languages now support abbreviated
  alternative month names.

Deprecated and removed features, and other changes affecting compatibility:

 * The macros 'major', 'minor', and 'makedev' are now only available from
   the header <sys/sysmacros.h>; not from <sys/types.h> or various other
   headers that happen to include <sys/types.h>.  These macros are rarely
   used, not part of POSIX nor XSI, and their names frequently collide with
   user code; see https://sourceware.org/bugzilla/show_bug.cgi?id=19239 for
   further explanation.

   <sys/sysmacros.h> is a GNU extension.  Portable programs that require
   these macros should first include <sys/types.h>, and then include
   <sys/sysmacros.h> if __GNU_LIBRARY__ is defined.

Security related changes:

  CVE-2021-3999: Passing a buffer of size exactly 1 byte to the getcwd
  function may result in an off-by-one buffer underflow and overflow
  when the current working directory is longer than PATH_MAX and also
  corresponds to the / directory through an unprivileged mount
  namespace.  Reported by Qualys.

  CVE-2016-10739: The getaddrinfo function could successfully parse IPv4
  addresses with arbitrary trailing characters, potentially leading to data
  or command injection issues in applications.

  CVE-2018-19591: A file descriptor leak in if_nametoindex can lead to a
  denial of service due to resource exhaustion when processing getaddrinfo
  calls with crafted host names.  Reported by Guido Vranken.

  CVE-2017-18269: An SSE2-based memmove implementation for the i386
  architecture could corrupt memory.  Reported by Max Horn.

  CVE-2018-11236: Very long pathname arguments to realpath function could
  result in an integer overflow and buffer overflow.  Reported by Alexey
  Izbyshev.

  CVE-2018-11237: The mempcpy implementation for the Intel Xeon Phi
  architecture could write beyond the target buffer, resulting in a buffer
  overflow.  Reported by Andreas Schwab.

The following bugs are resolved with this release:

  [6889] 'PWD' mentioned but not specified
  [16335] Feature test macro documentation incomplete and out of date
  [17343] Signed integer overflow in /stdlib/random_r.c
  [20419] files with large allocated notes crash in open_verify
  [21269] i386 sigaction sa_restorer handling is wrong
  [22342] NSCD not properly caching netgroup
  [22638] sparc: static binaries are broken if glibc is built by gcc
    configured with --enable-default-pie
  [22644] memmove-sse2-unaligned on 32bit x86 produces garbage when crossing
    2GB threshold
  [22735] Misleading typo in time.h source comment regarding CLOCKS_PER_SECOND
  [22786] Stack buffer overflow in realpath() if input size is close
    to SSIZE_MAX
  [22797] Linux: use reserved name __key in pkey_get
  [22807] PTRACE_* constants missing for powerpc
  [22818] posix/tst-glob_lstat_compat failure on alpha
  [22827] RISC-V ELF64 parser mis-reads flag in ldconfig
  [22848] ca_ES: update date definitions from CLDR
  [22884] RISCV fmax/fmin handle signalling NANs incorrectly
  [22918] multiple common of `__nss_shadow_database'
  [22919] sparc32: backtrace yields infinite backtrace with makecontext
  [22926] FTBFS on powerpcspe
  [22932] lt_LT: Update of abbreviated month names from CLDR required
  [22937] Greek (el_GR, el_CY) locales actually need ab_alt_mon
  [22947] FAIL: misc/tst-preadvwritev2
  [22963] cs_CZ: Add alternative month names
  [23005] Crash in __res_context_send after memory allocation failure
  [23037] initialize msg_flags to zero for sendmmsg() calls
  [23069] sigaction broken on riscv64-linux-gnu
  [23137] s390: pthread_join sometimes block indefinitely (on 31bit and libc
    build with -Os)
  [23152] gd_GB: Fix typo in "May" (abbreviated)
  [23166] sunrpc: Remove stray exports without --enable-obsolete-rpc
  [23196] __mempcpy_avx512_no_vzeroupper mishandles large copies


Version 2.27

Major new features:

* The GNU C Library can now be compiled with support for building static
  PIE executables (See --enable-static-pie in INSTALL).  These static PIE
  executables are like static executables but can be loaded at any address
  and provide additional security hardening benefits at the cost of some
  memory and performance.  When the library is built with --enable-static-pie
  the resulting libc.a is usable with GCC 8 and above to create static PIE
  executables using the GCC option '-static-pie'.  This feature is currently
  supported on i386, x86_64 and x32 with binutils 2.29 or later, and on
  aarch64 with binutils 2.30 or later.

* Optimized x86-64 asin, atan2, exp, expf, log, pow, atan, sin, cosf,
  sinf, sincosf and tan with FMA, contributed by Arjan van de Ven and
  H.J. Lu from Intel.

* Optimized x86-64 trunc and truncf for processors with SSE4.1.

* Optimized generic expf, exp2f, logf, log2f, powf, sinf, cosf and sincosf.

* In order to support faster and safer process termination the malloc API
  family of functions will no longer print a failure address and stack
  backtrace after detecting heap corruption.  The goal is to minimize the
  amount of work done after corruption is detected and to avoid potential
  security issues in continued process execution.  Reducing shutdown time
  leads to lower overall process restart latency, so there is benefit both
  from a security and performance perspective.

* The abort function terminates the process immediately, without flushing
  stdio streams.  Previous glibc versions used to flush streams, resulting
  in deadlocks and further data corruption.  This change also affects
  process aborts as the result of assertion failures.

* On platforms where long double has the IEEE binary128 format (aarch64,
  alpha, mips64, riscv, s390 and sparc), the math library now implements
  _Float128 interfaces for that type, as defined by ISO/IEC TS 18661-3:2015.
  These are the same interfaces added in version 2.26 for some platforms where
  this format is supported but is not the format of long double.

* On platforms with support for _Float64x (aarch64, alpha, i386, ia64,
  mips64, powerpc64le, riscv, s390, sparc and x86_64), the math library now
  implements interfaces for that type, as defined by ISO/IEC TS
  18661-3:2015.  These are corresponding interfaces to those supported for
  _Float128.

* The math library now implements interfaces for the _Float32, _Float64 and
  _Float32x types, as defined by ISO/IEC TS 18661-3:2015.  These are
  corresponding interfaces to those supported for _Float128.

* glibc now implements the memfd_create and mlock2 functions on Linux.

* Support for memory protection keys was added.  The <sys/mman.h> header now
  declares the functions pkey_alloc, pkey_free, pkey_mprotect, pkey_set,
  pkey_get.

* The copy_file_range function was added.

* Optimized memcpy, mempcpy, memmove, and memset for sparc M7.

* The ldconfig utility now processes `include' directives using the C/POSIX
  collation ordering.  Previous glibc versions used locale-specific
  ordering, the change might break systems that relied on that.

* Support for two grammatical forms of month names has been added.
  In a call to strftime, the "%B" and "%b" format specifiers will now
  produce the grammatical form required when the month is used as part
  of a complete date.  New "%OB" and "%Ob" specifiers produce the form
  required when the month is named by itself.  For instance, in Greek
  and in many Slavic and Baltic languages, "%B" will produce the month
  in genitive case, and "%OB" will produce the month in nominative case.

  In a call to strptime, "%B", "%b", "%h", "%OB", "%Ob", and "%Oh"
  are all valid and will all accept any known form of month
  name---standalone or complete, abbreviated or full.  In a call to
  nl_langinfo, the query constants MON_1..12 and ABMON_1..12 return
  the strings used by "%B" and "%b", respectively.  New query
  constants ALTMON_1..12 and _NL_ABALTMON_1..12 return the strings
  used by "%OB" and "%Ob", respectively.

  In a locale definition file, use "alt_mon" and "ab_alt_mon" to
  define the strings for %OB and %Ob, respectively; these have the
  same syntax as "mon" and "abmon".  These arrays are optional; if they
  are not provided then they have the same content as "mon" and "abmon",
  respectively.

  These features are provided for locales which define "alt_mon" and/or
  "ab_alt_mon" in their locale source data.  This release includes such
  alternative month name data for the following languages: Belarusian,
  Croatian, Greek, Lithuanian, Polish, Russian, and Ukrainian.

  This feature is currently a GNU extension, but it is expected to
  be added to the next revision of POSIX, and it is also already
  available on some BSD-derived operating systems.

  This feature will cause existing statically compiled applications
  to fail to load locales and fall back to the builtin C/POSIX locales.
  See notes below for other changes affecting compatibility.

* Support for the RISC-V ISA running on Linux has been added.  This port
  requires at least binutils-2.30, gcc-7.3.0, and linux-4.15; and is supported
  for the following ISA and ABI pairs:

    - rv64imac lp64
    - rv64imafdc lp64
    - rv64imafdc lp64d

Deprecated and removed features, and other changes affecting compatibility:

* Statically compiled applications attempting to load locales compiled for the
  GNU C Library version 2.27 will fail and fall back to the builtin C/POSIX
  locale.  The reason for this is that the addition of the new "%OB" and "%Ob",
  support for two grammatical forms of the month names, also extends the locale
  data binary format.  Static applications needing locale support must be
  recompiled to match the runtime and data they are deployed with. In some
  distributions there is an upgrade window where dynamically linked applications
  may use a new library but the old locale data and also fall back to the
  builtin C/POSIX locales; restarting the application process is sufficient to
  fix this.

* Support for statically linked applications which call dlopen is deprecated
  and will be removed in a future version of glibc.  Applications which call
  dlopen need to be linked dynamically instead.

* Support for old programs which use internal stdio data structures and
  functions is deprecated.  This includes programs which use the C++ streams
  provided by libstdc++ in GCC 2.95.  Programs which use the internal
  symbols _IO_adjust_wcolumn, _IO_default_doallocate, _IO_default_finish,
  _IO_default_pbackfail, _IO_default_uflow, _IO_default_xsgetn,
  _IO_default_xsputn, _IO_doallocbuf, _IO_do_write, _IO_file_attach,
  _IO_file_close, _IO_file_close_it, _IO_file_doallocate, _IO_file_fopen,
  _IO_file_init, _IO_file_jumps, _IO_fileno, _IO_file_open,
  _IO_file_overflow, _IO_file_read, _IO_file_seek, _IO_file_seekoff,
  _IO_file_setbuf, _IO_file_stat, _IO_file_sync, _IO_file_underflow,
  _IO_file_write, _IO_file_xsputn, _IO_flockfile, _IO_flush_all,
  _IO_flush_all_linebuffered, _IO_free_backup_area, _IO_free_wbackup_area,
  _IO_init, _IO_init_marker, _IO_init_wmarker, _IO_iter_begin, _IO_iter_end,
  _IO_iter_file, _IO_iter_next, _IO_least_wmarker, _IO_link_in,
  _IO_list_all, _IO_list_lock, _IO_list_resetlock, _IO_list_unlock,
  _IO_marker_delta, _IO_marker_difference, _IO_remove_marker, _IO_seekmark,
  _IO_seekwmark, _IO_str_init_readonly, _IO_str_init_static,
  _IO_str_overflow, _IO_str_pbackfail, _IO_str_seekoff, _IO_str_underflow,
  _IO_switch_to_main_wget_area, _IO_switch_to_wget_mode,
  _IO_unsave_wmarkers, _IO_wdefault_doallocate, _IO_wdefault_finish,
  _IO_wdefault_pbackfail, _IO_wdefault_setbuf, _IO_wdefault_uflow,
  _IO_wdefault_xsgetn, _IO_wdefault_xsputn, _IO_wdoallocbuf, _IO_wdo_write,
  _IO_wfile_jumps, _IO_wfile_overflow, _IO_wfile_sync, _IO_wfile_underflow,
  _IO_wfile_xsputn, _IO_wmarker_delta, or _IO_wsetb may stop working with a
  future version of glibc.  Unlike other symbol removals, these old
  applications will not be supported using compatibility symbols.

* On GNU/Linux, the obsolete Linux constant PTRACE_SEIZE_DEVEL is no longer
  defined by <sys/ptrace.h>.

* libm no longer supports SVID error handling (calling a user-provided
  matherr function on error) or the _LIB_VERSION variable to control error
  handling.  (SVID error handling and the _LIB_VERSION variable still work
  for binaries linked against older versions of the GNU C Library.)  The
  libieee.a library is no longer provided.  math.h no longer defines struct
  exception, or the macros X_TLOSS, DOMAIN, SING, OVERFLOW, UNDERFLOW,
  TLOSS, PLOSS and HUGE.

* The libm functions pow10, pow10f and pow10l are no longer supported for
  new programs.  Programs should use the standard names exp10, exp10f and
  exp10l for these functions instead.

* The mcontext_t type is no longer the same as struct sigcontext.  On
  platforms where it was previously the same, this changes the C++ name
  mangling for interfaces involving this type.

* The add-ons mechanism for building additional packages at the same time as
  glibc has been removed.  The --enable-add-ons configure option is now
  ignored.

* The --without-fp configure option is now ignored.  Whether hardware
  floating-point instructions are used is now configured based on whether
  the compiler used at configure time (without any options implied by a
  --with-cpu= configure option) uses such instructions.

* The res_hnok, res_dnok, res_mailok and res_ownok functions now check that
  the specified string can be parsed as a domain name.

* In the malloc_info output, the <heap> element may contain another <aspace>
  element, "subheaps", which contains the number of sub-heaps.

* The libresolv function p_secstodate is no longer supported for new
  programs.

* The tilepro-*-linux-gnu configuration is no longer supported.

* The nonstandard header files <libio.h> and <_G_config.h> are deprecated
  and will be removed in a future release.  Software that is still using
  either header should be updated to use standard <stdio.h> interfaces
  instead.

  libio.h was originally the header for a set of supported GNU extensions,
  but they have not been maintained as such in many years, they are now
  standing in the way of improvements to stdio, and we don't think there are
  any remaining external users.  _G_config.h was never intended for public
  use, but predates the bits convention.

Changes to build and runtime requirements:

* bison version 2.7 or later is required to generate code in the 'intl'
  subdirectory.

Security related changes:

  CVE-2009-5064: The ldd script would sometimes run the program under
  examination directly, without preventing code execution through the
  dynamic linker.  (The glibc project disputes that this is a security
  vulnerability; only trusted binaries must be examined using the ldd
  script.)

  CVE-2017-15670: The glob function, when invoked with GLOB_TILDE,
  suffered from a one-byte overflow during ~ operator processing (either
  on the stack or the heap, depending on the length of the user name).
  Reported by Tim Rühsen.

  CVE-2017-15671: The glob function, when invoked with GLOB_TILDE,
  would sometimes fail to free memory allocated during ~ operator
  processing, leading to a memory leak and, potentially, to a denial
  of service.

  CVE-2017-15804: The glob function, when invoked with GLOB_TILDE and
  without GLOB_NOESCAPE, could write past the end of a buffer while
  unescaping user names.  Reported by Tim Rühsen.

  CVE-2017-17426: The malloc function, when called with an object size near
  the value SIZE_MAX, would return a pointer to a buffer which is too small,
  instead of NULL.  This was a regression introduced with the new malloc
  thread cache in glibc 2.26.  Reported by Iain Buclaw.

  CVE-2017-1000408: Incorrect array size computation in _dl_init_paths leads
  to the allocation of too much memory.  (This is not a security bug per se,
  it is mentioned here only because of the CVE assignment.)  Reported by
  Qualys.

  CVE-2017-1000409: Buffer overflow in _dl_init_paths due to miscomputation
  of the number of search path components.  (This is not a security
  vulnerability per se because no trust boundary is crossed if the fix for
  CVE-2017-1000366 has been applied, but it is mentioned here only because
  of the CVE assignment.)  Reported by Qualys.

  CVE-2017-16997: Incorrect handling of RPATH or RUNPATH containing $ORIGIN
  for AT_SECURE or SUID binaries could be used to load libraries from the
  current directory.

  CVE-2018-1000001: Buffer underflow in realpath function when getcwd function
  succeeds without returning an absolute path due to unexpected behaviour
  of the Linux kernel getcwd syscall.  Reported by halfdog.

  CVE-2018-6485: The posix_memalign and memalign functions, when called with
  an object size near the value of SIZE_MAX, would return a pointer to a
  buffer which is too small, instead of NULL.  Reported by Jakub Wilk.

  CVE-2018-6551: The malloc function, when called with an object size near
  the value of SIZE_MAX, would return a pointer to a buffer which is too
  small, instead of NULL.

The following bugs are resolved with this release:

  [866] glob: glob should match dangling symlinks
  [1062] glob: sysdeps/generic/glob.c merge from gnulib (part 3 of 3)
  [2522] localedata: ca_ES@valencia: new Valencian (meridional Catalan)
    locale
  [5997] math: Very slow execution of sinf function
  [10580] localedata: hr_HR: updated locale
  [10871] locale: 'mon' array should contain both nominative and genitive
    cases
  [12349] localedata: eu_ES: incorrect thousands separator
  [13605] localedata: shn_MM: new Shan locale
  [13805] localedata: ru_RU: currency should use ',' as radix point
  [13953] localedata: km_KH: locale update
  [13994] localedata: mjw_IN: new locale
  [14121] build: make writes .mo files in po directory
  [14333] libc: Fix the race between atexit() and exit()
  [14681] dynamic-link: _dl_get_origin leaks memory via executable link map.
  [14925] localedata: bn_*: LC_IDENTIFICATION.language key should be
    "Bangla"
  [15260] localedata: LC_MESSAGES.{yes,no}{str,expr}: various errors
  [15261] localedata: LC_MESSAGES.yesexpr/noexpr: inconsistent use of full-
    width Latin characters
  [15332] localedata: es_CU: locale update
  [15436] stdio: Don't close or flush stdio streams on abort
  [15537] localedata: lv_LV: invalid collation for Latvian diacritical
    letters
  [16148] localedata: ca_ES: incorrect thousands separator
  [16750] dynamic-link: ldd should not try to execute the binaries
    (CVE-2009-5064)
  [16777] localedata: pl_PL: incorrect thousands separator in locale
  [16905] localedata: hanzi: new collation
  [17563] localedata: cmn_TW: add hanzi collation
  [17750] localedata: wrong collation order of diacritics in most locales
  [17804] libc: scandirat fails with ENOMEM because it checks for errno even
    if malloc succeeded
  [17956] build: Build fails on missing definitions from header file
    nss/nss.h when Mozilla NSS is used for cryptography
  [18203] libc: realpath() does not handle unreachable paths correctly
  [18572] dynamic-link: [arm] Lazy TLSDESC relocation has data race
  [18812] localedata: kab_DZ: new Kabyle Algeria locale
  [18822] libc: Internal functions are called via PLT
  [18858] string: _HAVE_STRING_ARCH_xxx aren't defined for i386 nor x86_64
  [19170] libc: __gmon_start__ defined in hppa in crtn.S
  [19574] libc: glibc should support building static PIE binaries
  [19852] localedata: charmaps/UTF-8: incorrect wcwidth for U+3099 and
    U+309A
  [19971] glob: glob: Do not skip entries with zero d_ino values
  [19982] localedata: fr.po: spelling mistake for error code EXDEV
  [20008] localedata: km_KH: convert to translit_neutral
  [20009] localedata: tr_TR: convert LC_CTYPE to i18n
  [20142] math: [x86_64] Add SSE4.1 trunc, truncf
  [20204] dynamic-link: _dl_open_hook and _dlfcn_hook hardening
  [20482] localedata: de_CH: abbreviated weekdays should be two letters
  [20498] localedata: miq_NI: new Mískitu / Miskito (miq) language locale
    for Nicaragua
  [20532] nss: getaddrinfo uses errno and h_errno without guaranteeing
    they're set, wrong errors returned by gaih_inet when lookup functions
    are not found.
  [20756] localedata: [PATCH] Use Unicode wise thousands separator
  [20826] network: posix/tst-getaddrinfo5 fails on hosts without network
    access
  [20952] localedata: yuw_PG: new locale
  [21084] localedata: charmaps/IBM858: new codepage
  [21161] manual: [PATCH] fix typo in manual/arith.texi on strtoul prototype
  [21242] libc: assert gives pedantic warning in old gcc versions
  [21265] dynamic-link: _dl_runtime_resolve isn't compatible with Intel C++
    __regcall calling convention
  [21309] math: signed integer overflow in sysdeps/ieee754/dbl-64/e_pow.c
  [21326] libc: C99 functions are not declared for C++11 and later if
    _GNU_SOURCE is not predefined by g++
  [21457] libc: sys/ucontext.h namespace
  [21530] libc: tmpfile() should be implemented using O_TMPFILE
  [21660] math: GCC fails to compile a formula with tgmath.h
  [21672] nptl: sys-libs/glibc on ia64 crashes on thread exit: signal
    SIGSEGV, Segmentation fault: pthread_create.c:432: __madvise
    (pd->stackblock, freesize - PTHREAD_STACK_MIN, MADV_DONTNEED);
  [21684] math: tgmath.h handling of complex integers
  [21685] math: tgmath.h handling of bit-fields
  [21686] math: tgmath.h handling of __int128
  [21706] localedata: yesstr and nostr  are missing for Breton [LC_MESSAGES]
    locale
  [21745] libc: [powerpc64le] Extra PLT reference with --enable-stack-
    protector=all
  [21750] localedata: column width of characters incompatible with classical
    wcwidth
  [21754] malloc: malloc: Perform as little work as possible after heap
    consistency check failures
  [21780] libc: hppa: p{read,write}v2 does not set ENOSUP on invalid flag
  [21790] libc: Missing __memset_zero_constant_len_parameter in libc.so
  [21791] string: Unused XXX_chk_XXX functions in libc.a
  [21815] dynamic-link: FAIL: elf/tst-prelink-cmp with GCC is defaulted to
    PIE
  [21836] localedata: Removed redundant data (LC_MONETARY) in various Indian
    locales
  [21845] localedata: Added new Locale bho_NP
  [21853] localedata: Fix abday Which looks same as day in zh_SG
  [21854] localedata: Added New Locale en_SC
  [21864] libc: xmalloc.o is compiled with -DMODULE_NAME=libc
  [21871] dynamic-link: _dl_runtime_resolve_avx_opt is slower than
    _dl_runtime_resolve_avx_slow
  [21885] network: getaddrinfo: gethosts does not release resolver context
    on memory allocation failure
  [21899] libc: XPG4.2 sigaction namespace
  [21908] dynamic-link: dynamic linker broke on ia64 (mmap2 consolidation is
    the suspect)
  [21913] libc: static binaries SIGSEGV in __brk when host's gcc is pie-by-
    default (i386)
  [21915] nss: nss_files can return with NSS_STATUS_SUCCESS and a clobbered
    errno value, causing getaddrinfo to fail
  [21920] localedata: Fix p_cs_precedes/n_cs_precedes for mt_MT
  [21922] network: getaddrinfo with AF_INET/AF_INET6 returns EAI_NONAME
    instead of EAI_NODATA
  [21928] libc: sys/ptrace.h: remove obsolete temporary development Linux
    constant PTRACE_SEIZE_DEVEL
  [21930] math: C-only gcc builtins used in <math.h> isinf
  [21932] network: Unpaired __resolv_context_get in generic get*_r
    implementation
  [21941] math: powerpc: Wrong register constraint for xssqrtqp in sqrtf128
  [21944] libc: sigval namespace
  [21951] localedata: Update hanzi collation by stroke
  [21955] math: Wrong alignment of  L(SP_RANGE)/L(SP_INF_0) in
    sysdeps/x86_64/fpu/e_expf.S
  [21956] libc: Stack allocation in MIPS syscall impl (ubounded stack
    allocation in syscall loops)
  [21959] localedata: Fix Country name for xh_ZA
  [21960] localedata: Fix abmon for bem_ZM
  [21966] math: AVX2 mathvec functions use FMA without checking
  [21967] math: When 512-bit AVX2 wrapper functions in mathvec are used?
  [21971] localedata: Added New Locale for mfe_MU
  [21972] libc: assert macro requires operator== (int) for its argument type
  [21973] math: [sparc] libm missing sqrtl compat symbol
  [21974] libc: Remove __bb_init_func and __bb_exit_func
  [21982] string: stratcliff.c: error: assuming signed overflow does not
    occur with -O3
  [21986] stdio: __guess_grouping is called incorrectly
  [21987] math: [sparc32] wrong bits/long-double.h installed
  [22019] localedata: Wrong placement of monetary symbol in el_GR (negative
    amounts)
  [22022] localedata: Missing country_name for mni_IN
  [22023] localedata: Removed redundant data (LC_TIME and LC_MESSAGES) for
    niu_NZ
  [22025] locale: iconv: Inconsistency between pointer mangling and NULL
    checks
  [22026] locale: iconv_open: heap overflow on gconv_init failure
  [22028] math: bits/math-finite.h _MSUF_ expansion namespace
  [22035] math: [m68k] bits/math-inline.h macro namespace
  [22038] localedata: Fix abbreviated weeks and months for Somali
  [22044] localedata: Remove redundant data for Limburgish Language
  [22050] malloc: Linking with -lmcheck does not hook
    __malloc_initialize_hook correctly
  [22051] libc: zero terminator in the middle of glibc's .eh_frame
  [22052] malloc: malloc failed to compile with GCC 7 and -O3
  [22070] localedata: charmaps/UTF-8: wcwidth for
    Prepended_Concatenation_Mark codepoints set to 0 (should be 1)
  [22074] localedata: charmaps/UTF-8: wcwidth for U+1160-U+11FF (Hangul
    Jungseong and Jongseong) should be 0
  [22078] nss: nss_files performance issue in multi mode
  [22082] math: bits/math-finite.h exp10 condition
  [22086] libc: pcprofiledump incorrect cross-endian condition
  [22093] dynamic-link: ld.so no longer searches in .../x86_64
  [22095] network: Name server address allocation memory leak in resolv.conf
    parsing after OOM
  [22096] network: __resolv_conf_attach can incorrectly free passed conf
    object
  [22100] localedata: om_KE: LC_TIME: copy redundant data from om_ET
  [22101] dynamic-link: Dynamic loader must ignore "debug" shared objects
    e.g. ET_GNU_DEBUG_*
  [22111] malloc: malloc: per thread cache is not returned when thread exits
  [22112] localedata: Fix LC_TELEPHONE/LC_NAME for az_AZ
  [22134] libc: [linux] implement fexecve with execveat
  [22142] libc: [powerpc] printf oupts a wrong value of DBL_MAX on ppc64 and
    ppc64le
  [22145] libc: ttyname() gives up too early in the face of namespaces
  [22146] math: C++ build issue with float128 on x86_64
  [22153] nptl: nptl: save error code before process termination
  [22156] libc: [hppa,ia64,microblaze] Executable stack default
  [22159] malloc: malloc: MALLOC_CHECK_ broken with --enable-tunables=no
  [22161] nscd: nscd cache prune for netgroups hangs after timeout bump
  [22165] libc: [hppa] Text relocations in libc.so
  [22180] libc: destructor registered via __cxa_atexit is called twice
  [22183] glob: commit 5554304f0ddd ("posix: Allow glob to match dangling
    symlinks") cause "make" segfaults
  [22189] math: [powerpc] math_private.h definitions of math_opt_barrier and
    math_force_eval
  [22207] libc: FAIL: stdlib/test-atexit-race
  [22225] math: nearbyint arithmetic moved before feholdexcept
  [22229] math: [sparc32] missing copysignl, fabsl, fmal compat symbols
  [22235] math: iscanonical in C++ and float128
  [22243] math: log2(0) and log10(0) are wrong in downward rounding without
    the svid compat wrapper
  [22244] math: ynf and yn are wrong without the svid compat wrapper
  [22273] libc: Improper assert in Linux posix_spawn implementation
  [22284] libc: -pg -pie doesn't work
  [22292] locale: localedef exits with error 4 when it should be error 1
  [22294] locale: Allow "" for int_currency_symbol definition in locales.
  [22295] locale: Don't warn on non-symbolic characters in locale sources in
    --verbose.
  [22296] math: glibc 2.26: signbit build issue with Gcc 5.5.0 on x86_64
  [22298] nptl: x32: lockups on recursive pthread_mutex_lock after upgrade
    to 2.26
  [22299] dynamic-link: Problem with $PLATFORM on x86_64 platform
  [22320] glob: Buffer overflow in glob with GLOB_TILDE (CVE-2017-15670)
  [22321] libc: sysconf(_SC_IOV_MAX) returns -1 on Linux
  [22322] libc: [mips64] wrong bits/long-double.h installed
  [22325] glob: Memory leak in glob with GLOB_TILDE (CVE-2017-15671)
  [22332] glob: Buffer overflow in glob with GLOB_TILDE in unescaping
    (CVE-2017-15804)
  [22336] localedata: cs_CZ LC_COLLATE does not use i18n
  [22343] malloc: Integer overflow in posix_memalign
  [22347] libc: getrandom() returns the number of bytes that were copied  to
    the buffer even though the comments say "Return 0 on success and -1 on
    failure."
  [22353] string: sysdeps/i386/i586/strcpy.S isn't maintainable
  [22362] libc: Installed crt1.o, crti,.o and crtn.o files are used with
    -m32
  [22370] dynamic-link: Incorrect note padding check
  [22375] libc: malloc returns pointer from tcache_get when should return
    NULL (CVE-2017-17426)
  [22377] math: iseqsig, float128 and C++
  [22382] localedata: Error in tpi_PG locale
  [22387] localedata: Replace unicode sequences <Uxxxx> for characters
    inside the ASCII printable range
  [22402] math: [powerpc64le] __MATH_TG does not support _Float128 for
    -mlong-double-64
  [22403] localedata: Slash needs escaping in some locales
  [22408] malloc: malloc_info access heaps without arena lock, ignores heaps
  [22409] network: res_hnok does not accept some host names used on the
    Internet
  [22412] network: res_dnok, res_hnok should perform syntax checks
  [22413] network: ns_name_pton ignores syntactically invalid trailing
    backslash
  [22415] stdio: setvbuf can lead to invalid free/segfault
  [22432] build: Non-deterministic build
  [22439] malloc: malloc_info should compute summary statistics for all sub-
    heaps in an arena
  [22442] network: if_nametoindex could report index for the wrong
    networking interface
  [22446] build: aliasing violation calling readlink in handle_request
  [22447] build: unsafe call to strlen with a non-string in getlogin_r.c
  [22457] libc: Generic preadv/pwritev incorrectly calls __posix_memalign
  [22459] libc: FAIL: elf/check-localplt with __stack_chk_fail related to
    __nscd_hash/__nss_hash
  [22463] network: p_secstodate overflow handling
  [22469] localedata: pl_PL LC_COLLATE does not use i18n
  [22478] libc: sigwait can fail with EINTR
  [22505] libc: ldconfig processes include directive in locale-specific
    order
  [22515] localedata: hsb_DE LC_COLLATE does not use copy "iso14651_t1"
  [22517] localedata: et_EE LC_COLLATE does not use copy "iso14651_t1"
  [22519] localedata: is_IS LC_COLLATE does not use copy "iso14651_t1"
  [22524] localedata: lt_LT  LC_COLLATE does not use copy "iso14651_t1"
  [22527] localedata: tr_TR  LC_COLLATE does not use copy "iso14651_t1"
  [22534] localedata: Collation rules for Serbian and Bosnian should be the
    same as for Croatian
  [22561] math: [DR#471] cacosh (0 + iNaN) should return NaN +/- i pi/2
  [22568] math: [DR#471] ctanh (0 + iNaN), ctanh (0 + i Inf)
  [22577] libc: missing newline after "cannot allocate TLS data structures
    for initial thread"
  [22588] manual: manual/conf.texi: missing underscore in front of
    SC_SSIZE_MAX
  [22593] math: nextafter and nexttoward are declared with const attribute
  [22596] manual: manual: finite(nan) wrongly described as returning nonzero
  [22603] string: ia64 memchr overflows internal pointer check
  [22605] libc: SH clone does not set the exit code correctly
  [22606] dynamic-link: Incorrect array size computation in _dl_init_paths
    (CVE-2017-1000408)
  [22607] dynamic-link: Buffer Overflow in _dl_init_paths (CVE-2017-1000409)
  [22611] malloc: malloc/tst-realloc wrongly assumes that errno must not be
    modified in case of success
  [22614] build: gcc: error: unrecognized command line option ‘-no-pie’
  [22615] manual: manual: ambiguous wording about errno value in case of
    success
  [22624] libc: MIPS setjmp() saves incorrect 'o0' register in --enable-
    stack-protector=all
  [22625] dynamic-link: RPATH $ORIGIN replaced by PWD for AT_SECURE/SUID
    binaries or if /proc is not mounted (CVE-2017-16997)
  [22627] dynamic-link: $ORIGIN in $LD_LIBRARY_PATH is substituted twice
  [22630] build: $(no-pie-ldflag) is no longer effective
  [22631] math: [m68k] Bad const attributes in bits/mathinline.h
  [22635] nptl: pthread_self returns NULL before libpthread is loaded
  [22636] nptl: PTHREAD_STACK_MIN is too small on x86-64
  [22637] nptl: guard size is subtracted from thread stack size instead of
    adding it on top
  [22648] libc: getrlimit/setrlimit with RLIM_INFINITY broken on alpha
  [22657] localedata: hu_HU: Avoid double space in date
  [22660] math: fmax, fmin sNaN handling on alpha
  [22664] libc: New warning of GCC8
  [22665] math: alpha: ceil and floor raise inexact exceptions
  [22666] math: alpha: trunc raise inexact exceptions
  [22667] libc: makecontext lacks stack alignment on i386
  [22678] libc: prlimit fails for RLIM_INFINITY values on 32-bit machines
  [22679] libc: getcwd(3) can succeed without returning an absolute path
    (CVE-2018-1000001)
  [22685] libc: PowerPC: Static AT_SECURE binaries segfault with lock-
    elision and tunables
  [22687] math: [powerpc-nofpu] complex long double functions spurious
    "invalid" exception
  [22688] math: [powerpc-nofpu] remainderl wrong sign of zero result
  [22690] math: [ldbl-128ibm] lrintl, lroundl missing "invalid" exceptions
  [22691] math: [powerpc-nofpu] fmaxmagl, fminmagl spurious "invalid"
    exception
  [22693] math: [ldbl-128ibm] log1pl (-qNaN) spurious "invalid" exception
  [22697] math: [powerpc] llround spurious "inexact" exceptions on 32-bit
    power4
  [22701] nis: Incomplete removal of libnsl
  [22702] math: [powerpc-nofpu] nearbyintl traps with trapping "inexact"
  [22707] libc: Missing defines in elf.h for DF_1_STUB and DF_1_PIE.
  [22715] dynamic-link: FAIL: elf/tst-audit10
  [22719] libc: Backtrace tests fail on hppa
  [22742] libc: [aarch64] mcontext_t __reserved field got renamed
  [22743] nptl: __pthread_register_cancel corrupts stack after f81ddabffd
  [22765] crypt: (struct crypt_data *data)->initialized is not set to zero
    before the first call to crypt_r () in crypt/badsalttest.c


Version 2.26

Major new features:

* A per-thread cache has been added to malloc. Access to the cache requires
  no locks and therefore significantly accelerates the fast path to allocate
  and free small amounts of memory. Refilling an empty cache requires locking
  the underlying arena. Performance measurements show significant gains in a
  wide variety of user workloads. Workloads were captured using a special
  instrumented malloc and analyzed with a malloc simulator. Contributed by
  DJ Delorie with the help of Florian Weimer, and Carlos O'Donell.

* Unicode 10.0.0 Support: Character encoding, character type info, and
  transliteration tables are all updated to Unicode 10.0.0, using
  generator scripts contributed by Mike FABIAN (Red Hat).
  These updates cause user visible changes, especially the changes in
  wcwidth for many emoji characters cause problems when emoji sequences
  are rendered with pango, see for example:
  https://bugzilla.gnome.org/show_bug.cgi?id=780669#c5

* Collation of Hungarian has been overhauled and is now consistent with "The
  Rules of Hungarian Orthography, 12th edition" (Bug 18934).  Contributed by
  Egmont Koblinger.

* Improvements to the DNS stub resolver, contributed by Florian Weimer:

  - The GNU C Library will now detect when /etc/resolv.conf has been
    modified and reload the changed configuration.  The new resolver option
    “no-reload” (RES_NORELOAD) disables this behavior.

  - The GNU C Library now supports an arbitrary number of search domains
    (configured using the “search” directive in /etc/resolv.conf);
    previously, there was a hard limit of six domains.  For backward
    compatibility, applications that directly modify the ‘_res’ global
    object are still limited to six search domains.

  - When the “rotate” (RES_ROTATE) resolver option is active, the GNU C
    Library will now randomly pick a name server from the configuration as a
    starting point.  (Previously, the second name server was always used.)

* The tunables feature is now enabled by default.  This allows users to tweak
  behavior of the GNU C Library using the GLIBC_TUNABLES environment variable.

* New function reallocarray, which resizes an allocated block (like realloc)
  to the product of two sizes, with a guaranteed clean failure upon integer
  overflow in the multiplication.  Originally from OpenBSD, contributed by
  Dennis Wölfing and Rüdiger Sonderfeld.

* New wrappers for the Linux-specific system calls preadv2 and pwritev2.
  These are extended versions of preadv and pwritev, respectively, taking an
  additional flags argument.  The set of supported flags depends on the
  running kernel; full support currently requires kernel 4.7 or later.

* posix_spawnattr_setflags now supports the flag POSIX_SPAWN_SETSID, to
  create a new session ID for the spawned process.  This feature is
  scheduled to be added to the next major revision of POSIX; for the time
  being, it is available under _GNU_SOURCE.

* errno.h is now safe to use from C-preprocessed assembly language on all
  supported operating systems.  In this context, it will only define the
  Exxxx constants, as preprocessor macros expanding to integer literals.

* On ia64, powerpc64le, x86-32, and x86-64, the math library now implements
  128-bit floating point as defined by ISO/IEC/IEEE 60559:2011 (IEEE
  754-2008) and ISO/IEC TS 18661-3:2015.  Contributed by Paul E. Murphy,
  Gabriel F. T. Gomes, Tulio Magno Quites Machado Filho, and Joseph Myers.

  To compile programs that use this feature, the compiler must support
  128-bit floating point with the type name _Float128 (as defined by TS
  18661-3) or __float128 (the nonstandard name used by GCC for C++, and for
  C prior to version 7).  _GNU_SOURCE or __STDC_WANT_IEC_60559_TYPES_EXT__
  must be defined to make the new interfaces visible.

  The new functions and macros correspond to those present for other
  floating-point types (except for a few obsolescent interfaces not
  supported for the new type), with F128 or f128 suffixes; for example,
  strtof128, HUGE_VAL_F128 and cosf128.  Following TS 18661-3, there are no
  printf or scanf formats for the new type; the strfromf128 and strtof128
  interfaces should be used instead.

Deprecated and removed features, and other changes affecting compatibility:

* The synchronization that pthread_spin_unlock performs has been changed to
  now be equivalent to a C11 atomic store with release memory order to the
  spin lock's memory location.  Previously, several (but not all)
  architectures used stronger synchronization (e.g., containing what is
  often called a full barrier).  This change can improve performance, but
  may affect odd fringe uses of spin locks that depend on the previous
  behavior (e.g., using spin locks as atomic variables to try to implement
  Dekker's mutual exclusion algorithm).

* The port to Native Client running on ARMv7-A (--host=arm-nacl) has been
  removed.

* Sun RPC is deprecated.  The rpcgen program, librpcsvc, and Sun RPC headers
  will only be built and installed when the GNU C Library is configured with
  --enable-obsolete-rpc.  This allows alternative RPC implementations, such
  as TIRPC or rpcsvc-proto, to be used.

* The NIS(+) name service modules, libnss_nis, libnss_nisplus, and
  libnss_compat, are deprecated, and will not be built or installed by
  default.

  The NIS(+) support library, libnsl, is also deprecated.  By default, a
  compatibility shared library will be built and installed, but not headers
  or development libraries. Only a few NIS-related programs require this
  library.  (In particular, the GNU C Library has never required programs
  that use 'gethostbyname' to be linked with libnsl.)

  Replacement implementations based on TIRPC, which additionally support
  IPv6, are available from <https://github.com/thkukuk/>.  The configure
  option --enable-obsolete-nsl will cause libnsl's headers, and the NIS(+)
  name service modules, to be built and installed.

* The DNS stub resolver no longer performs EDNS fallback.  If EDNS or DNSSEC
  support is enabled, the configured recursive resolver must support EDNS.
  (Responding to EDNS-enabled queries with responses which are not
  EDNS-enabled is fine, but FORMERR responses are not.)

* res_mkquery and res_nmkquery no longer support the IQUERY opcode.  DNS
  servers have not supported this opcode for a long time.

* The _res_opcodes variable has been removed from libresolv.  It had been
  exported by accident.

* <string.h> no longer includes inline versions of any string functions,
  as this kind of optimization is better done by the compiler.  The macros
  __USE_STRING_INLINES and __NO_STRING_INLINES no longer have any effect.

* The nonstandard header <xlocale.h> has been removed.  Most programs should
  use <locale.h> instead.  If you have a specific need for the definition of
  locale_t with no other declarations, please contact
  libc-alpha@sourceware.org and explain.

* The obsolete header <sys/ultrasound.h> has been removed.

* The obsolete signal constant SIGUNUSED is no longer defined by <signal.h>.

* The obsolete function cfree has been removed.  Applications should use
  free instead.

* The stack_t type no longer has the name struct sigaltstack.  This changes
  the C++ name mangling for interfaces involving this type.

* The ucontext_t type no longer has the name struct ucontext.  This changes
  the C++ name mangling for interfaces involving this type.

* On M68k GNU/Linux and MIPS GNU/Linux, the fpregset_t type no longer has
  the name struct fpregset.  On Nios II GNU/Linux, the mcontext_t type no
  longer has the name struct mcontext.  On SPARC GNU/Linux, the struct
  mc_fq, struct rwindow, struct fpq and struct fq types are no longer
  defined in sys/ucontext.h, the mc_fpu_t type no longer has the name struct
  mc_fpu, the gwindows_t type no longer has the name struct gwindows and the
  fpregset_t type no longer has the name struct fpu.  This changes the C++
  name mangling for interfaces involving those types.

* On S/390 GNU/Linux, the constants defined by <sys/ptrace.h> have been
  synced with the kernel:

    - PTRACE_GETREGS, PTRACE_SETREGS, PTRACE_GETFPREGS and PTRACE_SETFPREGS
      are not supported on this architecture and have been removed.

    - PTRACE_SINGLEBLOCK, PTRACE_SECCOMP_GET_FILTER, PTRACE_PEEKUSR_AREA,
      PTRACE_POKEUSR_AREA, PTRACE_GET_LAST_BREAK, PTRACE_ENABLE_TE,
      PTRACE_DISABLE_TE and PTRACE_TE_ABORT_RAND have been added.

  Programs that assume the GET/SETREGS ptrace requests are universally
  available will now fail to build, instead of malfunctioning at runtime.

Changes to build and runtime requirements:

* Linux kernel 3.2 or later is required at runtime, on all architectures
  supported by that kernel.  (This is a change from version 2.25 only for
  x86-32 and x86-64.)

* GNU Binutils 2.25 or later is now required to build the GNU C Library.

* On most architectures, GCC 4.9 or later is required to build the GNU C
  Library.  On powerpc64le, GCC 6.2 or later is required.

  Older GCC versions and non-GNU compilers are still supported when
  compiling programs that use the GNU C Library.  (We do not know exactly
  how old, and some GNU extensions to C may be _de facto_ required.  If you
  are interested in helping us make this statement less vague, please
  contact libc-alpha@sourceware.org.)

Security related changes:

* The DNS stub resolver limits the advertised UDP buffer size to 1200 bytes,
  to avoid fragmentation-based spoofing attacks (CVE-2017-12132).

* LD_LIBRARY_PATH is now ignored in binaries running in privileged AT_SECURE
  mode to guard against local privilege escalation attacks (CVE-2017-1000366).

* Avoid printing a backtrace from the __stack_chk_fail function since it is
  called on a corrupt stack and a backtrace is unreliable on a corrupt stack
  (CVE-2010-3192).

* A use-after-free vulnerability in clntudp_call in the Sun RPC system has been
  fixed (CVE-2017-12133).

The following bugs are resolved with this release:

  [984] network: Respond to changed resolv.conf in gethostbyname
  [5010] network: sunrpc service cleanup causes unwanted port mapper traffic
  [12068] localedata: sc_IT: misspelled yesexpr/day/abday/mon/abmon/date_fmt
    fields
  [12189] libc: __stack_chk_fail should not attempt a backtrace
    (CVE-2010-3192)
  [14096] time: Race condition on timezone/tst-timezone.out
  [14172] localedata: az_IR: new locale
  [14995] build: glibc fails to build if gold is the default linker, even if
    ld.bfd is available
  [15998] build: [powerpc] Set arch_minimum_kernel for powerpc LE
  [16637] network: inet_pton function is accepting IPv6 with bad format
  [16640] string: string/strtok.c: undefined behaviour inconsistent between
    x86 and other generic code
  [16875] localedata: ko_KR: fix lang_name
  [17225] localedata: ar_SY: localized month names for May and June are
    incorrect
  [17297] localedata: da_DK: wrong date_fmt string
  [18907] stdio: Incorrect order of __wur __THROW in <printf.h>
  [18934] localedata: hu_HU: collate: fix multiple bugs and add tests
  [18988] nptl: pthread wastes memory with mlockall(MCL_FUTURE)
  [19066] localedata: ar_SA abbreviated day and month names are in English
  [19569] network: resolv: Support an arbitrary number of search domains
  [19570] network: Implement random DNS server selection in the stub
    resolver
  [19838] locale: localedef fails on PA-RISC
  [19919] localedata: iso14651_t1_common: Correct the Malayalam sorting
    order of 0D36 and 0D37
  [19922] localedata: iso14651_t1_common: Define collation for Malayalam
    chillu characters
  [20098] libc: FAIL: debug/backtrace-tst on hppa
  [20257] network: sunrpc: clntudp_call does not enforce timeout when
    receiving data
  [20275] localedata: locale day/abday/mon/abmon should not have trailing
    whitespace
  [20313] localedata: Update locale data to Unicode 9.0
  [20424] manual: Document how to provide a malloc replacement
  [20496] localedata: agr_PE: new language locale Awajún / Aguaruna (agr)
    for Peru
  [20686] locale: Add el_GR@euro to SUPPORTED.
  [20831] dynamic-link: _dl_map_segments does not test for __mprotect
    failures consistently
  [21015] dynamic-link: Document and fix --enable-bind-now
  [21016] nptl: pthread_cond support is broken on hppa
  [21029] libc: glibc-2.23 (and later) fails to compile with -fno-omit-
    frame-pointer on i386
  [21049] libc: segfault in longjmp_chk() due to clobbered processor
    register
  [21075] libc: unused assigment to %g4 in sparc/sparc{64,32}/clone.S
  [21088] libc: Build fails with --enable-static-nss
  [21094] math: cosf(1.57079697) has 3 ulp error on targets where the
    generic c code is used
  [21109] libc: Tunables broken on big-endian
  [21112] math: powf has large ulp errors with base close to 1 and exponent
    around 4000
  [21115] network: sunrpc: Use-after-free in error path in clntudp_call
    (CVE-2017-12133)
  [21120] malloc: glibc malloc is incompatible with GCC 7
  [21130] math: Incorrect return from y0l (-inf) and y1l (-inf) when linking
    with -lieee
  [21134] math: Exception (divide by zero) not set for y0/y1 (0.0) and y0/y1
    (-0.0) when linking with -lieee
  [21171] math: log10, log2 and lgamma return incorrect results
  [21179] libc: handle R_SPARC_DISP64 and R_SPARC_REGISTER relocs
  [21182] libc: __memchr_sse2: regression in glibc-2.25 on i686
  [21207] localedata: ce_RU: update weekdays from CLDR
  [21209] dynamic-link: LD_HWCAP_MASK read in setuid binaries
  [21217] localedata: Update months from CLDR-31
  [21232] libc: miss posix_fadvise64 on MIPS64 when static linking
  [21243] libc: support_delete_temp_file should issue warning for failed
    remove()
  [21244] libc: support resolv_test_start() socket fd close should be
    checked for errors.
  [21253] libc: localedef randomly segfaults when using -fstack-check due to
    new posix_spawn implementation
  [21258] dynamic-link: Branch predication in _dl_runtime_resolve_avx512_opt
    leads to lower CPU frequency
  [21259] libc: [alpha] termios.h missing IXANY for POSIX
  [21261] libc: [sparc64] bits/setjmp.h namespace
  [21267] network: [mips] bits/socket.h IOC* namespace
  [21268] libc: [alpha] termios.h NL2, NL3 namespace
  [21270] libc: mmap64 silently truncates large offset values
  [21275] libc: posix_spawn always crashes on ia64 now
  [21277] libc: [alpha] termios.h missing IUCLC for UNIX98 and older
  [21280] math: [powerpc] logbl for POWER7 return incorrect results
  [21289] libc: Incorrect declaration for 32-bit platforms with
    _FILE_OFFSET_BITS=64 causes build error
  [21295] network: GETAI(AF_UNSPEC) drops IPv6 addresses if nss module does
    not support gethostbyname4_r
  [21298] nptl: rwlock can deadlock on frequent reader/writer phase
    switching
  [21338] malloc: mallopt M_ARENA_MAX doesn't set the maximum number of
    arenas
  [21340] libc: Support POSIX_SPAWN_SETSID
  [21357] libc: unwind-dw2-fde deadlock when using AddressSanitizer
  [21359] network: ns_name_pack needs additional byte in destination buffer
  [21361] network: resolv: Reduce advertised EDNS0 buffer size to guard
    against fragmentation attacks (CVE-2017-12132)
  [21369] network: resolv: Remove EDNS fallback
  [21371] libc: Missing timespec definition when compiled with _XOPEN_SOURCE
    and _POSIX_C_SOURCE
  [21386] nptl: Assertion in fork for distinct parent PID is incorrect
  [21391] dynamic-link: x86: Set dl_platform and dl_hwcap from CPU features
  [21393] stdio: Missing dup3 error check in freopen, freopen64
  [21396] libc: Use AVX2 memcpy/memset on Skylake server
  [21399] localedata: Bad description for U00EC in
    localedata/charmaps/CP1254
  [21411] malloc: realloc documentation error
  [21426] network: sys/socket.h uio.h namespace
  [21428] libc: [aarch64] tst-backtrace5 testsuite failure
  [21445] libc: signal.h bsd_signal namespace
  [21455] network: Network headers stdint.h namespace
  [21474] network: resolv: res_init does not use RES_DFLRETRY (2) but 4 for
    retry value
  [21475] network: resolv: Overlong search path is truncated mid-label
  [21511] libc: sigstack namespace
  [21512] libc: clone() ends up calling exit_group() through _exit() wrapper
  [21514] libc: sysdeps/unix/sysv/linux/sys/syscall.h:31:27: fatal error:
    bits/syscall.h: No  such file or directory
  [21517] libc: struct sigaltstack namespace
  [21528] dynamic-link: Duplicated minimal strtoul implementations in ld.so
  [21533] localedata: Update locale data to Unicode 10.0
  [21537] libc:
    ../sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S:44: Error:
    junk at end of line, first unrecognized character is `@'
  [21538] libc: SIG_HOLD missing for XPG4
  [21539] libc: S390: Mismatch between kernel and glibc ptrace.h with
    request 12: PTRACE_SINGLEBLOCK vs PTRACE_GETREGS.
  [21542] libc: Use conservative default for sysconf (_SC_NPROCESSORS_ONLN)
  [21543] libc: sigevent namespace
  [21548] libc: [mips] get/set/make/swap context for MIPS O32 assume wrong
    size for general purpose registers in mcontext_t structure
  [21550] libc: sigwait namespace
  [21552] libc: XPG4 bsd_signal namespace
  [21554] libc: sigpause namespace
  [21560] libc: sys/wait.h signal.h namespace
  [21561] libc: waitid namespace
  [21573] nptl: GCC 7: /usr/bin/install: cannot remove
    '/usr/include/stdlib.h': Permission denied
  [21575] libc: sys/wait.h missing struct rusage definition
  [21584] libc: sigaltstack etc namespace
  [21597] libc: siginterrupt namespace
  [21607] math: hppa: FAIL: math/test-tgmath
  [21609] dynamic-link: Incomplete workaround for GCC __tls_get_addr ABI
    issue on x86-64
  [21622] libc: [tile] missing SA_* for POSIX.1:2008
  [21624] dynamic-link: ld.so: Unsafe alloca allows local attackers to alias
    stack and heap (CVE-2017-1000366)
  [21625] libc: wait3 namespace
  [21654] nss: Incorrect pointer alignment in NSS group merge result
    construction
  [21657] network: Parse interface zone id for node-local multicast
  [21662] string: memcmp-avx2-movbe.S lacks saturating subtraction for
    between_2_3
  [21666] libc: .symver is used on common symbol
  [21668] network: resolv: res_init cross-thread broadcast introduces race
    conditions
  [21687] math: tgmath.h totalorder, totalordermag return type
  [21694] locale: Current Glibc Locale Does Not Support Tok-Pisin and Fiji
    Hindi Locale
  [21696] libc: Incorrect assumption of of __cpu_mask in
    posix/sched_cpucount.c
  [21697] libc: sysdeps/posix/spawni.c: 2 * suspicious condition ?
  [21706] localedata: yesstr and nostr  are missing for Breton [LC_MESSAGES]
    locale
  [21707] math: ppc64le: Invalid IFUNC resolver from libgcc calls getauxval,
    leading to relocation crash
  [21709] libc: resolv_conf.c:552: update_from_conf: Assertion
    `resolv_conf_matches (resp, conf)' failed.
  [21710] localedata: Added Samoan language locale for Samoa
  [21711] localedata: Pashto yesstr/nostr locale are missing
  [21715] nptl: sysdeps/nptl/bits/pthreadtypes.h: typedef guard
    __have_pthread_attr_t can cause redefinition of typedef ‘pthread_attr_t’
  [21721] localedata: Incorrect Full Weekday names for ks_IN@devanagari
  [21723] localedata: yesstr/nostr missing for Chinese language locale
  [21724] localedata: yesstr and nostr  are missing for  Xhosa [LC_MESSAGES]
    locale
  [21727] localedata: yesstr and nostr  are missing for Tsonga [LC_MESSAGES]
    locale
  [21728] localedata: New Locale for Tongan language
  [21729] localedata: incorrect LC_NAME fields for hi_IN
  [21733] localedata: yesstr and nostr  are missing for zh_HK
  [21734] localedata: Missing yesstr and nostr  are for kw_GB
  [21738] libc: misc/tst-preadvwritev2 and misc/tst-preadvwritev64v2 fail
  [21741] libc: Undefined __memmove_chk_XXX and __memset_chk_XXX in libc.a
  [21742] libc: _dl_num_cache_relocations is undefined in libc.a
  [21743] localedata: ks_IN@devanagari: abday strings mismatch the day
    strings
  [21744] libc: Tests failing on --enable-tunables --enable-stack-
    protector=all
  [21749] localedata: Wrong abbreviated day name (“abday”) for
    ar_JO/ar_LB/ar_SY
  [21756] localedata: missing yesstr, nostr  for nds_DE and nds_NL
  [21757] localedata: missing yesstr, nostr  for pap_AW and pap_CW
  [21759] localedata: missing yesstr and nostr for Tigrinya
  [21760] localedata: Fix LC_MESSAGES and LC_ADDRESS for anp_IN
  [21766] localedata: Wrong LC_MESSAGES for om_ET Locale
  [21767] localedata: Missing Bislama locales
  [21768] localedata: Missing yesstr and nostr for aa_ET
  [21770] localedata: Missing  Field in li_NL
  [21778] nptl: Robust mutex may deadlock
  [21779] libc: MicroBlaze segfaults when loading libpthread
  [21783] localedata: Fix int_select international_call_prefixes
  [21784] localedata: Inconsistency  in country_isbn
  [21788] localedata: Missing  Country Postal Abbreviations
  [21794] localedata: Added-country_isbn-for-Italy
  [21795] localedata: Add/Fix country_isbn for France
  [21796] localedata: Added country_isbn for Republic of Korea
  [21797] localedata: Fix inconsistency in country_isbn and missing prefixes
  [21799] localedata: Added int_select international_call_prefixes
  [21801] localedata: Added int_select international_call_prefixes
  [21804] nptl: Double semicolon in thread-shared-types.h
  [21807] localedata: LC_ADDRESS fix for pap_CW
  [21808] localedata: Fix LC_ADDRESS for pap_AW
  [21821] localedata: Added country_name in mai_IN
  [21822] localedata: Fix LC_TIME for mai_IN
  [21823] localedata: missing yesstr, nostr  for sa_IN
  [21825] localedata: Fix name_mrs for mag_IN
  [21828] localedata: 2.26 changelog should mention user visible changes
    with unicode 9.0
  [21835] localedata: Added Maithili language locale for Nepal
  [21838] localedata: Removed redundant data for the_NP
  [21839] localedata: Fix LC_MONETARY for ta_LK
  [21844] localedata: Fix Latin characters and Months Sequence.
  [21848] localedata: Fix mai_NP Title Name


Version 2.25

* The feature test macro __STDC_WANT_LIB_EXT2__, from ISO/IEC TR
  24731-2:2010, is supported to enable declarations of functions from that
  TR.  Note that not all functions from that TR are supported by the GNU C
  Library.

* The feature test macro __STDC_WANT_IEC_60559_BFP_EXT__, from ISO/IEC TS
  18661-1:2014, is supported to enable declarations of functions and macros
  from that TS.  Note that not all features from that TS are supported by
  the GNU C Library.

* The feature test macro __STDC_WANT_IEC_60559_FUNCS_EXT__, from ISO/IEC TS
  18661-4:2015, is supported to enable declarations of functions and macros
  from that TS.  Note that most features from that TS are not supported by
  the GNU C Library.

* The nonstandard feature selection macros _REENTRANT and _THREAD_SAFE are
  now treated as compatibility synonyms for _POSIX_C_SOURCE=199506L.
  Since the GNU C Library defaults to a much newer revision of POSIX, this
  will only affect programs that specifically request an old conformance
  mode.  For instance, a program compiled with -std=c89 -D_REENTRANT will
  see a change in the visible declarations, but a program compiled with
  just -D_REENTRANT, or -std=c99 -D_POSIX_C_SOURCE=200809L -D_REENTRANT,
  will not.

  Some C libraries once required _REENTRANT and/or _THREAD_SAFE to be
  defined by all multithreaded code, but glibc has not required this for
  many years.

* The inclusion of <sys/sysmacros.h> by <sys/types.h> is deprecated.  This
  means that in a future release, the macros “major”, “minor”, and “makedev”
  will only be available from <sys/sysmacros.h>.

  These macros are not part of POSIX nor XSI, and their names frequently
  collide with user code; see for instance glibc bug 19239 and Red Hat bug
  130601.  <stdlib.h> includes <sys/types.h> under _GNU_SOURCE, and C++ code
  presently cannot avoid being compiled under _GNU_SOURCE, exacerbating the
  problem.

* New <fenv.h> features from TS 18661-1:2014 are added to libm: the
  fesetexcept, fetestexceptflag, fegetmode and fesetmode functions, the
  femode_t type and the FE_DFL_MODE and FE_SNANS_ALWAYS_SIGNAL macros.

* Integer width macros from TS 18661-1:2014 are added to <limits.h>:
  CHAR_WIDTH, SCHAR_WIDTH, UCHAR_WIDTH, SHRT_WIDTH, USHRT_WIDTH, INT_WIDTH,
  UINT_WIDTH, LONG_WIDTH, ULONG_WIDTH, LLONG_WIDTH, ULLONG_WIDTH; and to
  <stdint.h>: INT8_WIDTH, UINT8_WIDTH, INT16_WIDTH, UINT16_WIDTH,
  INT32_WIDTH, UINT32_WIDTH, INT64_WIDTH, UINT64_WIDTH, INT_LEAST8_WIDTH,
  UINT_LEAST8_WIDTH, INT_LEAST16_WIDTH, UINT_LEAST16_WIDTH,
  INT_LEAST32_WIDTH, UINT_LEAST32_WIDTH, INT_LEAST64_WIDTH,
  UINT_LEAST64_WIDTH, INT_FAST8_WIDTH, UINT_FAST8_WIDTH, INT_FAST16_WIDTH,
  UINT_FAST16_WIDTH, INT_FAST32_WIDTH, UINT_FAST32_WIDTH, INT_FAST64_WIDTH,
  UINT_FAST64_WIDTH, INTPTR_WIDTH, UINTPTR_WIDTH, INTMAX_WIDTH,
  UINTMAX_WIDTH, PTRDIFF_WIDTH, SIG_ATOMIC_WIDTH, SIZE_WIDTH, WCHAR_WIDTH,
  WINT_WIDTH.

* New <math.h> features are added from TS 18661-1:2014:

  - Signaling NaN macros: SNANF, SNAN, SNANL.

  - Nearest integer functions: roundeven, roundevenf, roundevenl, fromfp,
    fromfpf, fromfpl, ufromfp, ufromfpf, ufromfpl, fromfpx, fromfpxf,
    fromfpxl, ufromfpx, ufromfpxf, ufromfpxl.

  - llogb functions: the llogb, llogbf and llogbl functions, and the
    FP_LLOGB0 and FP_LLOGBNAN macros.

  - Max-min magnitude functions: fmaxmag, fmaxmagf, fmaxmagl, fminmag,
    fminmagf, fminmagl.

  - Comparison macros: iseqsig.

  - Classification macros: iscanonical, issubnormal, iszero.

  - Total order functions: totalorder, totalorderf, totalorderl,
    totalordermag, totalordermagf, totalordermagl.

  - Canonicalize functions: canonicalize, canonicalizef, canonicalizel.

  - NaN functions: getpayload, getpayloadf, getpayloadl, setpayload,
    setpayloadf, setpayloadl, setpayloadsig, setpayloadsigf, setpayloadsigl.

* The functions strfromd, strfromf, and strfroml, from ISO/IEC TS 18661-1:2014,
  are added to libc.  They convert a floating-point number into string.

* Most of glibc can now be built with the stack smashing protector enabled.
  It is recommended to build glibc with --enable-stack-protector=strong.
  Implemented by Nick Alcock (Oracle).

* The function explicit_bzero, from OpenBSD, has been added to libc.  It is
  intended to be used instead of memset() to erase sensitive data after use;
  the compiler will not optimize out calls to explicit_bzero even if they
  are "unnecessary" (in the sense that no _correct_ program can observe the
  effects of the memory clear).

* On ColdFire, MicroBlaze, Nios II and SH3, the float_t type is now defined
  to float instead of double.  This does not affect the ABI of any libraries
  that are part of the GNU C Library, but may affect the ABI of other
  libraries that use this type in their interfaces.

* On x86_64, when compiling with -mfpmath=387 or -mfpmath=sse+387, the
  float_t and double_t types are now defined to long double instead of float
  and double.  These options are not the default, and this does not affect
  the ABI of any libraries that are part of the GNU C Library, but it may
  affect the ABI of other libraries that use this type in their interfaces,
  if they are compiled or used with those options.

* The getentropy and getrandom functions, and the <sys/random.h> header file
  have been added.

* The buffer size for byte-oriented stdio streams is now limited to 8192
  bytes by default.  Previously, on Linux, the default buffer size on most
  file systems was 4096 bytes (and thus remains unchanged), except on
  network file systems, where the buffer size was unpredictable and could be
  as large as several megabytes.

* The <sys/quota.h> header now includes the <linux/quota.h> header.  Support
  for the Linux quota interface which predates kernel version 2.4.22 has
  been removed.

* The malloc_get_state and malloc_set_state functions have been removed.
  Already-existing binaries that dynamically link to these functions will
  get a hidden implementation in which malloc_get_state is a stub.  As far
  as we know, these functions are used only by GNU Emacs and this change
  will not adversely affect already-built Emacs executables.  Any undumped
  Emacs executables, which normally exist only during an Emacs build, should
  be rebuilt by re-running “./configure; make” in the Emacs build tree.

* The “ip6-dotint” and “no-ip6-dotint” resolver options, and the
  corresponding RES_NOIP6DOTINT flag from <resolv.h> have been removed.
  “no-ip6-dotint” had already been the default, and support for the
  “ip6-dotint” option was removed from the Internet in 2006.

* The "ip6-bytestring" resolver option and the corresponding RES_USEBSTRING
  flag from <resolv.h> have been removed.  The option relied on a
  backwards-incompatible DNS extension which was never deployed on the
  Internet.

* The flags RES_AAONLY, RES_PRIMARY, RES_NOCHECKNAME, RES_KEEPTSIG,
  RES_BLAST defined in the <resolv.h> header file have been deprecated.
  They were already unimplemented.

* The "inet6" option in /etc/resolv.conf and the RES_USE_INET6 flag for
  _res.flags are deprecated.  The flag was standardized in RFC 2133, but
  removed again from the IETF name lookup interface specification in RFC
  2553.  Applications should use getaddrinfo instead.

* DNSSEC-related declarations and definitions have been removed from the
  <arpa/nameser.h> header file, and libresolv will no longer attempt to
  decode the data part of DNSSEC record types.  Previous versions of glibc
  only implemented minimal support for the previous version of DNSSEC, which
  is incompatible with the currently deployed version.

* The resource record type classification macros ns_t_qt_p, ns_t_mrr_p,
  ns_t_rr_p, ns_t_udp_p, ns_t_xfr_p have been removed from the
  <arpa/nameser.h> header file because the distinction between RR types and
  meta-RR types is not officially standardized, subject to revision, and
  thus not suitable for encoding in a macro.

* The types res_sendhookact, res_send_qhook, re_send_rhook, and the qhook
  and rhook members of the res_state type in <resolv.h> have been removed.
  The glibc stub resolver did not support these hooks, but the header file
  did not reflect that.

* For multi-arch support it is recommended to use a GCC which has
  been built with support for GNU indirect functions.  This ensures
  that correct debugging information is generated for functions
  selected by IFUNC resolvers.  This support can either be enabled by
  configuring GCC with '--enable-gnu-indirect-function', or by
  enabling it by default by setting 'default_gnu_indirect_function'
  variable for a particular architecture in the GCC source file
  'gcc/config.gcc'.

* GDB pretty printers have been added for mutex and condition variable
  structures in POSIX Threads. When installed and loaded in gdb these pretty
  printers show various pthread variables in human-readable form when read
  using the 'print' or 'display' commands in gdb.

* Tunables feature added to allow tweaking of the runtime for an application
  program.  This feature can be enabled with the '--enable-tunables' configure
  flag.  The GNU C Library manual has details on usage and README.tunables has
  instructions on adding new tunables to the library.

* A new version of condition variables functions have been implemented in
  the NPTL implementation of POSIX Threads to provide stronger ordering
  guarantees.

* A new version of pthread_rwlock functions have been implemented to use a more
  scalable algorithm primarily through not using a critical section anymore to
  make state changes.

Security related changes:

* On ARM EABI (32-bit), generating a backtrace for execution contexts which
  have been created with makecontext could fail to terminate due to a
  missing .cantunwind annotation.  This has been observed to lead to a hang
  (denial of service) in some Go applications compiled with gccgo.  Reported
  by Andreas Schwab.  (CVE-2016-6323)

* The DNS stub resolver functions would crash due to a NULL pointer
  dereference when processing a query with a valid DNS question type which
  was used internally in the implementation.  The stub resolver now uses a
  question type which is outside the range of valid question type values.
  (CVE-2015-5180)

The following bugs are resolved with this release:

  [4099] stdio: Overly agressive caching by stream i/o functions.
  [7065] build: Support building glibc with -fstack-protector or -fstack-
    protector-all
  [9842] localedata: en_CA: incorrect date format
  [13165] nptl: pthread_cond_wait() can consume a signal that was sent
    before it started waiting
  [14139] manual: Do not hardcode platform names in manual/libm-err-tab.pl
  [15765] nptl: sem_open is wrongly a cancellation point
  [16421] network: IN6_IS_ADDR_UNSPECIFIED can use undefined s6_addr32
  [16458] libc: endian.h and netinet/in.h byte order macros return values of
    wrong type
  [16628] dynamic-link: Segfault after a binary without pthread dlopen()s a
    library linked with pthread
  [16630] nptl: Use SYSENTER for pthread_cond_broadcast/signal() (i.e. fix
    "FIXME: Ingo" issue)
  [16907] libc: <argp.h> compiled with --std=cXX disables __attribute__
  [17252] libc: getrandom and getentropy syscall
  [17730] malloc: thread-local storage is sometimes improperly free()'d
    after being __libc_memalign()'d
  [18241] stdio: failed fseek on memstream does not set errno and can fail
    when it shouldnt
  [18243] nptl: sem_wait, sem_timedwait are cancellation points shm_open is
    not
  [18463] nptl: pthread_cond_broadcast issue when surrounded by
    PTHREAD_PRIO_INHERIT mutex on ARM
  [18784] network: res_query and related function crash for special record
    type queries (CVE-2015-5180)
  [19380] math: strtod does not raise "inexact"
  [19387] string: Integer overflow in memchr
  [19390] string: Integer overflow in strncat
  [19398] build: linknamespace tests fail with massively parallel build
  [19402] nptl: Deadlock with robust shared mutex and asynchronous
    termination
  [19469] malloc: M_PERTURB in test-skeleton.c invalidates malloc tests
  [19473] malloc: Turn malloc_get_state etc. in compatibility symbols
  [19514] libc: [PATCH] Fix spelling errors in spelling
    "implement"/"implementation" in several places
  [19582] network: Deprecate RES_USE_INET6
  [19673] manual: clog10 docs appear to be erroneous
  [19810] dynamic-link: dlopen with both RTLD_NOLOAD and RTLD_NODELETE
    causes a segmentation fault
  [19826] libc: invalid pointer returned from __tls_get_addr with static
    linking
  [20016] network: resolv: Remove hooks support from the API
  [20019] dynamic-link: NULL pointer dereference in libc.so.6 IFUNC due to
    uninitialized GOT
  [20033] math: [x86_64] vectorized math function don't call the __finite
    versions
  [20116] nptl: use after free in pthread_create
  [20181] stdio: open_memstream(): writes not at end of stream corrupt data
  [20292] dynamic-link: Comparison in elf/dl-open.c _dl_addr_inside_object
    is always true.
  [20311] nptl: please install proc_service.h
  [20366] libc: Compilation errors in installed headers in strict-compliance
    modes
  [20370] malloc: malloc: Arena free list management is still racy
    (incorrect fix in bug 19243)
  [20386] libc: assert (X = 0) does not result in GCC warning
  [20432] malloc: malloc: Minimize interface required for interposition
  [20435] libc: Missing unwind info in __startcontext causes infinite loop
    in _Unwind_Backtrace (CVE-2016-6323)
  [20444] hurd: recvmsg: PF_LOCAL sockets and msg_name lead to SIGLOST
  [20452] nptl: Addition of sysdep.o to libpthread.a breaks relinking
    libpthread.a
  [20455] math: [powerpc] fesetexceptflag fails to clear FE_INVALID
  [20459] localedata: et_EE: locale has wrong {p,n}_cs_precedes value
  [20477] network: resolv: incorrect double-checked locking related to
    _res_hconf
  [20478] libc: libc_ifunc macro and similar usages leads to false debug-
    information.
  [20495] math: x86_64 performance degradation due to AVX/SSE transition
    penalty
  [20497] localedata: lt_LT: LC_TIME d_fmt used is obsolete
  [20508] dynamic-link: _dl_runtime_resolve_avx/_dl_runtime_profile_avx512
    cause transition penalty
  [20517] math: sparcv9 missing fdiml compat symbol
  [20524] manual: strverscmp is inconsistent
  [20525] libc: <sys/quota.h> should be based on kernel headers
  [20539] math: GCC 7 -static -lm fails to link at -O3
  [20554] libc: ld: bss-plt forced due to /usr/lib/libc_nonshared.a(ppc-
    mcount.oS)
  [20558] string: POSIX bcopy/bzero decls do not implement Object Size
    Checking
  [20591] network: Remove obsolete DNSSEC support
  [20592] network: DNS resource record type classification macros in
    <arpa/nameser.h> are incorrect
  [20593] network: Update DNS RR type definitions
  [20611] network: getaddrinfo accepts invalid numeric scope IDs
  [20615] build: glibc build fails when using --with-cpu=power9 --enable-
    multi-arch
  [20629] network: libresolv: Remove support for bitstring labels
    (RES_USEBSTRING)
  [20647] libc: GLIBC quitting every program - glibc on Pentium-S leads to
    assertion: "maxidx >= 2"
  [20660] math: [arm] Use VSQRT
  [20662] libc: checking whether x86_64-pc-linux-gnu-gcc implicitly enables
    -fstack-protector no (32bit gcc 6.2.0 pie and ssp enable)
  [20689] libc: Test for FMA should also check for AVX.
  [20707] glob: gl_pathv entries not set to NULL with GLOB_DOOFFS
  [20715] math: iszero macro breaks existing code
  [20718] math: [powerpc] copysignl raises "invalid" for sNaN
  [20728] libc: powerpc: Missing TOC stub in clone
  [20729] build: glibc-2.24 fails to build for i486 with -Os
  [20750] build: Build fails with default PIE enabled gcc-6.x
  [20768] math: [alpha] sqrt fegetenv namespace
  [20785] libc: binutils 2.28 fails to assemble power6/memset.S file in
    glibc
  [20787] math: float_t is defined as float incorrectly on x86_64 even if
    __FLT_EVAL_METHOD__ is 2
  [20790] network: rpcgen buffer overrun in get_prog_declaration
  [20822] nptl: race condition in __lll_unlock_elision on powerpc
  [20829] libc: crypt snprintf namespace
  [20847] libc: tst-vfork3 failure
  [20855] math: Default bits/mathdef.h has inappropriate float_t
  [20859] math: [sh4] FP_ILOGB0 invalid
  [20864] localedata: iconv: cp936 missing single-byte euro sign (0x80,
    U+20AC), not same as GBK
  [20915] dynamic-link: global-dynamic TLS broken on aarch64
  [20916] math: pow handling of sNaN arguments
  [20918] build: Building with --enable-nss-crypt fails tst-linkall-static.
  [20919] math: Bad pow (qNaN, 0) result with -lieee
  [20940] math: hypot sNaN handling
  [20947] math: fmax, fmin sNaN handling
  [20956] libc: debug/tst-backtrace3-6 don't work with -O3 anymore
  [20964] network: sunrpc: Stack-based buffer overflow in getrpcport with
    RES_USE_INET6
  [20971] string: powerpc64/power7 memchr overflows internal pointer check
  [20973] nptl: robust mutexes: Lost wake-ups
  [20974] locale: bs_BA: yesexpr/noexpr regexes accept any character
  [20978] nis: strlen on null pointer in nss_nisplus
  [20985] nptl: robust mutexes: lowlevelrobustlock assembly on x86 blocks on
    wrong condition
  [21014] string: i686 memchr overflows internal pointer check
  [21019] libc: [mips] n32 lseek incorrect on overflow
  [21022] libc: [microblaze] __backtrace get_frame_size namespace
  [21026] libc: [MIPS] readahead syscall is broken on n64
  [21028] math: Fallback fesetexceptflag should always succeed
  [21045] libc: [powerpc-nofpu] swapcontext does not restore signal mask
  [21047] math: arm: fpu_control.h: _FPU_GETCW/_FPU_SETCW is rejected by
    clang
  [21053] libc: [SH] Namespace pollution from sys/ucontext.h
  [21061] librt: [microblaze] librt lost clock_* exports
  [21073] libc: tunables: insecure environment variables passed to
    subprocesses with AT_SECURE
  [21081] string: Missing vzeroupper in memset-vec-unaligned-erms.S

Version 2.24

* The minimum Linux kernel version that this version of the GNU C Library
  can be used with is 3.2, except on i[4567]86 and x86_64, where Linux
  kernel version 2.6.32 or later suffices (on architectures that already
  required kernel versions more recent than 3.2, those requirements remain
  unchanged).  Linux 3.2 or later kernel headers are required on all
  architectures.

* The pap_AN locale has been deleted.  This has been deprecated for a long
  time.  It has been replaced by pap_AW & pap_CW, both of which have long
  been included in previous releases.

* The readdir_r and readdir64_r functions have been deprecated.  It is
  recommended to use readdir and readdir64 instead.

* The type “union wait” has been removed.  It was deprecated in the early
  1990s and never part of POSIX.  Application code should use the int type
  instead of “union wait”.

* A new NSS action is added to facilitate large distributed system
  administration.  The action, MERGE, allows remote user stores like LDAP
  to be merged into local user stores like /etc/groups in order to provide
  easy to use, updated, and managed sets of merged credentials.  The new
  action can be used by configuring it in /etc/nsswitch.conf:
  group: files [SUCCESS=merge] nis
  Implemented by Stephen Gallagher (Red Hat).

* The deprecated __malloc_initialize_hook variable has been removed from the
  API.

* The long unused localedef --old-style option has been removed.  It hasn't
  done anything in over 16 years.  Scripts using this option can safely
  drop it.

* nextupl, nextup, nextupf, nextdownl, nextdown and nextdownf are added to
  libm.  They are defined by TS 18661 and IEEE754-2008.  The nextup functions
  return the next representable value in the direction of positive infinity
  and the nextdown functions return the next representable value in the
  direction of negative infinity.  These are currently enabled as GNU
  extensions.

Security related changes:

* An unnecessary stack copy in _nss_dns_getnetbyname_r was removed.  It
  could result in a stack overflow when getnetbyname was called with an
  overly long name.  (CVE-2016-3075)

* Previously, getaddrinfo copied large amounts of address data to the stack,
  even after the fix for CVE-2013-4458 has been applied, potentially
  resulting in a stack overflow.  getaddrinfo now uses a heap allocation
  instead.  Reported by Michael Petlan.  (CVE-2016-3706)

* The glob function suffered from a stack-based buffer overflow when it was
  called with the GLOB_ALTDIRFUNC flag and encountered a long file name.
  Reported by Alexander Cherepanov.  (CVE-2016-1234)

* The Sun RPC UDP client could exhaust all available stack space when
  flooded with crafted ICMP and UDP messages.  Reported by Aldy Hernandez'
  alloca plugin for GCC.  (CVE-2016-4429)

* The IPv6 name server management code in libresolv could result in a memory
  leak for each thread which is created, performs a failing naming lookup,
  and exits.  Over time, this could result in a denial of service due to
  memory exhaustion.  Reported by Matthias Schiffer.  (CVE-2016-5417)

The following bugs are resolved with this release:

  [1170] localedata: ne_NP: update Nepali locale definition file
  [3629] manual: stpcpy description in string.texi refers to MS-DOG instead
    of MS-DOS.
  [6527] malloc: [powerpc] Malloc alignment insufficient for PowerPC
  [6796] math: fdim() does not set errno on overflow
  [10354] libc: posix_spawn should use vfork() in more cases than presently
  [11213] localedata: localedata: add copyright disclaimer to locale files
  [12143] localedata: chr_US: new Cherokee locale
  [12450] localedata: sgs_LT: new locale
  [12676] localedata: ln_CD: new locale
  [13237] localedata: LC_ADDRESS.country_name: update all locales w/latest
    CLDR data
  [13304] math: fma, fmaf, fmal produce wrong results
  [14259] build: --localedir arg to configure is ignored
  [14499] nptl: Does posix_spawn invoke atfork handlers / use vfork?
  [14750] libc: Race condition in posix_spawn vfork usage vs signal handlers
  [14934] localedata: es_CL: wrong first weekday chilean locale
  [15262] localedata: LC_MESSAGES.yesexpr/noexpr: inconsistent use of
    romanisation
  [15263] localedata: LC_MESSAGES.yesexpr/noexpr: inconsistent use of 1/0
    and +/-
  [15264] localedata: LC_MESSAGES.yesstr/nostr: lacking in many locales
  [15368] nptl: raise() is not async-signal-safe
  [15479] math: ceil, floor, round and trunc raise inexact exception
  [15578] localedata: kk_KZ: various updates
  [16003] localedata: pap_AN: punt old locale
  [16137] localedata: iw_IL: punt old locale
  [16190] localedata: eo: new esperanto locale
  [16374] localedata: lv_LV: change currency symbol in LC_MONETARY to euro
  [16742] malloc: race condition: pthread_atfork() called before first
    malloc() results in unexpected locking behaviour/deadlocks
  [16975] localedata: LC_MESSAGES.yesexpr/noexpr: revisit capitalization in
    all locales
  [16983] localedata: postal_fmt does not allow %l and %n modifiers
  [17565] localedata: pt_PT: wrong (work-)week start
  [17899] math: [powerpc] floorl returns negative zero with FE_DOWNWARD
  [17950] build: Build fails with -msse
  [18205] localedata: be_BY*: wrong first_weekday and first_workday
  [18433] libc: posix_spawn does not return correctly upon failure to
    execute
  [18453] localedata: charmaps/IBM875: incorrect codes
  [18712] string: bits/string2.h incompatible with -O2 -Werror=packed
    -Wsystem-headers
  [18896] localedata: he_IL: improvements for currency
  [18911] localedata: ro_RO: Correcting week day name for "Tuesday" in
    Romanian locale data
  [18960] locale: s390: _nl_locale_subfreeres uses larl opcode on misaligned
    symbol
  [19056] libc: Deprecate readdir_r
  [19133] localedata: pt_*: days & months should be lowercase in Portuguese
    language
  [19198] localedata: nl_NL: small improvements for Dutch locales
  [19257] network: Per-thread memory leak in __res_vinit with IPv6
    nameservers (CVE-2016-5417)
  [19269] build: tst-audit4 and tst-audit10 failures with gcc-6 on non avx
    machine
  [19400] locale: Language missing in  "iso-639.def", trivial fix in
    description
  [19431] malloc: Deadlock between fflush, getdelim, and fork
  [19505] libc: Incorrect file descriptor validity checks in
    posix_spawn_file_actions_add{open,close,dup2}
  [19509] dynamic-link: dlsym, dlvsym do not report errors through dlerror
    when using RTLD_NEXT
  [19512] locale: Stale `#ifndef HAVE_BUILTIN_EXPECT' in
    `intl/{gettextP,loadinfo}.h'
  [19534] libc: execle, execlp may use malloc
  [19568] localedata: *_CH: Swiss locales have inconsistent start of week
  [19573] network: res_nclose and __res_maybe_init disagree about name
    server initialization, breaking Hesiod
  [19575] localedata: Status of GB18030 tables
  [19581] localedata: sr_* date_fmt string contains additional newline
  [19583] string: SSSE3_Fast_Copy_Backward flag needs to be enabled for AMD
    Excavator core
  [19592] math: [ldbl-128ibm] ceill incorrect in non-default rounding modes
  [19593] math: [ldbl-128ibm] truncl incorrect in non-default rounding modes
  [19594] math: [ldbl-128ibm] roundl incorrect in non-default rounding modes
  [19595] math: [ldbl-128ibm] fmodl incorrect for results in subnormal
    double range
  [19602] math: [ldbl-128ibm] fmodl handling of equal arguments with low
    part zero incorrect
  [19603] math: [ldbl-128ibm] remainderl, remquol incorrect sign handling in
    equality tests
  [19610] dynamic-link: ldconfig -X removes stale symbolic links
  [19613] libc: s390x (64 bit) macro expansion WCOREDUMP and others
  [19633] locale: strfmon_l applies global locale to number formatting
  [19642] network: Memory leak in getnameinfo
  [19648] libc: test-skeleton.c: Do not set RLIMIT_DATA
  [19653] libc: Potential for NULL pointer dereference (CWE-476) in
    glibc-2.22
  [19654] math: [x86_64] Need testcase for BZ #19590 fix
  [19671] localedata: Missing Sanity Check for malloc() in 'tst-fmon.c' &
    'tst-numeric.c'
  [19674] math: [ldbl-128ibm] powl incorrect overflow handling
  [19677] math: [ldbl-128ibm] remainderl equality test incorrect for zero
    low part
  [19678] math: [ldbl-128ibm] nextafterl, nexttowardl incorrect sign of zero
    result
  [19679] dynamic-link: gcc-4.9.3 C++ exception handling broken due to
    unaligned stack
  [19726] locale: Converting UCS4LE to INTERNAL with iconv() does not update
    pointers and lengths in error-case.
  [19727] locale: Converting from/to UTF-xx with iconv() does not always
    report errors on UTF-16 surrogates values.
  [19755] nscd: nscd assertion failure in gc
  [19758] dynamic-link: Typo in EXTRA_LD_ENVVARS for x86-64
  [19759] libc: mempcpy shouldn't be inlined
  [19762] dynamic-link: HAS_CPU_FEATURE/HAS_ARCH_FEATURE are easy to misuse
  [19765] libc: s390 needs an optimized mempcpy
  [19779] glob: glob: buffer overflow with GLOB_ALTDIRFUNC due to incorrect
    NAME_MAX limit assumption (CVE-2016-1234)
  [19783] build: benchtests don't support --enable-hardcoded-path-in-tests
  [19787] network: Missing and incorrect truncation checks in getnameinfo
  [19790] math: [ldbl-128ibm] nearbyintl incorrect in non-default rounding
    modes
  [19791] network: Assertion failure in res_query.c with un-connectable name
    server addresses
  [19792] libc: MIPS: backtrace yields infinite backtrace with makecontext
  [19822] math: libm.so install clobbers old version
  [19825] network: resolv: send_vc can return uninitialized data in second
    response to getaddrinfo
  [19830] network: nss_dns: should check RDATA length against buffer length
  [19831] network: nss_dns: getaddrinfo returns uninitialized data when
    confronted with A/AAAA records of invalid size
  [19837] nss: nss_db: No retries for some long lines with a larger buffer
  [19848] math: powl(10,n) for n=-4,-5,-6,-7 is off by more than 1 ULP
  [19853] stdio: Printing IBM long double in decimal with high precision is
    sometimes incorrect
  [19860] build: x86_64: compile errors for tst-audit10 and tst-auditmod10b
  [19861] nptl: libpthread IFUNC resolver for fork can lead to crash
  [19862] network: resolv, nss_dns: Remove remaining logging of unexpected
    record types
  [19865] network: Assertion failure or memory leak in
    _nss_dns_getcanonname_r
  [19868] network: nss_dns: netent code does not skip over non-PTR records
  [19879] network: nss_dns: Stack overflow in getnetbyname implementation
    (CVE-2016-3075)
  [19881] string: Improve x86-64 memset
  [19907] string: Incorrect memcpy tests
  [19916] dynamic-link: S390: fprs/vrs are not saved/restored while
    resolving symbols
  [19925] libc: termios.h XCASE namespace
  [19928] string: memmove-vec-unaligned-erms.S is slow with large data size
  [19929] libc: limits.h NL_NMAX namespace
  [19931] stdio: Memory leak in vfprintf
  [19957] libc: clone(CLONE_VM) access invalid parent memory
  [19963] localedata: en_IL: New locale
  [19989] stdio: stdio.h cuserid namespace
  [19994] network: getaddrinfo does not restore RES_USE_INET6 flag in
    gethosts
  [19996] locale: langinfo.h nl_langinfo_l namespace
  [20005] stdio: fflush on a file opened with fmemopen resets position to 0
  [20010] network: getaddrinfo: Stack overflow in hostent translation
    (CVE-2016-3706)
  [20012] stdio: libio: fmemopen append mode failure
  [20014] stdio: stdio.h namespace for pre-threads POSIX
  [20017] network: resolv: Use gmtime_r instead of gmtime in p_secstodate
  [20023] libc: fcntl.h timespec namespace
  [20024] math: [x86_64] vectorized sincos trashes the stack
  [20031] network: nss_hesiod: Heap overflow in get_txt_records
  [20041] time: sys/time.h timespec namespace
  [20043] libc: unistd.h missing cuserid for UNIX98 and before
  [20044] libc: unistd.h missing pthread_atfork for UNIX98
  [20051] libc: ttyslot in wrong header under wrong conditions
  [20054] libc: gethostname not declared for XPG4
  [20055] libc: termios.h missing tcgetsid for XPG4
  [20072] dynamic-link: x86 init_cpu_features is called twice in static
    executable
  [20073] libc: sys/stat.h fchmod namespace
  [20074] libc: stdlib.h rand_r namespace
  [20076] libc: sys/stat.h missing S_IFSOCK, S_ISSOCK for XPG4
  [20094] libc: stdlib.h should not declare grantpt, ptsname, unlockpt for
    XPG3
  [20111] libc: struct sockaddr_storage cannot be aggregate-copied
  [20112] network: sunrpc: stack (frame) overflow in Sun RPC clntudp_call
    (CVE-2016-4429)
  [20115] string: Extra alignment in memset-vec-unaligned-erms.S
  [20119] libc: Wrong mask for processors level type from CPUID
  [20139] dynamic-link: Upper part of zmm is zeroed if Glibc is built with
    AS not supporting AVX512
  [20151] math: [ldbl-128/ldbl-128ibm] j0l, j1l, y0l, y1l return sNaN for
    sNaN argument
  [20153] math: [ldbl-128ibm] sqrtl (sNaN) returns sNaN
  [20156] math: [ldbl-128ibm] ceill, rintl etc. return sNaN for sNaN
    argument
  [20157] math: [powerpc] fabsl (sNaN) wrongly raises "invalid"
  [20160] math: [powerpc] ceil, rint etc. return sNaN for sNaN input
  [20178] libc: posix_spawn{p} should not call exit
  [20191] stdio: libio: vtables hardening
  [20195] string: FMA4 detection requires CPUID execution with register
    eax=0x80000001
  [20198] libc: quick_exit incorrectly destroys C++11 thread objects.
  [20205] math: [i386/x86_64] nextafterl incorrect incrementing negative
    subnormals
  [20212] math: acos (sNaN) returns sNaN
  [20213] math: asin (sNaN) returns sNaN
  [20214] network: Linux header sync with linux/in6.h and ipv6.h again.
  [20218] math: [i386] asinhl (sNaN) returns sNaN
  [20219] math: [i386] atanhl (sNaN) returns sNaN
  [20222] stdio: fopencookie: Mangle function pointers
  [20224] math: [i386] cbrtl (sNaN) returns sNaN
  [20225] math: ldexp, scalbn, scalbln return sNaN for sNaN input
  [20226] math: [i386/x86_64] expl, exp10l, expm1l return sNaN for sNaN
    input
  [20227] math: [i386/x86_64] logl (sNaN) returns sNaN
  [20228] math: [i386/x86_64] log10l (sNaN) returns sNaN
  [20229] math: [i386/x86_64] log1pl (sNaN) returns sNaN
  [20232] math: [ldbl-128] expm1l (sNaN) returns sNaN
  [20233] math: [ldbl-128ibm] expm1l (sNaN) returns sNaN
  [20234] math: [ldbl-128ibm] log1pl (sNaN) returns sNaN
  [20235] math: [i386/x86_64] log2l (sNaN) returns sNaN
  [20237] nss: nss_db: get*ent segfaults without preceding set*ent
  [20240] math: modf (sNaN) returns sNaN
  [20248] libc: debug/tst-longjump_chk2 calls printf from a signal handler
  [20250] math: frexp (sNaN) returns sNaN
  [20252] math: atan2 (sNaN, qNaN) fails to raise "invalid"
  [20255] math: [i386] fdim, fdimf return with excess range and precision /
    double rounding
  [20256] math: [i386/x86_64] fdiml returns sNaN for sNaN input
  [20260] string: ../sysdeps/x86/bits/string.h:1092:3: error: array
    subscript is below array bounds [-Werror=array-bounds]
  [20262] nis: _nss_nis_initgroups_dyn always returns NSS_STATUS_NOTFOUND
  [20263] nptl: robust mutex deadlocks if other thread requests timedlock
    (Only arm/linux)
  [20277] libc: $dp is not initialized correctly in sysdeps/hppa/start.S
  [20284] malloc: malloc: Corrupt arena avoidance causes unnecessary mmap
    fallbacks
  [20296] math: [i386/x86_64] scalbl returns sNaN for sNaN input, missing
    "invalid" exceptions
  [20314] nptl: make[4]: *** [/usr/include/stdlib.h] Error 1
  [20316] localedata: id_ID: Februari instead of Pebruari
  [20327] string: POWER8 strcasecmp returns incorrect result
  [20347] math: Failure: Test: j0_downward (0xap+0)
  [20348] libc: FAIL: misc/tst-preadvwritev64
  [20349] libc: 64-bit value is passed differently in p{readv,writev}{64}
  [20350] libc: There is no test for p{read,write}64
  [20357] math: Incorrect cos result for 1.5174239687223976
  [20384] build: Don't run libmvec-sincos-avx* tests on non avx machines

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 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-2018 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:
