WHATSNEW raw

   1  0.5.0 - initial release
   2  
   3  
   4  
   5  0.5.9 - signal ABI bugfix, various cleanup and fixes:
   6  
   7  sigset_t was wrongly defined as 1024 bytes instead of 1024 bits,
   8  breaking the intended ABI compatibility with the LSB/glibc sigaction
   9  structure. users should upgrade immediately and rebuild any libraries
  10  or object files that might be using the incorrect definitions.
  11  
  12  improved security against DoS with tcb shadow passwords by checking
  13  that the file opened was really an ordinary file.
  14  
  15  fixed a bug in the implementation of atomic ops that could have
  16  allowed the compiler to incorrectly reorder them (in practice, gcc
  17  with the default settings on i386 was not reordering them).
  18  
  19  greatly improved conformance to the C and POSIX standards regarding
  20  what the standard header files make visible. _POSIX_C_SOURCE is now
  21  needed to get POSIX functions in standard C headers, and _XOPEN_SOURCE
  22  or _GNU_SOURCE are required to get XSI interfaces or GNU extensions,
  23  respectively.
  24  
  25  many internal improvements have been made to the syscall-related code
  26  in preparation for porting to x86_64 and other archs.
  27  
  28  
  29  
  30  0.6.0 - x86_64 port, various important bugs fixed
  31  
  32  new x86_64 (amd64) architecture port, contributed by Nicholas J. Kain,
  33  along with PORTING guide. source tree layout and build system have
  34  been improved to accommodate further ports.
  35  
  36  various bugs that were introduced while making the headers respect C
  37  and POSIX namespace standards have been fixed. conformance to the
  38  standards has been improved.
  39  
  40  fixed an inefficiency in qsort that triggered a bug (occasionaly
  41  internal compiler error) in some versions of gcc.
  42  
  43  fixed a major bug in the printf %n specifier that prevented it from
  44  working and caused memory corruption.
  45  
  46  
  47  
  48  0.7.0 - major improvements to posix conformance and completeness
  49  
  50  implemented posix shared memory and semaphore interfaces.
  51  
  52  implemented all remaining required pthread and clock interfaces.
  53  
  54  major fixes to signal semantics.
  55  
  56  greatly improved temporary file name generation for safety against
  57  denial of service due to intentional name collisions.
  58  
  59  added syscall wrappers for the linux inotify interface.
  60  
  61  malloc(0) now returns a non-null pointer.
  62  
  63  fixed printf %n specifier (again), pthread_once (it was always
  64  hanging), and non-default-type mutex behavior.
  65  
  66  added ucontext/sigcontext support in headers to facilitate building
  67  libgcc with dwarf2 unwind support, and possibly other low-level tools.
  68  
  69  improved musl-gcc compiler wrapper.
  70  
  71  implemented many small missing functions here and there, minor header
  72  fixes, etc.
  73  
  74  
  75  
  76  0.7.1 - improvements to completeness, bug fixes
  77  
  78  implemented flockfile, wprintf, and robust mutex functions.
  79  
  80  fixed stack corruption bug in times(), minor header bugs, and some
  81  error return value bugs in thread interfaces.
  82  
  83  
  84  
  85  0.7.5 - new features, major optimization, and robustness
  86  
  87  implemented POSIX timers.
  88  
  89  optimized and simplified many thread-related functions.
  90  
  91  eliminated resource leak races in thread cancellation. (almost all
  92  existing implementations, including glibc, have these leaks.)
  93  
  94  overhauled stdio implementation to take advantage of readv/writev for
  95  reduced syscall load, and improved stdio's handling of error status.
  96  
  97  added syscall header and interface for applications to use and
  98  greatly simplified internal system for making syscalls.
  99  
 100  strangthened tmpnam/tempnam/tmpfile filename generation and made the
 101  straight C functions not depend on POSIX symbols.
 102  
 103  fixed pthread cancellation ABI on i386 to match the LSB/glibc ABI
 104  
 105  better double-free handling in malloc
 106  
 107  various minor bug fixes
 108  
 109  
 110  
 111  0.7.6 - major bug fixes
 112  
 113  fixed rare but serious under-allocation bug in malloc.
 114  
 115  fixed signedness bug in strchr that prevented finding high bytes.
 116  
 117  fixed serious parsing bugs in strtold.
 118  
 119  fixed statvfs syscall (it was always failing with EINVAL).
 120  
 121  fixed race condition in set*id() functions with threads (possible
 122  deadlock). further audit still needed though.
 123  
 124  fseek no longer sets the stream error flag on failed seeks (this was
 125  wrong and broke some programs, notably GNU m4).
 126  
 127  nl_langinfo is no longer a dummy function. (the functionality was
 128  previously implemented but accidentally left unused).
 129  
 130  various small fixes have been made to the implementations and
 131  prototypes for nonstandard and obsolete functions
 132  
 133  
 134  
 135  0.7.7 - more bug fixes and program-compatibility improvements
 136  
 137  fixed floating point formatting and rounding bugs in printf.
 138  
 139  fixed broken %N$ positional argument specifiers in printf.
 140  
 141  fixed misaligned read/overread bug in strchr which could lead to
 142  crashes scanning tiny strings at the end of a page when the next page
 143  is not readable, or on archs (not yet supported) that forbid
 144  misaligned reads.
 145  
 146  fixed breakage of statvfs on x86_64
 147  
 148  fixed crash in getmntent_r
 149  
 150  fixed bug in POSIX timers created with NULL sigevent argument
 151  
 152  improved semaphore performance, and sem_wait is now interruptable by
 153  signals, as required by POSIX.
 154  
 155  added many compatibility and system-level interfaces, increasing the
 156  proportion of busybox that works with musl.
 157  
 158  
 159  
 160  0.7.8 - more bug fixes and compatibility improvements
 161  
 162  fixed problems with ipv6 dns and address printing code that made ipv6
 163  support practically unusable, and some other getaddrinfo bugs.
 164  
 165  fixed broken sendmsg/recvmsg functions on x86_64 (caused by incorrect
 166  msghdr structure).
 167  
 168  fixed broken sigsetjmp asm on x86_64.
 169  
 170  worked around a problem with input buffering on terminals reblocking
 171  after getting a blank line, due to a bug in the linux readv syscall.
 172  
 173  various improvements to the "rsyscall" system used to implement
 174  threaded setuid, setgid, etc.
 175  
 176  exiting/cancelling the a timer handler thread no longer kills the
 177  timer.
 178  
 179  fixed incorrect trailing zeros on some %g conversions in printf.
 180  
 181  fixed buggy byte-swapping functions and moved them to inlines in
 182  byteswap.h.
 183  
 184  many small improvements to header/application compatibility, support
 185  for nonstandard macros, etc.
 186  
 187  
 188  
 189  0.7.9 release notes
 190  
 191  new pthread cancellation implementation:
 192  - safe against resource-leak/side-effect-leak race conditions
 193  - safe against interruption by signal handlers
 194  - reduced bloat in all cancellable functions
 195  - reduced bloat for blocking cancellation
 196  
 197  new interfaces implemented:
 198  - realpath (limited functionality)
 199  - wordexp (limited functionality)
 200  - flock (nonstandard)
 201  - forkpty (nonstandard)
 202  - posix_fadvise
 203  - posix_fallocate
 204  
 205  general bug fixes:
 206  - syslog function failure to communicate with syslogd
 207  - bug in siginfo_t definition if wait.h was included before signal.h
 208  - incorrect struct definitions for most of sysv ipc
 209  - pthread_exit/cancel on timer handler wrongly destroying the timer
 210  - linux dup2 ebusy workaround
 211  - obscure issues in non-threaded programs using some pthread functions
 212  - getopt_long allowed mismatch in last char of option name
 213  - incorrect parsing of obscure ip address forms
 214  - initgroups not working reliably (uninitialized var)
 215  - shadow pass treating empty expiry field as pass-expired-in-1970
 216  - bogus longjmp if pthread_exit was called from cancellation handlers
 217  
 218  x86_64-specific bug fixes:
 219  - fcntl file locking
 220  - thread stack alignment
 221  - broken select timeouts due to incorrect timeval definition
 222  
 223  
 224  
 225  0.7.10 release notes
 226  
 227  new features:
 228  - ipv6 numeric string parsing
 229  - eventfd syscall wrappers
 230  
 231  optimizations:
 232  - new qsort implementation using the smoothsort algorithm
 233  - much smaller/faster sigset_t handling functions
 234  - lowered spin count before futex wait in synchronization functions
 235  
 236  general bug fixes:
 237  - incorrect floating point round-to-even behavior in printf
 238  - major bugs in pthread barrier implementation
 239  - off-by-one error in scanf %n results
 240  - scanf failure to report EOF when scanning for literal text
 241  - minor missing/incorrect prototype issues
 242  - dependency on undefined call order in fclose
 243  
 244  compiler issue workarounds:
 245  - incorrect inlining of variadic functions on recent gcc versions
 246  - pcc preprocessor bug with recursive macro expansion
 247  
 248  
 249  
 250  0.7.11 release notes
 251  
 252  new features:
 253  - integrated dynamic linker
 254  - dynamic loading (dlopen/dlsym) (for dynamic-linked programs only)
 255  - XSI search.h API
 256  - POSIX message queues
 257  - POSIX spawn interfaces
 258  - BSD pseudo-random number generator API (random/srandom/initstate/etc.)
 259  - floating point environment (limited usefulness due to gcc bugs)
 260  
 261  general bug fixes:
 262  - possible crashes with wordexp due to uninitialized variable
 263  - race condition in pthread_kill (also present and unfixed in glibc/nptl)
 264  - pthread exit destructors called too late
 265  - dangerous unbounded vla in glob
 266  - brk/sbrk legacy functions mismatching legacy semantics
 267  - wcsncpy dest buffer overflow
 268  - strncat and wcsncat possible overflows due to double-termination
 269  
 270  
 271  
 272  0.7.12 release notes
 273  
 274  new features:
 275  - support for textrels in shared objects
 276  - rpath support in dynamic linker
 277  - stdio_ext.h functions (for better gnu software compatibility)
 278  
 279  bug fixes:
 280  - some compilers miscompiling dlopen due to misuse of longjmp
 281  - safe handling of invalid long-double bit patterns (affects printf)
 282  - workaround for bugs in linux mprotect syscall
 283  - thread-safety for random() functions
 284  - various minor issues
 285  
 286  
 287  
 288  0.8.0 release notes
 289  
 290  new features:
 291  - chinese and japanese legacy charset support in iconv
 292  - zero-syscall clock_gettime support (dynamic-linked x86_64 only)
 293  - futex-based locking for stdio (previously used spinlocks)
 294  - LD_PRELOAD and RTLD_NEXT support in dynamic linker
 295  - strptime (mostly working but incomplete)
 296  - posix aio (mostly working but not entirely conformant)
 297  - memory streams (fmemopen, open_memstream, ...)
 298  - stub/dummy implementations for various useless legacy functions
 299  - if_nameindex
 300  
 301  security hardening:
 302  - setuid, etc. should not longer be able to "partially fail" with threads
 303  - ensure suid programs start with fd 0,1,2 open
 304  - improved openpty/forkpty failure checks
 305  
 306  threads/synchronization bug fixes:
 307  - dangerous spurious wakeup in pthread_join lead to early return
 308  - race condition enabling async cancellation (delayed/lost cancellation)
 309  - destruction/unmapping race conditions in semaphores, mutexes, rwlocks
 310  - recursive rwlock_rdlock deadlock when a writer is waiting
 311  - race condition in sigqueue with fork
 312  - timer expiration thread exit wasn't running dtors
 313  - timer threads weren't blocking signals
 314  - close was wrongly cancellable after succeeding on some devices
 315  - robust mutex list was not reset on fork
 316  
 317  general bug fixes:
 318  - incorrect logic in fread (spurious blocking; crash on write-only files)
 319  - many corner cases and overflow cases for strtol-family functions
 320  - various printf integer formatting issues with flags/width/precision
 321  - incorrect iconv return value on failure
 322  - broken FD_* macros on 64-bit targets
 323  - clock function returning wrong value (real time not cpu time)
 324  - siglongjmp signal mask clobbering (off-by-one pointer error)
 325  - dynamic linker weak symbol resolution issues
 326  - fdopendir failure to set errno
 327  - various minor header fixes
 328  
 329  
 330  
 331  0.8.1 release notes
 332  
 333  bug fixes:
 334  - mismatching prototypes caused build failure on 64-bit
 335  - other minor prototype errors in the headers have been fixed
 336  - various other small omissions fixed
 337  
 338  
 339  
 340  0.8.2 release notes
 341  
 342  new features:
 343  - ptrace syscall support
 344  
 345  bug fixes:
 346  - const error (only a warning with many compilers) in lio_listio
 347  - minor portability fixes aimed at supporting new arch targets
 348  
 349  
 350  
 351  0.8.3 release notes
 352  
 353  new features:
 354  - arm port (experimental)
 355  - better musl-gcc wrapper script for building against musl
 356  - added clone system call
 357  
 358  bug fixes:
 359  - numerous header file typos, copy/paste errors, omissions
 360  - statfs and statvfs ABI are now LSB-conformant (and actually work)
 361  
 362  
 363  
 364  0.8.4 release notes
 365  
 366  new features: 
 367  - arm dynamic linker support
 368  - process-shared pthread barriers now work
 369  - efficient futex-requeue-based cond var broadcast
 370  - more optional cancellation points are now cancellable
 371  - printf accepts null pointers with %s, prints as "(null)"
 372  - recursive mutexes are now fully reentrant
 373  - __cxa_atexit support
 374  - real vfork
 375  - dynamic linker now gold-compatible
 376  - prlimit syscall
 377  - support for large limits with setrlimit/getrlimit (even on 32-bit)
 378  - glob now supports GLOB_PERIOD option (GNU extension)
 379  
 380  bug fixes:
 381  - many serious issues in condition variables
 382  - rwlock failure-to-wake deadlock issues
 383  - various small header files bugs/omissions
 384  - wrong failure return for pthread_create
 385  - path handling issues on execvp
 386  - lock count corruption with robust recursive mutexes on owner death
 387  - integer overflows in atoi, etc. reading most-negative value
 388  - spurious mremaps on every realloc of large memory chunks
 389  - pthread cancellation failure in single-threaded programs
 390  
 391  security:
 392  - avoid fd_set overflow in dns lookups
 393  
 394  
 395  
 396  0.8.5 release notes
 397  
 398  new features:
 399  - stdio operations are now cancellable (only when low-level io happens)
 400  - global ctor/dtor support in main program start code and shared libs
 401  - dynamic linker support for PIE executables (but missing startup code)
 402  - vfork support on x86_64
 403  - complete set of locale_t functions (all ignore the locale argument)
 404  - provide define float_t and double_t in math.h
 405  - lighter/faster cancellation cleanup handler register/unregister
 406  
 407  bug fixes:
 408  - gcc wrapper now supports -shared, -nostdlib, -nostartfiles
 409  - removed one wrongly-classified character from iswspace set (zwsp)
 410  - fixed crashes in dns lookup on some errors, e.g. resolv.conf missing
 411  - "make install" no longer tries to build shared libc if disabled
 412  - ptrace argument handling bugs fixed
 413  - work around visibility-hidden bugs in gcc 3.x
 414  - fix thread-pointer-loss issue when it's initialized in signal handlers
 415  - various minor typo/misc fixes in headers
 416  
 417  compatibility:
 418  - glob behaves more like traditional implementations w.r.t. GLOB_MARK
 419  - added legacy futimes, lutimes functions
 420  - more compatibility macros in sys/param.h (nonstandard header)
 421  - setfs[ug]id syscall wrappers (linux specific)
 422  - fgetpwent function (nonstandard)
 423  - utmp.h matches traditional version more closely
 424  - caddr_t now matches glibc type (void * instead of long)
 425  - dummy (always-fail) dlopen and dlsym functions for static linked programs
 426  - [efg]cvt functions (previously posix, removed from standard)
 427  - get_current_dir_name function (nonstandard)
 428  
 429  
 430  
 431  0.8.6 release notes
 432  
 433  bug fixes:
 434  - fix crash in dns lookups for all static-linked, non-threaded programs
 435  
 436  
 437  
 438  0.8.7 release notes
 439  
 440  new features:
 441  - c++ support with g++'s libstdc++
 442  - c99 math library (float, long double, complex, etc.)
 443  - numerous wchar_t functions
 444  - a64l, l64a functions
 445  - getdate function
 446  
 447  compatibility:
 448  - c89 compatibility in math.h
 449  - syscall.h alias for sys/syscall.h
 450  - memory.h alias for string.h
 451  - getcwd supports null buffer argument (auto-allocation)
 452  
 453  bug fixes:
 454  - major fenv (floating point environment) fixes and optimizations
 455  - strptime mishandling of day/month names
 456  - strtoull wrongly rejecting the highest 16 possible values as overflow
 457  - math.h constant expression fixes for INFINITY/NAN/etc.
 458  - scanf mishandling of "0" with "%x"
 459  
 460  
 461  
 462  0.8.8 release notes
 463  
 464  new feature:
 465  - major math correctness and performance improvements
 466  - many math functions implemented in asm for i386
 467  - some math functions (mostly long double) in asm for x86_64
 468  - new floating point parser/converter with correct rounding
 469  - implement wcstod, wcstof, and wcstold
 470  - new scanf implementation - cleaner, faster, more correct
 471  - minimal/incomplete strfmon implementation
 472  
 473  compatibility:
 474  - header fixes for c++
 475  - regex code resync with TRE; support common regex extensions
 476  - support for compiling apps with gcc's -funsigned-char
 477  - sysconf now returns dynamic limits for open files, processes
 478  - give dlerror proper error status stickiness
 479  - make alloca work even with -fno-builtin
 480  
 481  critical security fixes:
 482  - stack-based buffer overflow in fprintf on unbuffered files
 483  
 484  other bug fixes:
 485  - rare gcc register allocation (miscompilation) bug in syscall wrappers
 486  - printf was rejecting the valid (but redundant) %lf format specifier
 487  - fixed big data bloat (missing const) in math functions
 488  - many math fixes related to floating point exceptions and rounding
 489  - corrected DECIMAL_DIG definitions
 490  - tgammal was wrongly setting global signgam
 491  - crash in wordfree with uninitialized we_offs
 492  - fix wordexp not null-initializing the we_offs initial slots
 493  
 494  
 495  
 496  0.8.9 release notes
 497  
 498  bug fixes:
 499  - major breakage in strtol and family: failure to accept leading spaces
 500  - incorrect name for MATH_ERREXCEPT in math.h
 501  
 502  compatibility:
 503  - prototypes for a few additional nonstandard functions
 504  
 505  
 506  
 507  0.8.10 release notes
 508  
 509  new features:
 510  - correct over/underflow detection (ERANGE setting) for strtod
 511  - new musl-gcc wrapper, specfile based, faster and more robust
 512  - meaningful return strings for dlerror
 513  - new iswalpha, iswpunct, and wcwidth; sync'd to Unicode 6.1
 514  - towupper/towlower sync'd with Unicode 6.1
 515  - new futex-based libc-internal locks instead of spinlocks
 516  - experimental stack protector support (minimal; no random canary)
 517  - experimental gdb shared library tracking support
 518  
 519  compatibility:
 520  - getusershell family functions
 521  - getresuid and getresgid syscall wrappers
 522  - byte swapping macros in endian.h
 523  - getdtablesize was wrongly declared in unistd.h for _XOPEN_SOURCE
 524  
 525  bug fixes:
 526  - iconv_open wrongly rejecting most dest charsets (broken in 0.8.0)
 527  - sysconf failure when correct value is -1 (broken in 0.8.8)
 528  - scanf and strtod family functions overreading past NAN (4 bytes vs 3)
 529  - scanf and strtod wrongly treating "0.00000000001", etc. as 0
 530  - many bugs in towupper/towlower (never seriously tested before)
 531  - int8_t definition was wrong when gcc -funsigned-char was used
 532  
 533  
 534  
 535  0.9.0 release notes
 536  
 537  license change: MIT
 538  
 539  new features:
 540  - configure script, improved build system
 541  - full stack protector support
 542  - PIE support on x86 and x86_64
 543  - new O(1) space, O(nm) time implementation of fnmatch
 544  - improved support for sse2 floating point mode on x86
 545  
 546  compatibility:
 547  - added linux unshare syscall
 548  - exp10/pow10 function
 549  - sqrtl support on arm (previously missing)
 550  - removed minimal linux/*.h headers that could conflict with real ones
 551  - support for _LARGEFILE64_SOURCE (mapped to standard fcns with #define)
 552  - better c89 compatibility in headers
 553  - stub versions of sched_* functions (previously missing)
 554  - pthread stacks no longer executable (compat with hardened kernels)
 555  - new ar.h and lastlog.h (legacy junk)
 556  - various other header improvements
 557  
 558  optimization:
 559  - additional x86_64 math asm
 560  - better formula for acos use in i386 asm
 561  
 562  bug fixes:
 563  - large (up to a few %) errors in strtod for certain values due to bug
 564  - mbsnrtowcs and wcsnrtombs were completely broken (bad exit logic)
 565  - wide printf %.0s could fail due to uninitialized variable
 566  - missing dlerror strings for dlsym in some cases
 567  
 568  
 569  
 570  0.9.1 release notes
 571  
 572  new features:
 573  - dynamic linker can be used as a program to explicitly load/run executables
 574  - ldd command, usable by making a symlink to the dynamic linker named ldd
 575  
 576  bug fixes:
 577  - major bugs in POSIX BRE parsing inherited from TRE regex code
 578  - character matching bug in regex on ARM: WCHAR_MAX was assumed to be signed
 579  - various obscure fixes related to signals and pthread cancellation
 580  - remquot subnormal remainder bug
 581  - buggy macros in (nonstandard) sys/param.h
 582  - major bug in pthread barriers on x86_64 (out of bounds write)
 583  - utimes (legacy) function was making wrong syscall (utime instead of utimes)
 584  - avoid using "old" syscalls that don't exist on arm eabi linux
 585  - broken strrchr(str, 0)
 586  - broken mbsinit(0)
 587  - broken wcsncmp
 588  - syntax error in nextafter macro in tgmath.h
 589  - missing support for -pie in musl-gcc wrapper
 590  - abort could wrongly fail to terminate the program in some cases
 591  
 592  compatibility:
 593  - increase default thread stack size to 80k
 594  - support _BSD_SOURCE feature test macro
 595  - support _LARGEFILE64_SOURCE feature test macro (merely exposes alt names)
 596  - lots of legacy-compatibility improvements in headers
 597  - various minor GNU extension functions
 598  - sysconf reporting number of available CPUs/cores
 599  - various LSB/glibc ABI interfaces aimed at compatibility with some binaries
 600  - use fistpll asm mnemonic instead of fistpq for compat with clang
 601  
 602  
 603  
 604  0.9.2 release notes
 605  
 606  bug fixes:
 607  - pointer overflow in printf (crash on 32bit userspace, 64bit kernel)
 608  - printf %ls over-read bug
 609  - strtod failure to read -0x as negative zero
 610  - flush stdio after dtors, not before
 611  - wrong file position for buffered input streams on exit
 612  - popen was broken when stdin/out were already closed
 613  - broken wcwidth tables (missing many characters)
 614  - fwrite: wrong return value of partial/failed write
 615  - broken utf-16 conversions
 616  - bad buffer length check in getlogin_r
 617  - bad perror("") behavior; did not match perror(0)
 618  - broken sysinfo syscall/structure
 619  - stdint.h const macro signedness bugs
 620  - broken include guards in some headers
 621  - bogus localeconv values
 622  - cancellation-safety for popen and pclose
 623  - fma corner cases wrong on i386
 624  - fcntl F_GETOWN errno missing on failure.
 625  - char signedness bug in dynamic linker broke dlopen on arm
 626  - mprotect failure in dynamic linker caused crash instead of error
 627  
 628  build system:
 629  - configure check to work around hacked-up gcc versions
 630  - test for old binutils that can't support musl dynamic linker
 631  
 632  compatibility:
 633  - make _GNU_SOURCE imply _LARGEFILE64_SOURCE
 634  - syscall wrapper for lots of nonstandard and/or legacy linux syscalls
 635  - versionsort stub
 636  - timegm function (inverse of gmtime)
 637  - various minor header tweaks
 638  - make __freading/__fwriting semantics match traditional ones
 639  - added gnulib-compatibility stdio interfaces
 640  - added pthread_attr_setstack interface
 641  - make strerror_r return partial string when buffer is too small
 642  - duplocale should accept LC_GLOBAL_LOCALE
 643  - align ptsname_r to upcoming posix requirements
 644  - support invalid ld80 bit patterns as extra nans.
 645  
 646  
 647  
 648  0.9.3 release notes
 649  
 650  new features:
 651  - mips (32-bit, o32 abi) port, currently static-linked only
 652  - newly overhauled crypt implementation
 653  - improved library pathname info for debugger from the dynamic linker
 654  - getaddrinfo (and getservbyname) now support /etc/services lookups
 655  - pipe2 syscall wrapper
 656  - splice and vmsplice syscall wrappers
 657  - syscall wrappers for extended attribute interfaces
 658  - ioperm/iopl syscall wrappers on archs that support these operations
 659  
 660  bug fixes:
 661  - dlsym RTLD_NEXT library search order was wrong
 662  - multiple dlopen pathname and library name handling errors
 663  - potential race condition in detached thread exit
 664  - broken internal-lock-handling code not updated for futex-based __lock
 665  - sem_trywait spurious EAGAIN errors arising from CAS failures
 666  - workaround kernel bug in cmsghdr size_t vs socklen_t issue (64-bit)
 667  - getservby* crash on null protocol argument
 668  - logic error skipping failed interfaces in if_nameindex
 669  - various minor header/declaration related issues
 670  
 671  arm-specific bug fixes:
 672  - broken crti/crtn startup code when gcc crtbegin/end files are linked
 673  - sigsetjmp tail call optimization failure broke the function
 674  - incorrect little-endian assumptions in atomic.h functions
 675  - use of blx instruction in asm (not supported on pre-v5 arm)
 676  
 677  build system:
 678  - only use expensive -ffloat-store cflag on archs/compilers that need it
 679  - make musl-gcc wrapper support -lgcc (mainly for self-hosting)
 680  
 681  
 682  
 683  0.9.4 release notes
 684  
 685  new features:
 686  - blowfish crypt
 687  - dynamic linking on mips
 688  - arm hard float support
 689  - BSD fgetln function in stdio
 690  - minor header improvements for compatibility
 691  - support for CROSS_COMPILE variable to configure
 692  - legacy significand function
 693  - better support for SUSv3-targeted programs
 694  
 695  performance:
 696  - assembly (string ops based) memcpy for i386 and x86_64
 697  - reduce printf overhead
 698  
 699  bug fixes:
 700  - failure of strtod, etc. to process extremely long strings correctly
 701  - read overrun in wcsstr for short needles
 702  - various major mips issues that prevented most software from working
 703  - erroneous floating point exception behavior in i386/x86_64 exp asm
 704  - crashes on null arguments to legacy err.h functions
 705  - various header file/type issues
 706  - extremely rare/obscure race condition with robust mutexes
 707  - crypt now never returns null (most programs don't check, then crash)
 708  - missing xattr remove functions
 709  
 710  
 711  
 712  0.9.5 release notes
 713  
 714  compatibility and headers:
 715  - POSIX+XSI+BSD features enabled by default with no macros defined
 716  - most programs can now be built without adding -D_GNU_SOURCE
 717  - added C99 restrict keyword where required in all prototypes
 718  - greater C89 compatibility
 719  - cleaner, more-compatible public syscall.h
 720  - many other header fixes
 721  - support for compiling musl with clang/llvm
 722  
 723  new features:
 724  - sha 256/512 password hash functions in crypt
 725  - GNU hash support in dynamic linker
 726  - partial C11 coverage
 727  - dladdr function added
 728  - dynamic linker reports all errors instead of exiting on first error
 729  - syscall wrappers added for most remaining linux syscalls
 730  - provide POSIX O_SEARCH open mode using linux O_PATH
 731  
 732  bug fixes:
 733  - most atexit functions were being skipped when exiting
 734  - some BSD functions were not being exposed under _BSD_SOURCE
 735  - issues loading ssp-protected DSO into non-ssp program with dlopen
 736  
 737  debloating:
 738  - eliminate .eh_frame (10-15% loaded size bloat)
 739  - optimal inline syscall asm for ARM and MIPS
 740  - no longer force -O3 for shared libs
 741  
 742  
 743  
 744  0.9.6 release notes
 745  
 746  bug fixes:
 747  - serious breakage in definition of O_ACCMODE mask (missing a bit)
 748  
 749  new features:
 750  - O_EXEC open mode
 751  - md5 crypt hash function
 752  
 753  
 754  
 755  0.9.7 release notes
 756  
 757  new features:
 758  - thread-local storage (__thread/_Thread_local)
 759  - microblaze port
 760  - getopt option parsing reset support
 761  - vsyscall (sysenter, etc.) support on i386 (faster syscalls)
 762  - memmem function (GNU extension)
 763  - mips fenv support
 764  - accept "nan(n-char-sequence)" in strtod/scanf family functions
 765  - configure now supports compiling with pcc
 766  
 767  quality and correctness improvements:
 768  - close-on-exec flag for all library-internal file descriptors
 769  - cancellation-safety and corner-case overhaul in shm_open/sem_open
 770  - close EINTR vs EINPROGRESS issue
 771  - mark binaries as not requiring executable stack
 772  - better gdb compatibility in dynamic linker
 773  - support recursive dlopen (dlopen called from constructors)
 774  - posix_spawn/system/popen no longer momentarily double commit charge
 775  - all stdio functions wait for locks
 776  
 777  bug fixes:
 778  - broken sysvipc *ctl functions on 64-bit archs
 779  - broken shmdt on some archs
 780  - getaddrinfo failure with port "0"
 781  - dirname handling of trailing slash
 782  - vfork race in posix_spawn
 783  
 784  
 785  
 786  0.9.8 release notes
 787  
 788  new features:
 789  - powerpc port
 790  - dl_iterate_phdr interface
 791  - added mips-specific syscalls
 792  - thread priority scheduling
 793  - C11 CMPLX macro in complex.h
 794  - x86 port io functions in sys/io.h
 795  
 796  compatibility:
 797  - improved headers for trace/debugging/machine-access
 798  - stub functions for unsupported thread-related functionality
 799  
 800  bug fixes:
 801  - numerous math bugs (mostly exception flags and excess-precision issues)
 802  - register clobber error in i386 vsyscall asm (did not affect most callers)
 803  - various incorrect definitions in mips headers
 804  - broken dlsym asm on mips
 805  - empty prefix handling in configure script (--prefix="")
 806  - ldso search path logic issues
 807  - lock handling for stdio memory streams at exit time
 808  - invalid SO_REUSEPORT definition in socket.h (not supported by Linux)
 809  - broken redirection attempt to /dev/null in configure script
 810  
 811  
 812  
 813  0.9.9 release notes
 814  
 815  new features:
 816  - tgamma implementation (no longer lgamma wrapper with low precision)
 817  - various gnu extensions: sigandset, sigorset, etc.
 818  - futimesat function (obsolete)
 819  - various linux syscalls: arch_prctl, personality, etc.
 820  
 821  optimizations:
 822  - hyperbolic, inverse hyperbolic, and inverse trig, bessel functions
 823  - is* comparison macros in math.h now expand inline properly
 824  
 825  library bugs fixed:
 826  - calling getenv from shared library ctors was broken
 827  - invalid read in mmap-serviced aligned_alloc/memalign (possible crash)
 828  - wrong errno result in fallback path of pipe2 
 829  - various math functions raising spurious exceptions
 830  - mmap errno value on invalid offsets
 831  - backwards alignment logic in strlcpy
 832  - integer overflows in bessel functions
 833  - large (up to 60ulp) error in erfcf
 834  - dlsym/dlclose crashing on invalid library handles
 835  - failure to handle arch variations for cloexec/nonblock flags
 836  - lio_listio wrong return value for LIO_WAIT mode
 837  - dladdr failure to resolve PLT addresses
 838  - time_t/struct tm conversion off-by-one-day in december
 839  - malloc corruption on nonstandard kernels with non-page-aligned brk
 840  
 841  arch-specific bugs fixed:
 842  - arm ctors/dtors were not working with recent gcc versions
 843  - arm and mips setjmp/longjmp wrongly saved/restored fenv state
 844  - loss of precision in i386/x86_64 expl
 845  
 846  header bugs fixed:
 847  - incorrect PRI/SCN macros in inttypes.h for some types
 848  - arm sys/user.h regressions
 849  - failure of offsetof() to be an integer constant expression
 850  - tgmath return value type problems
 851  
 852  header compatibility improvements:
 853  - _GNU_SOURCE now enables everything; _ALL_SOURCE also works
 854  - scsi/scsi.h and scsi/sg.h are now provided
 855  - additional MAP_* flags for mmap
 856  - additional F_* commands and flags for fcntl
 857  - additional socket option, IPPROTO_* values, and multicase macros
 858  - thread-related waitpid flags
 859  - EHWPOISON added to errno.h
 860  - additional macros for mount, swap, and reboot operations
 861  - expose additional link.h structures
 862  - always ensure sizeof(NULL)==sizeof(void *), even in c++
 863  - additional flags for poll, epoll, inotify, timerfd, timex, dlfcn
 864  - register names in signal.h/ucontext.h for x86
 865  - ipc.h ipc_perm nonstandard struct field name compatibility improve
 866  
 867  
 868  
 869  0.9.10 release notes
 870  
 871  new features:
 872  - getifaddrs 
 873  - pthread_getattr_np (widely used by garbage collectors)
 874  - mkostemps, mkostemp, mkstemps functions (mkostemp is future-POSIX)
 875  - strcasestr and strverscmp (previously stubs)
 876  
 877  improvements:
 878  - major performance improvements in mbtowc
 879  - avoid filling caller-provided thread stacks with large TLS
 880  - debloat unnecessary static buffers
 881  - robust posix_spawn based on CLONE_VM instead of vfork
 882  - new system() and popen() based on posix_spawn
 883  - better strerror strings
 884  - further emulation of atomic close-on-exec/nonblock options for old kernels
 885  - provide macro constants for new-ish kernel features
 886  
 887  compatibility:
 888  - several nonstandard but widely-available pwd/grp/shadow functions
 889  - program_invocation_[short_]name
 890  - re-added useconds_t type used by some programs
 891  - some legacy arpa headers
 892  - dn_skipname function (legacy resolver API)
 893  - additional ABI aliases for supporting glibc-linked libraries/binaries
 894  
 895  general bugs fixed:
 896  - stale locks and bogus munmap call when pthread_create fails
 897  - uninitialized argument to munmap when dynlink load_library fails
 898  - incorrect error returns in gethostby*_r
 899  - memory leak in gethostbyname family
 900  - blank ai_canonname in getaddrinfo for non-CNAME records
 901  - undefined HZ macro in scsi/sg.h
 902  - wrong return value for wmemmove on forward-copy
 903  - namespace conformance in strings.h
 904  - various utmp.h bugs
 905  - unnecessary DT_SONAME in libc.so caused problems on some systems
 906  - multiple bugs in syslog, some possibly dangerous
 907  - non-functional setpriority function
 908  - slight mishandling of 0xf5 byte in UTF-8 decoder
 909  - misaligned memory accesses in mbsrtowcs
 910  
 911  arch-specific bugs fixed:
 912  - crash in shared library loading on arm
 913  - missing __aeabi_atexit needed by arm eabi
 914  - wrong float_t definition on x86_64
 915  - various low-impact type size/alignment mismatches in some headers
 916  - epoll struct alignment wrong on non-x86[_64] archs
 917  - broken pipe2 fallback code on mips with old kernels
 918  
 919  
 920  
 921  0.9.11 release notes
 922  
 923  new features:
 924  - %m allocation modifier for scanf
 925  - week number and ISO week-based-year functionality in strftime
 926  - per-process and per-thread cputime clocks
 927  - ethernet address conversion interfaces
 928  - legacy classful ipv4 network address interfaces
 929  - minimal dlinfo function (nonstandard)
 930  
 931  other improvements:
 932  - dynamic linker path file can now use newlines to separate paths
 933  - math optimizations for archs with extended precision (i386)
 934  - musl-gcc wrapper now exposes gcc's intrinsic headers
 935  - quality of rand and rand_r pseudo-random sequences
 936  - support for large device minor numbers (greater than 8 bits)
 937  - various header conformance and compatibility fixes
 938  
 939  directly user-visible bugs fixed:
 940  - scanf losing characters on unbuffered streams and fmemopen streams
 941  - failure of mbsrtowcs to record stop position when dest is full
 942  - failure of iconv to convert to legacy codepages
 943  - non-working pthread_[sg]etschedparam functions (wrong syscall arguments)
 944  
 945  other potentially-serious bugs fixed:
 946  - resource leaks in sem_open
 947  - various bugs in thread exit synchronization
 948  - invalid access in aio notification after aiocb free/reuse
 949  - synchronization in dynamic linker when new thread dlopens during ctors
 950  - lack of error handling for failure to read dynamic linker path file
 951  - creation by mmap or shmget of objects larger than PTRDIFF_MAX
 952  
 953  minor conformance bugs fixed:
 954  - overflow handling for the clock function
 955  - workaround for incorrect exceptions in fma due to compiler bugs
 956  - workaround wrong kernel type for sem_nsems field in struct semid_ds
 957  
 958  arch-specific bugs fixed:
 959  - x86_64 sigsetjmp clobbered the signal mask rather than saving it
 960  - misaligned stack when calling ctors/dtors (crashing on x86_64)
 961  
 962  
 963  
 964  0.9.12 release notes
 965  
 966  new features:
 967  - zoneinfo time zone support
 968  - PIE support on all supported archs
 969  - named sub-archs for endian and float ABI variants
 970  - improved support for non-root installs of the dynamic linker
 971  - ability to selectively build only performance-critical modules with -O3
 972  - simple buffer overflow detection in free/realloc
 973  - inet_ntop now presents v4-mapped addresses in ::ffff:a.b.c.d form
 974  - ldd now reports libc and the dynamic linker in its output
 975  
 976  compatibility:
 977  - support for new init/fini array (needed for ctors/dtors on newer gcc)
 978  - C++ ABI fully matches glibc/LSB, at least on x86
 979  - many added ABI compatibility symbols for using glibc-linked libs
 980  - support for STB_GNU_UNIQUE symbol bindings (found in some C++ libs)
 981  - macros/types for new Linux kernel features in headers
 982  
 983  bugs fixed:
 984  - crashes in scanf on literal mismatches (regression from adding %m)
 985  - dl_iterate_phdr was passing invalid phdr pointers to its callback
 986  - getaddrinfo with null host and AF_UNSPEC was failing to report IPv6
 987  - integer overflows in date/time conversion code
 988  - misinterpretation of pre-1930s dates as post-2038 on 32-bit archs
 989  - make install failed to install bits headers if make was not run first
 990  - shm_open was wrongly cancellable
 991  - low- or no-impact heap corruption in memalign
 992  - explicitly running the dynamic linker on PIE programs did not work
 993  - missing macros and sysconf for some supported POSIX option groups
 994  - missing close-on-exec flags for several internal fd uses
 995  
 996  arch-specific bugs:
 997  - wrong SIG_ATOMIC_MIN/MAX macros on x86_64
 998  - erfcl was missing on archs where long double is same as double
 999  - broken dynamic-model TLS in static-linked arm/mips/powerpc programs
1000  
1001  
1002  
1003  0.9.13 release notes
1004  
1005  new features:
1006  - iconv support for EUC-KR and Big5 (including HKSCS) encodings
1007  - field widths (POSIX 2008 feature) in strftime
1008  - recursive rpath and $ORIGIN support in dynamic linker
1009  - cpu affinity interfaces
1010  - support for armhf (hardfloat) floating point environment (fenv)
1011  - support for SSE fenv on i386 (for apps using -mfpmath=sse -msse2)
1012  - strftime %s format (seconds since the epoch, future POSIX requirement)
1013  - configure script now saves its command line as a comment in config.mak
1014  - legacy functions valloc and euidaccess
1015  
1016  performance:
1017  - optimized asm memcpy for arm
1018  - optimized asm memset for i386 and x86_64
1019  - optimized C versions of memcpy and memset for all archs
1020  - eliminated major spurious syscalls from posix_spawn
1021  - some math asm for armhf (hardfloat)
1022  
1023  workarounds for:
1024  - qemu-user's rt_sigaction syscall does not allow old to alias new
1025  - qemu-user's madvise always succeeds (broke pthread_getattr_np)
1026  - passing PT_INTERP to dlopen attempted to double-load libc
1027  - gcc 4.8.x generating self-referential (infinite recursion) memcpy/memset
1028  - linux's lack of support for fchdir, fchmod, fchown, fstat on O_PATH fds
1029  
1030  bugs fixed:
1031  - failure to honor flags for fchmodat and faccessat (linux syscall api flaws)
1032  - SIGEV_THREAD timer id corruption and race condition issues
1033  - timer thread TLS incorrectly keeping values from previous expiry run
1034  - ecvt/fcvt decimal position off-by-one
1035  - in symbol-versioned libs, symbol resolved to oldest instead of newest
1036  - posix_spawn not correctly reporting errno from exec failure
1037  - "make install" was not atomic (overwrote files rather than replacing)
1038  - integer overflows in strftime
1039  - unset/empty TZ variable was mishandled
1040  - strftime could crash if the struct tm did not have valid tm_zone field
1041  - failure of fenv functions to handle invalid arguments (required by ISO C)
1042  - failure of some math functions (C and i386 asm) to raise underflow flag
1043  - broken dn_expand function (previously not used internally)
1044  - race conditions with signals during fork
1045  - incorrect access check in mktemp (obsolete function)
1046  - unnecessary arbitrary limits on size of program headers in dynamic loader
1047  - text formatting bugs in output of err.h functions
1048  
1049  arch-specific bugs:
1050  - fesetenv(FE_DFL_ENV) crashed on i386
1051  - breakage of arm crt code when libc is compiled as thumb
1052  - arm/armhf (hardfloat) misidentified by configure
1053  - ambiguity of wait (exit status) macros on mips with signal number 127
1054  - wrong value of _NSIG and SIGRTMAX on mips
1055  
1056  
1057  
1058  0.9.14 release notes
1059  
1060  bugs fixed:
1061  - failure to properly install dynamic linker with DESTDIR set (symlink wrong)
1062  - rare deadlock in libc-internal locking routines
1063  - dynamic linker used fallback paths wrongly on (possibly transient) errors
1064  - popen broken when stdin or stdout was already closed in parent
1065  - deadlock/memory-corruption in multithreaded set*id and setrlimit functions
1066  - realpath failed when file was not readable
1067  - readpath mistakenly had cancellation points in it
1068  - crashes in scanf with invalid %m conversion specifiers
1069  - misclassificiation of some invalid ld80 float representation in fpclassify
1070  - various overflow and underflow flag issues in math functions
1071  - domain handling errors for acoshf and acoshl
1072  - wrong values for some sysconf properties
1073  - lack of proper memory barriers on arm
1074  
1075  mips-specific bugs:
1076  - broken sysv ipc structures
1077  - multiple stack-related bugs in clone, leading to crashes in parent or child
1078  - overflow writing sigset_t in multithreaded set*id and setrlimit functions
1079  
1080  other improvements:
1081  - size and performance improvements to various math functions
1082  - wait.h as a compatibility alias for sys/wait.h
1083  - various header improvements
1084  - support for runtime-variable page size on archs that need it (mainly mips)
1085  
1086  
1087  
1088  0.9.15 release notes
1089  
1090  new features:
1091  - support for mixing IPv4 and v6 nameserver addresses in resolv.conf
1092  - RFC 3678 multicast structures/macros in netinet/in.h
1093  - putspent and fgetspent functions (shadow password API)
1094  - timef function (obsolete, removed in POSIX 2008)
1095  - fanotify syscalls (Linux-specific feature)
1096  - semtimedop syscall (Linux-specific sysvipc extension)
1097  - quotactl syscall and header (filesystem quotas support)
1098  - drem and finite functions (obsolete BSD functions)
1099  - getloadavg function (non-standard)
1100  - herror function (non-standard and obsolete)
1101  - libc.so now stores and prints its version information
1102  - expose constants for new Linux features including O_TMPFILE
1103  - implement FNM_LEADING_DIR option to fnmatch (GNU extension)
1104  - posix_close function (accepted for inclusion in next POSIX issue)
1105  
1106  bugs fixed:
1107  - buffer overflow in mbsrtowcs
1108  - clobbering of gr_name in getgrnam_r and getgrgid_r
1109  - execle ignoring the environment argument
1110  - setenv crash on malloc failure
1111  - out-of-bounds access in fnmatch with FNM_PATHNAME and certain patterns
1112  - failure of malloc to set errno when failing to extend heap
1113  - incorrect errno value from getcwd with zero size
1114  - spurious failure in faccessat with AT_EACCESS flag with suid/sgid programs
1115  - several fd leaks due to missing close-on-exec flag
1116  - misspellings/typos in macro names in several headers
1117  - incorrect failure return value in inet_pton
1118  - various numeric ip address parsing and validation fixes
1119  - namespace conformance issues in several headers
1120  - minor header issues
1121  - zombie processes left by faccessat with AT_EACCESS
1122  - timezone file parser failing/crashing on 64-bit archs
1123  - hang in localtime with near-overflowing time_t values on 64-bit archs
1124  - timezone path search was only trying first path
1125  - incorrect handling of excessive-length TZ environment strings
1126  - timezone file loading was wrongly enforcing O_NOFOLLOW/rejecting symlinks
1127  - iswspace was wrongly returning true for the null character
1128  - various bugs in wordexp
1129  - putgrent could write corrupt lines after write failures
1130  - dn_expand misinterpreted in-packet offsets greater than 255
1131  - spurious strftime/wcsftime failure on len+1==bufsize case
1132  - incorrect underflow flag in fma corner cases
1133  - log*(0) wrongly returned +inf in downward-rounding mode
1134  - failure of fchmod, fstat, fchdir, and fchown to produce EBADF
1135  
1136  arch-specific bugs fixed:
1137  - i386: failure of fesetround to set sse rounding mode
1138  - i386: floating point limit constants misinterpreted due to excess precision
1139  - powerpc: broken thread pointer access when compiled with clang
1140  - microblaze: dynamic linker entry point code possibly clobbering argv
1141  
1142  strict conformance issues:
1143  - NULL definition re-aligned with POSIX (requires (void *) cast)
1144  - alignment of math.h is* comparison functions with C11 annex F requirements
1145  
1146  
1147  
1148  1.0.0 release notes
1149  
1150  new features:
1151  - support for mips softfloat ABI variant
1152  - legacy setkey and encrypt API for DES
1153  - support for BSD version of struct tcphdr in addition to GNU version
1154  - added ipv6 and icmpv6 protocol lookups to getprotoent-family functions
1155  
1156  new experimental ports:
1157  - sh (SuperH)
1158  - x32 (ILP32 ABI for x86_64)
1159  
1160  compatibility:
1161  - improved c89 compiler support in math.h
1162  - eliminate some compiler warnings in public headers
1163  - added some missing things for LFS64 APIs
1164  - added fallback emulation of accept4 for older kernels
1165  
1166  bugs fixed:
1167  - buffer overflow in printf when printing smallest denormal exactly
1168  - rounding errors in printf in some just-over-halfway cases
1169  - posix_spawn did not accept null pid pointer (crashed)
1170  - ftello gave incorrect result for unflushed append-mode streams
1171  - mishandling of n=0 case in wcsxfrm (wild buffer overrun)
1172  - possible system breakage during libc upgrade due to install.sh bugs
1173  - nftw FTW_MOUNT flag prevented walking any directories at all
1174  - ptsname/ptsname_r returned negated error codes
1175  - getprotoent function returned junk after listing valid protocols
1176  - wrong error code from readdir when the directory has been deleted
1177  - various prototype/argument-type fixes, mostly to legacy functions
1178  - various header namespace violations
1179  
1180  arch-specific bugs fixed:
1181  - fesetenv(FE_DFL_ENV) was broken on i386 and x86_64
1182  - strerror(EDQUOT) did not work on mips
1183  - recvmsg/sendmsg were broken on powerpc
1184  - sysv ipc was broken on powerpc and mips
1185  - statfs/statvfs were broken on mips
1186  - sigaltstack was broken on mips
1187  
1188  
1189  
1190  1.1.0 release notes
1191  
1192  new features:
1193  - relro memory protection in dynamic linker
1194  - malloc can now extend heap with mmap if brk fails
1195  - vdso clock_gettime/gettimeofday/time acceleration on x86_64
1196  - thread/library-safe versions of search.h functions (nonstandard)
1197  - getauxval function (nonstandard)
1198  - sysconf extensions to query physical memory size
1199  
1200  bugs fixed:
1201  - floating point printf output corruption from carry into uninitialized slot
1202  - possible runaway carry overflow in printf floating point
1203  - printf %g failure to strip trailing zeros in some cases
1204  - search past end of haystack in memmem
1205  - off-by-one error in confstr return value
1206  - crashes in some near-empty static programs that use stack protector
1207  - deadlock race in pthread_once
1208  - non-working clock_gettime fallback for old kernels
1209  
1210  arch-specific bugs fixed:
1211  - crash from missing syscall asm register clobbers on real microblaze kernel
1212  - crash in all nontrivial dynamic linker use on microblaze
1213  - incorrect rlimit constants on mips
1214  - broken, possibly dangerous, use of getrlimit syscall on x32 in sysconf
1215  
1216  
1217  
1218  1.1.1 release notes
1219  
1220  new features:
1221  - new options --preload and --library-path to dynamic linker
1222  - public execvpe function (nonstandard extension)
1223  - iconv support for cp437 and cp850
1224  
1225  bugs fixed:
1226  - false negatives with some periodic needles in strstr, wcsstr, and memmem
1227  - crash on invalid zoneinfo files
1228  - incorrect zero-padding of some outputs for strftime %s specifier
1229  - misreporting of errors in configure script when $CC does not work at all
1230  - treating not-yet-implemented strptime specifiers as errors
1231  
1232  compatibility:
1233  - configure now detects serious constant-folding bug in gcc 4.9.0
1234  - removed __yield symbol (unused) that clashed with some compilers
1235  - improvements to sysconf's handling of unsupported/invalid arguments
1236  
1237  arch-specific bugs fixed:
1238  - misdetection of superh ABI variant by configure on gcc 3.x
1239  - missing SO_RCVBUFFORCE and SO_SNDBUFFORCE in mips socket.h
1240  - build regression on armv6 and later with -mthumb
1241  
1242  
1243  
1244  1.1.2 release notes
1245  
1246  new features:
1247  - multi-protocol matches (tcp and udp) in getaddrinfo
1248  - support for AI_V4MAPPED and AI_ALL flags to getaddrinfo
1249  - reverse name lookups from /etc/hosts
1250  - reverse service lookups from /etc/services
1251  - support for service aliases in /etc/services
1252  - ipsec and tunneling protocols to getprotoent-family functions
1253  - res_send, res_mkquery, res_querydomain, and dn_comp functions
1254  - ipv6 scope id handling for link-local scope addresses
1255  - previously-unimplemented %C and %y in strptime now work
1256  - vdso clock_gettime acceleration on i386 (new kernel feature)
1257  - better O_CLOEXEC/SOCK_CLOEXEC fallbacks for old kernels
1258  
1259  bugs fixed:
1260  - buffer overflow in dns response parsing (CVE-2014-3484)
1261  - possible infinite loop in dns response parsing
1262  - sendfile off_t 32/64-bit size mismatch
1263  - incorrect end pointer in some cases when wcsrtombs stops early
1264  - incorrect if_nametoindex return value when interface does not exist
1265  - dummy "ent" function aliases that possibly shadowed real ones
1266  - tmpfile fd leak on memory exhaustion
1267  - getaddrinfo returning EAI_NONAME for some transient failures
1268  
1269  arch-specific bugs fixed:
1270  - broken kernel side RLIM_INFINITY on mips
1271  - incorrect syscall argument 6/7 types for pselect on x32
1272  
1273  
1274  
1275  1.1.3 release notes
1276  
1277  new features:
1278  - address sorting in getaddrinfo, etc. modeled on rfc 3484/6724
1279  - default timezone taken from /etc/localtime when $TZ is unset
1280  - getopt double-colon extension for optional arguments
1281  - support for TLSDESC-based (gnu2) TLS dialect on i386 and x86_64
1282  - sendmmsg/recvmmsg (linux-specific)
1283  - fmtmsg (last mandatory XSI function that was missing)
1284  
1285  compatibility:
1286  - treat dns rcode=2 as temporary failure, not negative result
1287  - working thread-pointer for pre-2.6 kernels on i386
1288  - further ABI-compat symbols: __xmknod[at], __sysv_signal
1289  
1290  bugs fixed:
1291  - memmem false positives/false negatives/crashes from invalid logic
1292  - gethostby*_r not setting result pointer to null on failure
1293  - aliasing violations in syscall.h SYSLOG_NAMES feature
1294  - fanotify_mark syscall arguments wrong
1295  
1296  arch-specific bugs fixed:
1297  - various subtle relocation bugs in powerpc and sh dynamic linker
1298  
1299  
1300  
1301  1.1.4 release notes
1302  
1303  new features:
1304  - experimental locale support for LC_MESSAGES and LC_TIME
1305  - non-stub gettext family functions for message translation
1306  - or1k (OpenRISC 1000) port
1307  - syslog options LOG_CONS and LOG_PERROR
1308  - issetugid function (from OpenBSD)
1309  - improved if_nameindex and getifaddrs functions
1310  
1311  compatibility:
1312  - work around bug #61144 in gcc 4.9.0 and 4.9.1
1313  - support getauxval(AT_SECURE) even on kernels without AT_SECURE
1314  
1315  bugs fixed:
1316  - empty dynamic linker error messages (regression in 1.1.3)
1317  - if_nameindex omitted unconfigured and ipv6-only interfaces
1318  - incorrect return value for fwide function
1319  - failure of wide printf/scanf functions to set wide orientation
1320  - multiple issues in legacy function getpass
1321  - dynamic linker did not accept colon as a separator for LD_PRELOAD
1322  - errno clobber in syslog caused wrong output for %m specifier
1323  - crash in regexec for nonzero nmatch argument with REG_NOSUB
1324  - minor bugs in rarely-used nl_langinfo item lookups
1325  
1326  arch-specific bugs fixed:
1327  - broken relocations in mips dynamic linker (regression in 1.1.3)
1328  - register state corruption in setjmp asm for microblaze
1329  - broken struct stat st_ino field on microblaze
1330  - broken struct stat st_dev field on big endian mips
1331  - broken asm register constraints in atomics on powerpc
1332  - missing barriers in atomics on mips, powerpc, microblaze, and sh
1333  
1334  
1335  
1336  1.1.5 release notes
1337  
1338  new features:
1339  - full C11 coverage (threads, UTF-16/32 API, timespec_get, etc.)
1340  - malloc_usable_size function (nonstandard)
1341  - support for new F_OFD_* fcntl operations (linux 3.15, POSIX-future)
1342  - new _DEFAULT_SOURCE feature test macro to request default profile
1343  
1344  performance:
1345  - private-futex support
1346  - redesigned cond var implementation with major performance improvement
1347  - tweaked spinning in userspace before performing futex waits
1348  
1349  bugs fixed:
1350  - failure of dn_expand to null-terminate name for crafted DNS packets
1351  - corruption of cond var mutex state when switching mutexes
1352  - use of uninitialized memory with application-provided thread stacks
1353  - false ownership of orphaned mutexes due to tid reuse
1354  - possible failure-to-wake for robust mutexes on owner death
1355  - subtle errors in robust mutex unrecoverable status handling
1356  - missing memory/compiler barrier spinning to obtain locks
1357  - wrong behavior in various zero-length stdio operations
1358  - buffer overflow in swab with odd argument
1359  - incorrect sequence generation in the rand48 family of prng functions
1360  - missing cancellation check in non-wait paths of sem_wait, pthread_join
1361  - missing barrier in pthread_once fast path
1362  - memory leak in regexec when input contains illegal sequence
1363  - various parser bugs in regcomp
1364  - wrong return value on overflow in some strtoul-family functions
1365  - broken CPU_EQUAL macro in sched.h
1366  - dlerror not working in static-linked programs
1367  - mishandling of negative non-whole-hour TZ offsets
1368  - incorrect case mappings for U+00DF
1369  - namespace pollution via accidentally-non-static function named "dummy"
1370  - missing __fpclassifyl and __signbitl definitions for ld64 archs
1371  
1372  
1373  
1374  1.1.6 release notes
1375  
1376  new features:
1377  - getopt '-' flag for processing non-option arguments
1378  - getopt_long argument permutation extension
1379  - getopt_long abbreviated options
1380  - ns_parserr and related DNS-packet-parsing functions
1381  - fnmatch FNM_CASEFOLD extension
1382  - support for translation of getopt error messages
1383  - login_tty function (legacy)
1384  
1385  performance:
1386  - efficient atomics on armv7+ targets
1387  - pthread_once shrink-wrapping of fast path
1388  
1389  compatibility:
1390  - baseline arm binaries now work on new cpus/kernels without kuser_helper
1391  - dynamic linker now honors DT_RUNPATH without DT_RPATH (new binutils)
1392  - arm asm is now compatible with clang's internal assembler
1393  - suppress macro implementations of functions when headers are used in C++
1394  - increased message length limit for syslog
1395  
1396  bugs fixed:
1397  - open ignored file creation mode argument for O_TMPFILE
1398  - wrong printf formatting for %#.0o with value zero
1399  - missing private state for uchar.h functions (null ps pointer)
1400  - sched_getaffinity left uninitialized data in output bit array
1401  - wrong return values for pthread_getaffinity_np and pthread_setaffinity_np
1402  - buggy handling of multibyte option chars with arguments in getopt
1403  - printf failed to report or stop on write errors
1404  - printf failed to honor '+' modifier when printing NANs
1405  - wcsnrtombs returned the wrong value in one code path
1406  - syslog failed to check for connect error
1407  - multi-threaded set*id() had spurious failures from ugly workaround code
1408  - various minor header conformance bugs (signedness, constant expressions, ...)
1409  
1410  arch-specific bugs fixed:
1411  - on or1k, some syscalls with 64-bit arguments were broken (misaligned)
1412  - usage of sahf instruction on x86_64 crashed on some early cpu models
1413  
1414  
1415  
1416  1.1.7 release notes
1417  
1418  new features:
1419  - alternate passwd/group backend support via nscd protocol
1420  - masked cancellation mode extension (experimental)
1421  - aio cancellation
1422  - aarch64 port (experimental)
1423  
1424  performance:
1425  - significant memset asm optimizations on i386 and x86_64
1426  
1427  compatibility:
1428  - suppress EINTR in semaphores for old kernels where futex restart is broken
1429  - always set optarg in getopt_long
1430  - support SOCK_RAW socket type in getaddrinfo
1431  - report success instead of EINPROGRESS when close is interrupted
1432  
1433  bugs fixed:
1434  - multithreaded set*id() was not async-signal safe, had various race bugs
1435  - getspnam_r returned results for partial username matches
1436  - wordexp bad character checker mis-counted parentheses
1437  - close on fd with pending aio could lead to file corruption
1438  - old aio implementation had numerous conformance bugs
1439  - malloc init code could deadlock due to race condition
1440  - pthread_exit did not disable cancellation
1441  - pthread_cond_wait could wrongly consume signal on cancellation
1442  - execvp wrongly stopped path search on EACCESS
1443  - fsync, fdatasync, and msync were not honored as cancellation points
1444  - fchmodat was subject to fd leak race (missing O_CLOEXEC)
1445  - fchmodat failed to report EOPNOTSUPP in race path
1446  - passwd/group lookup functions had various minor error-reporting bugs
1447  - isatty had false-positives/device-state-corruption for OSS sound devices
1448  - configure script failed to detect gcc with translated messages
1449  - FLT_ROUNDS macro failed to reflect rounding mode changes in fenv
1450  
1451  arch-specific bugs fixed:
1452  - mips fesetenv did not handle FE_DFL_ENV
1453  - mips POLLWRNORM and POLLWRBAND macros had wrong values
1454  - x32 pthread synchronization object type definitions were wrong
1455  - powerpc minimum signal stack size was insufficient
1456  
1457  
1458  
1459  1.1.8 release notes
1460  
1461  bugs fixed:
1462  - stack-based buffer overflow in inet_pton (CVE-2015-1817)
1463  - regcomp crash/mem-corruption with illegal bytes after backslash
1464  - regcomp wrongly allowed backrefs in ER
1465  - regcomp miscompiled character class brace-repetitions
1466  - regcomp wrongly processed \0 as an unmatchable backref
1467  - new FLT_ROUNDS definition failed to work in C++ code
1468  
1469  arch-specific bugs fixed:
1470  - aarch64 was missing max_align_t definition
1471  
1472  
1473  
1474  1.1.9 release notes
1475  
1476  new features:
1477  - ability to protect libc code itself with stack protector
1478  - sigsetjmp now restores signal mask after restoring context, not before
1479  - thread-local dlerror status/messages
1480  - dlerror messages are no longer truncated
1481  - diagnostics for constraint violations with ctype.h macros
1482  
1483  optimizations:
1484  - reduce cost of PIC on archs where PLT calls need a fixed GOT register
1485  - spin locks no longer constantly invalidate cache lines while spinning
1486  - code size reduction in static-linked TLS init
1487  
1488  bugs fixed:
1489  - failure to process robust mutexes on detached-thread exit
1490  - possible memory corruption due to robust mutex list on detached-thread exit
1491  - crash on memory exhaustion in getgr* internals
1492  - misaligned memory accesses in static binaries with low-alignment TLS blocks
1493  - multiple cases of wrongful path search continuation after transient failure
1494  - small memory leak on failure of dlopen with RPATH $ORIGIN
1495  - several small math bugs related to exception flags with non-finite args
1496  - mmap leak in sem_open failure path for link call
1497  - duplocale clobbered new locale struct with memcpy of old
1498  - futimes crashed with null timeval argument
1499  
1500  arch-specific bugs fixed:
1501  - stack protector spuriously aborted after forking on x32
1502  - stack protector spuriously aborted with flockfile on powerpc
1503  - theoretically-possible clobbering of syscall return value on mips
1504  - random thread-pointer setup failure on sh (uninitialized return value)
1505  - possible crash in dlsym on sh due to incorrectly-computed branch target
1506  - broken fesetenv(FE_DFL_ENV) on mips
1507  - dynamic linker name for sh ignored fpu/nofpu and endianness
1508  - various minor aarch64 bugs
1509  - dangling pointers in x32 syscall timespec fixup code
1510  
1511  
1512  
1513  1.1.10 release notes
1514  
1515  new features:
1516  - fail-safe (allocation-free) C locale for newlocale to return
1517  - all locale categories track requested locale name
1518  - rcrt1.o start file for static PIE
1519  
1520  optimizations:
1521  - inline atomics for sh4a
1522  - removed heavy atomics from locale-related code paths
1523  - removed global data accesses from CURRENT_LOCALE macro & callers
1524  - dynamic linker stage 1 size reduction
1525  
1526  compatibility:
1527  - better configure detection of unsupported compiler options
1528  - support for more relocation types in libc.so, not currently used
1529  - iconv_open accepts "" and "CHAR" as aliases for native (UTF-8)
1530  - additional LFS64 macros in sys/resource.h
1531  
1532  regressions fixed:
1533  - dynamic linker crash on NONE-type relocations (only mips affected)
1534  - inability to build as thumb2 on arm
1535  - failure to run under qemu-i386 user-level emulation
1536  - inability to access globals from libc on powerpc
1537  - PIE link errors in Scrt1.o under unusual usage on some archs
1538  
1539  other bugs fixed:
1540  - failure of ungetc/ungetwc to work on FILE streams in EOF state
1541  - possible null pointer dereference in gettext
1542  - possible initial stack misalignment on mips with PIE
1543  
1544  
1545  
1546  1.1.11 release notes
1547  
1548  new features:
1549  - byte-based C locale
1550  - vdso clock_gettime on arm
1551  - musl-clang wrapper
1552  - sh2 nommu target support
1553  
1554  performance:
1555  - major speed-up for dynamic linker symbol lookups with GNU hash
1556  
1557  compatibility:
1558  - strverscmp now matches GNU behavior in corner cases
1559  - empty TZ environment variable gives GMT rather than system default
1560  - reconnection on syslog server socket loss (syslogd restart)
1561  - mmap fallback in simple_malloc when brk fails
1562  - support for %m and %s with null pointers in wide printf variants
1563  - call frame information in i386 asm for improved debugger support
1564  
1565  bugs fixed:
1566  - spurious errors from pwd/grp functions when nscd backend is absent
1567  - possible invalid access on calloc with simple_malloc
1568  - null pointer dereferences after calling uselocale((locale_t)0)
1569  - erroneous support for cancellation in stdio caused data loss
1570  - inconsistent handling of atexit called from atexit handler
1571  - missing locking in error paths for ungetwc
1572  - btowc mishandling of out-of-range non-EOF inputs
1573  - negated return value of ns_skiprr, failure in related functions
1574  - incorrect void return type for syncfs, missing error status
1575  - possible failure of tempnam due to missing null termination
1576  - negated tm_gmtoff field in struct tm
1577  - off-by-one error in getsubopt leaving equals sign in value result
1578  
1579  arch-specific bugs fixed:
1580  - soft deadlocks on i386/x86_64 due to missing barrier in internal locks
1581  - regression in arm pre-v7 support for kernels with kuser helper removed
1582  - runaway PC on mips detached thread exit (due to kernel regression)
1583  - mismatched ABI for local-dynamic model TLS on mips and powerpc
1584  - incorrect value of some SO_* constants on mips
1585  - broken 64-bit syscall argument passing on aarch64
1586  
1587  
1588  
1589  1.1.12 release notes
1590  
1591  new features:
1592  - fdpic abi on sh2 for shareable text segment without mmu
1593  - general fdpic elf support in dynamic linker
1594  - CFI generation for x86_64 asm source files
1595  - protection against silently building a libc.so with missing symbols
1596  
1597  compatibility:
1598  - nl_langinfo(CODESET) now returns "ASCII" in byte-based C locale
1599  - fixed build regression due to buggy .SECONDARY in some GNU make versions
1600  - additional arm eabi functions needed by llvm arm backend
1601  - added format argument attributes to gettext function prototypes
1602  - static PIE no longer requires linking with -E/-rdynamic
1603  - eliminated spurious protected-data warnings linking against libc.so
1604  - avoided spurious fpu asm errors with some armhf toolchains
1605  
1606  bugs fixed:
1607  - fclose of stdin/stdout caused deadlock at exit
1608  - missing memory barrier in pthread_join
1609  - open_[w]memstream produced no buffer when no writes took place
1610  - uninitialized scopeid in address lookups from hosts file and ip literals
1611  - ip literals for mismatching family (v4 vs v6) were queried as hostnames
1612  - possible crash on OOM in regcomp
1613  - incorrect contents in localeconv structure (-1 instead of CHAR_MAX)
1614  - strftime mishandling of out-of-range struct tm members
1615  - wrongful attribute((const)) on pthread_self and errno location function
1616  
1617  arch-specific bugs fixed:
1618  - arm crt1 entry point failed to align stack pointer in some cases
1619  - mips fesetround failed to actually set rounding mode
1620  - i386 asm source CFI generation had multiple bugs
1621  
1622  
1623  
1624  1.1.13 release notes
1625  
1626  new features:
1627  - out-of-tree builds
1628  - search domains in resolv.conf
1629  - sh arch supports j-core (j2) cas.l atomics
1630  - dynamic linker includes arch/abi in output when run as a command
1631  - header support for new kernel features through linux 4.4
1632  - mips vdso clock_gettime support
1633  - regex BRE extensions: \|, \+, \?
1634  
1635  performance:
1636  - improved atomics performance on all archs with ll/sc model
1637  - atomic instructions are now inlined on armv6
1638  - use fpu sqrt for arm softfp abi on targets with vfp
1639  
1640  compatibility:
1641  - getnameinfo now accepts sockaddr sizes larger than needed
1642  - new default CFLAGS/LDFLAGS avoid entire classes of toolchain bugs
1643  - explicit use of float_t/double_t avoids compiler float spill bugs
1644  - i386 max_align_t definition now works with g++ 4.7's pseudo-c++11
1645  - all known protocols are added to protoent functions
1646  - stub utmpname, utmpxname functions
1647  - linker support for -Bsymbolic-functions is no longer mandatory
1648  - regex parsing size limits increased
1649  - malloc_usable_size now accepts null pointer input
1650  
1651  bugs fixed:
1652  - potential single-byte heap overflow in getdelim
1653  - mishandling of transient failure opening hosts, services, resolv.conf
1654  - mremap was sometimes able to allocate objects larger than PTRDIFF_MAX
1655  - nl_langinfo wrongly returned NULL instead of "" for invalid items
1656  - out-of-bounds dynamic tls allocation due to pointer/index scaling error
1657  - getifaddrs misreported point-to-point interface addresses
1658  - tdelete left tsearch trees misbalanced
1659  - tsearch crashed on allocation failure
1660  - tsearch, tfind, and tdelete failed to handle null pointer input
1661  - passing signal number 0 to sigaction resulted in a crash
1662  - getdelim updated caller's size wrongly when realloc failed
1663  - getdelim realloc strategy was wasteful
1664  - if_nametoindex returned wrong value on failure
1665  - missing ssp-suppression for some source files called from early-init
1666  - various minor resolv.conf parsing bugs
1667  - fwrite wrongly reported success on write errors in line-buffered flush
1668  - fwrite and fread wrongly returned nmemb (not 0) when size was 0
1669  
1670  nommu-specific bugs fix:
1671  - failure to zero bss in FDPIC shared library loader
1672  - unsafe writes to read-only file mapping in non-FDPIC library loader
1673  
1674  arch-specific bugs fixed:
1675  - sh[eb]-nofpu-fdpic was using fpu-dependent setjmp/longjmp variants
1676  - dynamic linker path file name was wrong for arm "softfp" targets
1677  - mips siginfo_t and related macros were defined incorrectly
1678  - possibly misaligned pointer globals on arm (from an asm source file)
1679  - mips dynamic linker failed to provide info needed by debugger
1680  - mips cancellation asm wrongly assumed validity of $gp register value
1681  
1682  
1683  
1684  1.1.14 release notes
1685  
1686  regressions fixed:
1687  - treatment of empty string argument as error by puts and fputs
1688  - make clean and distclean failure in unconfigured trees
1689  - sh/fdpic dynamic linker entry point hang due to wrong code
1690  - armhf (and arm softfp model) build failure with clang
1691  
1692  other bugs fixed:
1693  - wrongly clamping (rather than failing) excessive rounds in crypt-sha*
1694  
1695  
1696  
1697  1.1.15 release notes
1698  
1699  new features:
1700  - mips64 (full 64-bit and n32) port
1701  - mips r6 isa support (subarch for mips, mips64, and mipsn32 archs)
1702  - powerpc64 port
1703  - powerpc (32-bit) soft-float ABI support (subarch)
1704  - pthread_tryjoin_np and pthread_timedjoin_np (nonstandard extensions)
1705  - header-level support for linux 4.5 and 4.6 features
1706  - sched_getcpu (nonstandard extension) support, including vdso version
1707  - __STDC_ISO_10646__, __STDC_IEC_559__ macros predefined via stdc-predef.h
1708  - support for new elf/arch features in elf.h
1709  
1710  compatibility:
1711  - configure now correctly chooses cross-prefix based on build/host/target
1712  - abort now successfully terminates pid 1 in a container (or top-level)
1713  
1714  bugs fixed:
1715  - memmem read past end of haystack, possible false positives or crashes
1716  - buffer underflow (reverse-overflow) in ungetwc
1717  - double-free under certain usage of putenv
1718  - incorrect treatment by regcomp of * at start of BRE subexpression
1719  - gethostbyname[2][_r] produced ip addresses in misaligned buffers
1720  - looking up some invalid hostnames caused malformed dns queries
1721  - lookups from hosts file were inconsistent with non-matching family
1722  - missing h_length value in gethostbyaddr results
1723  - a64l function produced wrong-signed results on 64-bit archs
1724  - broken padding of string formats to width in wide printf variants
1725  - wrong results for expf(-NAN) and exp2f(-NAN)
1726  - wrong value for RUSAGE_CHILDREN prevented it from working
1727  - abort failed to provide abnormal termination with SIGABRT blocked
1728  
1729  arch-specific bugs fixed:
1730  - broken posix_fadvise on arm and powerpc (32-bit)
1731  - thread structure/dtv corruption on powerpc at thread startup
1732  - various wrong mips and powerpc ioctl and termios constant values
1733  
1734  
1735  
1736  1.1.16 release notes
1737  
1738  new features:
1739  - s390x (64-bit S/390) port
1740  - pthread_setname_np extension function
1741  - limited pthread_setattr_default_np function to set stack size defaults
1742  - header-level support for linux 4.7, 4.8, and 4.9 features
1743  - confstr _CS_V6_ENV and _CS_V7_ENV items
1744  
1745  compatibility:
1746  - public prototypes for abi-compat *_unlocked symbols, etc.
1747  - fflush_unlocked(NULL) now works
1748  - resolv.h __RES version macro now matches supported APIs
1749  - workaround for gdb bugs backtracing across signals on x86_64
1750  - anchors ^ and $ are now accepted in BRE subexpressions
1751  - building for thumb2-only arm isa levels is now possible
1752  
1753  bugs fixed:
1754  - integer overflows in regexec buffer allocation (CVE-2016-8859)
1755  - failure of regexec to report matches at offsets past INT_MAX
1756  - static-pie executables with initialized thread-local storage crashed
1757  - printf failed to catch EOVERFLOW in some cases, wrongly produced it in others
1758  - printf produced wrong output, result for float with precision near INT_MAX
1759  - printf produced wrong results with alt-form octal, zero flag, & field width
1760  - printf float rounding was wrong for some midpoint cases
1761  - swprintf printed junk after internal (256-byte) buffer filled up
1762  - strtod family rounded incorrectly in several corner cases
1763  - getmntent failed to handle long records
1764  - getopt_long_only wrongly treated "--" as an option
1765  - asctime output wrongly varied by locale
1766  - strftime %y specifier produced wrong output for negative tm_year
1767  - time zone names quoted with <> were misparsed
1768  - corner case integer overflow in tm_year for some date conversions
1769  - failure to load shared libs whose names were prefixes of standard lib names
1770  - wrong error codes for several failure cases in various functions
1771  - various asymptomatic undefined behavior
1772  - various minor namespace issues in headers
1773  
1774  arch-specific bugs fixed:
1775  - tcsetattr regression on mips (completely non-working)
1776  - wrong pread/pwrite syscall calling convention on sh
1777  - wrong preadv2/pwritev2 syscall numbers on x32
1778  - mrand48/jrand48 produced wrong-signedness results on 64-bit archs
1779  
1780  
1781  1.1.17 release notes
1782  
1783  new features:
1784  - RTLD_LAZY deferred symbol binding, functionally equivalent to lazy binding
1785  - safeguard against dlopen of multiple libc versions/instances
1786  - new posix_spawn flag POSIX_SPAWN_SETSID
1787  - posix_spawnattr_setflags now reports unknown flags as error
1788  - ldso option --argv0 to set argv[0]
1789  - added _NL_LOCALE_NAME extension to nl_langinfo
1790  
1791  compatibility:
1792  - dlopen local-to-global promotion no longer changes existing symbols
1793  - gettext now searches locale name variants for translation files
1794  - increased locale name length limit from 15 to 23 bytes
1795  - setlocale(LC_ALL, 0) returns single name if all categories are same
1796  - realloc no longer fails when mremap doesn't work
1797  - getservby* no longer treat numeric port strings as service records
1798  - mmap now works around incorrect EPERM error codes from kernel
1799  - impact of REG_* namespace pollution in x86[_64] signal.h is reduced
1800  - arm atomic asm now assembles correctly with new binutils
1801  - PAGE_SIZE on arm is no longer constant (quiet upstream ABI relaxation)
1802  - lsearch/lfind now pass args to compare callback in canonical order
1803  - STB_WEAK and STB_GNU_UNIQUE symbols now behave same as STB_GLOBAL
1804  - better clang CFLAGS checks in configure
1805  - global vis.h hack, which made lld refuse to link to libc.so, is disabled
1806  
1807  performance:
1808  - single-instruction optimized math functions for aarch64, s390x, powerpc64
1809  - fast path for ASCII in towupper/towlower
1810  - new mostly-integer-math fma function
1811  
1812  semantic bugs fixed:
1813  - POSIX-format TZ dst time transitions were wrong for southern hemisphere
1814  - regex REG_NEWLINE semantics were wrong with negated brackets
1815  - various bugs in strptime %j, %p, %C formats
1816  - iconv mapped some characters to legacy 8bit encodings incorrectly
1817  - glob failed to match "/"
1818  - UTF-8 decoder accepted invalid f4 9x xx xx code sequences
1819  - scanf %% conversion failed to consume whitespace
1820  - glob with GLOB_PERIOD wrongly descended into . and ..
1821  - nftw gave incorrect base name offset when pathname ends in "/"
1822  - functional regression in resolv.conf attempts option
1823  - scalbn could produce wrong result due to double rounding in subnormal range
1824  - strftime %y format wrong with negative years
1825  - mbsnrtowcs and wcsnrtombs mishandled input limits
1826  - minor issues with error codes for various functions
1827  
1828  safety/consistency bugs fixed:
1829  - stack-based buffer overflow in dns response processing
1830  - invalid free in regexec on certain error paths
1831  - invalid free in globfree after failed glob
1832  - one-byte buffer overflow in legacy getpass function
1833  - failed dlopen corrupted thread-local storage module list
1834  - race in pthread_create with priority attributes could leave signals masked
1835  - multithreaded set*id() functions could induce spurious EINTRs
1836  - dl_iterate_phdr reported wrong base address in static PIE
1837  - fd leak and wrong cancellation state after dns socket failure
1838  - memory leaks and other issues in environment-modification functions
1839  - read-after-free race in pthread_detach
1840  - memmem performed single-byte over-read in short-needle code paths
1841  - read via uninitialized pointer in gettext core
1842  - bindtextdomain broke bindings for all other domains
1843  - various silent undefined behavior
1844  - getopt clobbered optopt on success
1845  
1846  arch-specific bugs fixed:
1847  - x32 dynamic TLS accesses crashed
1848  - s390x was missing dlsym entry point (needed for RTLD_NEXT)
1849  - powerpc64 ldso startup could crash depending on link order
1850  - powerpc64 setjmp/longjmp didn't properly save/restore TOC pointer
1851  - thumb2 setjmp/longjmp silently broke at ld-time with text not aligned
1852  - fchown was broken on archs without SYS_fchown syscall
1853  - fstatat was broken on mips64
1854  - various incorrect constants in powerpc64 and mips headers
1855  
1856  
1857  1.1.18 release notes
1858  
1859  regression fixes:
1860  - glob failed to match literal . and .. path components
1861  - build for armv4t ISA level was broken
1862  
1863  other bug fixes:
1864  - stack overflow in posix_spawnp with large PATH variable in environment
1865  
1866  
1867  1.1.19 release notes
1868  
1869  new features:
1870  - iconv framework for processing stateful encodings
1871  - iconv support for iso-2022-jp
1872  - iconv support for converting to legacy JIS-based Japanese encodings
1873  - iconv support for UTF-16/32 with BOM-determined endianness
1874  - iconv ibm1047 (ebcdic latin1-equivalent) support
1875  - iconv cp866 (dos cyrillic) support
1876  - character data tables & case mappings updated to Unicode 10.0
1877  - fopencookie stdio extension
1878  - strftime padding character extensions
1879  - header-level support for new linux features through 4.13
1880  
1881  compatibility:
1882  - UTC timezone is now called UTC instead of GMT
1883  - _DIRENT_HAVE_D_* macros in dirent.h
1884  - dladdr dli_fbase definition now matches other implementations
1885  - pthread_getattr_np now reports guard size
1886  - strftime '+' modifier better matches apparent intent of POSIX
1887  - getopt_long handles long option names containing '='
1888  - better compatibility with linux uapi headers
1889  - workaround linux bug where getcwd can return non-absolute pathname
1890  - configure logic for finding compiler_rt with clang
1891  - execvp path search now continues after ENOTDIR components
1892  
1893  bugs fixed:
1894  - fgetwc failed when character crossed buffer boundary
1895  - memory corruption after failing to dlopen a second libc
1896  - sysconf reported infinite rlimits incorrectly
1897  - getopt_long --opt=arg did not work with partial matches
1898  - printf was wrong for alt-form octal with value 0, no explicit precision
1899  - endian errors in arpa/nameser.h and netinet/icmp6.h (missing endian.h)
1900  - atfork handler could clobber fork's errno
1901  - iconv could wrongly output surrogate pairs in ucs2
1902  - fmemopen buffer underallocation with extreme size argument
1903  - getaddrinfo AI_NUMERICSERV wrong error code
1904  - data race in at_quick_exit
1905  - ldd failed to honor rpath $ORIGIN for program in . without "./" prefix
1906  
1907  arch-specfic bugs fixed:
1908  - x32 unistd.h wrongly reported LP64 instead of ILP32
1909  - aarch64 signal.h had wrong type for ucontext_t uc_link member
1910  
1911  
1912  1.1.20 release notes
1913  
1914  new features:
1915  - m68k port
1916  - replacement of malloc is now allowed/supported
1917  - setvbuf now accepts caller-provided buffers for stdio streams
1918  - getrandom syscall wrapper, getentropy function
1919  - mlock2 syscall wrapper
1920  - memfd_create syscall wrapper
1921  - explicit_bzero function
1922  - header-level support for new linux features through 4.17
1923  - wcsftime now supports padding specifier extensions
1924  - dynamic linker's reclaim_gaps now works on fdpic archs
1925  - getaddrinfo now honors AI_ADDRCONFIG
1926  - pthread_attr_init now honors pthread_setattr_default_np defaults
1927  
1928  hardening:
1929  - prevent bypass of guarantee that suids start with fd 0/1/2 open
1930  - dlopen now rejects libraries with initial-exec refs to dynamic TLS
1931  
1932  compatibility:
1933  - elf.h: new flags, aux vector entry types, etc.
1934  - minor namespace issues in several headers
1935  - intNN_t types used in bitfields now safe against -funsigned-bitfields
1936  - complex arc trig/hyperbolic functions were badly broken
1937  - nice function returned wrong value
1938  - stdio locks no longer depend on read-after-free not faulting
1939  - avoid excessive stack usage in getcwd
1940  - inet_ntop no longer compresses single zeros in IPv6 (RFC 5952)
1941  - resolver routability probe for sorting results works on no-IPv6 systems
1942  - added missing ST_RELATIME definition to statvfs.h
1943  - uchar.h now works with old C++ profiles
1944  - added missing and arch-specific commands to ptrace.h
1945  - musl-gcc wrapper now works with default-pie host toolchains
1946  
1947  bugs fixed:
1948  - getopt wrongly treating colons in optstring as valid option chars
1949  - nl_langinfo_l(CODESET, loc) reported wrong locale's value
1950  - out-of-tree build produced broken crt files with stack protector enabled
1951  - fmaf produced wrong result for some corner cases
1952  - out of bounds write for zero length buffer passed to gethostname
1953  - getopt_long_only wrongly prefix-matched long-options over short ones
1954  - pthread_kill wrongly returned ESRCH for exited by valid pthread_t's
1955  - iconv buffer overflow converting to legacy JIS-based encodings
1956  - iconv conversion to "UTF-32" (no explicit endianness) failed (regression)
1957  - iconv mishandled big5-hkscs characters that map to two unicode chars
1958  - dynamic linker didn't map/clear bss for libraries with single LOAD segment
1959  - resolver wrongly duplicated trailing dot from query into canonical name
1960  - some futex waits omitted timeout arg to syscall, thereby spun on EFAULT
1961  - dladdr mishandled addresses not matching symbols
1962  - alignment of dirent structures from readdir was broken (regression)
1963  - strftime %z output wrong sign for offsets <1 hour west of UTC
1964  - limits.h, pathconf erroneously defined SYMLINK_MAX
1965  - FP_ILOGB0 and FP_ILOGBNAN definitions were not valid for use in #if
1966  - getopt failed to update optarg and optind correctly on missing argument
1967  - EMULTIHOP error lacked strerror text
1968  - mktime malfunctioned with tm_isdst>0 but no-DST POSIX-format time zone
1969  - async thread self-cancellation produced a deadlock condition
1970  - pthread_barrierattr_setpshared failed to produce EINVAL for bad argument
1971  - fileno failed to produce EBADF for non-fd-associated FILEs
1972  - fmemopen's w+ mode failed to truncate buffer at open
1973  - open_[w]memstream did not bind stream orientation at open time
1974  - system wrongly returned 0x7f00 instead of -1 on error
1975  - wide printf functions ignored field width for %c formats
1976  - fprintf failed to set stream orientation for unbuffered stream or no output
1977  - psignal, psiginfo, and perror wrongly set stream orientation for stderr
1978  - psignal, psiginfo potentially clobbered errno on success
1979  
1980  arch-specfic bugs fixed:
1981  - on arm/aarch64/sh, local-exec TLS layout mismatched ABI with large align
1982  - on arm/microblaze/sh, struct ipc_perm mismatched (buggy) kernel ABI
1983  - SO_PEERSEC definition was wrong on mips
1984  - on mips, return from start function passed to clone crashed (runaway exec)
1985  - printf %a precision specifier malfunctioned except on ld80 archs
1986  - async thread cancellation crashed on powerpc64 and sh-fdpic
1987  
1988  
1989  1.1.21 release notes
1990  
1991  new features:
1992  - setting default thread stack size via PT_GNU_STACK program header
1993  - arm vfork implementation
1994  - arm tlsdesc/gnu2 tls dialect support
1995  - name_to_handle_at and name_to_handle_at syscall wrappers
1996  - header-level support for new linux features through 4.18
1997  
1998  optimizations:
1999  - glob rewrite with much better performance and stack usage properties
2000  - single-threaded and already-locked fast paths for getc/putc variants
2001  - single-instruction fma implementations for arm, s390x, powerpc, & x86_64
2002  - single-instruction fabs and sqrt implementations for powerpc
2003  - size and performance from making all internal-only functions/data hidden
2004  - made &errno and pthread_self results cachable again (attribute((const)))
2005  - significant speedup in strtod with short inputs
2006  - new tsearch AVL tree implementation, smaller and faster
2007  - special-cased nop calls to wmemmove
2008  - fixed erroneously suboptimal skip conditions in strstr and memmem
2009  
2010  hardening:
2011  - default thread stack guard size increased from 4k to 8k
2012  
2013  compatibility:
2014  - default thread stack size increased from 80k to 128k
2015  - building for arm as thumb2 with clang internal assembler now works
2016  - aio threads could overflow stack on kernels that break MINSIGSTKSZ ABI
2017  - aio threads no longer call malloc (problematic with malloc replacement)
2018  - pthread_sigmask/sigprocmask now ignore an invalid how when not changing mask
2019  
2020  bugs fixed:
2021  - soft deadlock regression in stdio FILE locks with >2 threads contending
2022  - deadlock and buffered data loss race in fclose
2023  - race condition leading to possible crash in dcngettext plural forms
2024  - glob failed to see past searchable-but-unreadable path components
2025  - getdelim wrongly realloc'd buffer that was already exactly right size
2026  - getdelim failed to set stream orientation on early error
2027  - ttyname[_r] reported wrong error when given bad fd
2028  - pthread_key_delete left old tsd values exposed if slot was reused
2029  - freeaddrinfo failed to support freeing sublists
2030  - access to optopt was broken by copy relocations
2031  - memccpy returned wrong result if first byte past buffer end matched
2032  - wordexp read past end of input string ending in backslash
2033  - sem_wait and sem_timedwait were wrongly not interruptible by signals
2034  - getspnam[_r] wrongly treated not-found as an error
2035  
2036  arch-specfic bugs fixed:
2037  - soft deadlocks (missing futex wake) on powerpc locking
2038  - dlsym returned wrong address for thread-local symbols on ppc/mips/m68k
2039  
2040  
2041  1.1.22 release notes
2042  
2043  new features:
2044  - priority-inheritance mutexes
2045  - membarrier syscall, pre-registration to use it, fallback emulation
2046  - header-level support for new linux features in 4.19, 4.20, 5.0
2047  
2048  major internal changes:
2049  - complete, async-safe view of all existent threads as global list
2050  - robust __synccall based on new thread list
2051  - new dynamic TLS is installed synchronously at dlopen
2052  - TLSDESC resolver functions no longer make bad ABI assumptions to call C
2053  - resolved shared library dependencies are now recorded
2054  
2055  compatibility & conformance:
2056  - dependency-order shared library constructor execution
2057  - sigaltstack no longer rejects SS_AUTODISARM, future flags
2058  - FILE is now a complete (dummy) type in pre-C11 feature profiles
2059  - setvbuf reports failure on invalid arguments
2060  - TSVTX is exposed unconditionally in tar.h
2061  - multithreaded set*id() no longer depends on /proc
2062  - key slot reuse after pthread_key_delete no longer depends on /proc
2063  
2064  bugs fixed:
2065  - failures in multithreaded set*id() with concurrent thread creation/exit
2066  - interposed free was called from invalid/inconsistent contexts
2067  - freeaddrinfo performed invalid free of some partial results lists
2068  - dlsym dependency order search had false negatives and false positives
2069  - dn_skipname gave wrong results for labels with 8-bit content
2070  - dcngettext clobbered errno, often breaking printing of error messages
2071  - sscanf read past end of buffer under certain conditions (1.1.21 regression)
2072  - pthread_key_create spuriously failed under race condition (1.1.21 regression)
2073  - fdopendir wrongly succeeded with O_PATH file descriptors
2074  - gets behaved incorrectly in presence of null bytes
2075  - namespace violations in c11 tsd and mutex function dependencies
2076  - incorrect prototype for makecontext (unimplemented)
2077  
2078  arch-specfic bugs fixed:
2079  - s390x had wrong values for POSIX_FADV_DONTNEED/_NOREUSE
2080  
2081  
2082  
2083  1.1.23 release notes
2084  
2085  new features:
2086  - riscv64 port
2087  - configure now allows customizing AR and RANLIB vars
2088  - header-level support for new linux features in 5.1
2089  
2090  major internal changes:
2091  - removed extern __syscall; syscall header code is now fully self-contained
2092  
2093  performance:
2094  - new math library implementation for log/exp/pow
2095  - aarch64 dynamic tlsdesc function is streamlined
2096  
2097  compatibility & conformance:
2098  - O_TTY_INIT is now defined
2099  - sys/types.h no longer pollutes namespace with sys/sysmacros.h in any profile
2100  - powerpc asm is now compatible with clang internal assembler
2101  
2102  changes for new POSIX interpretations:
2103  - fgetwc now sets stream error indicator on encoding errors
2104  - fmemopen no longer rejects 0 size
2105  
2106  bugs fixed:
2107  - static TLS for shared libraries was allocated wrong on "Variant I" archs
2108  - crash in dladdr reading through uninitialized pointer on non-match
2109  - sigaltstack wrongly errored out on invalid ss_size when doing SS_DISABLE
2110  - getdents function misbehaved with buffer length larger than INT_MAX
2111  - set*id could deadlock after fork from multithreaded process
2112  
2113  arch-specfic bugs fixed:
2114  - s390x SO_PEERSEC definition was wrong
2115  - passing of 64-bit syscall arguments was broken on microblaze
2116  - posix_fadvise was broken on mips due to missing 7-arg syscall support
2117  - vrregset_t layout and member naming was wrong on powerpc64
2118  
2119  
2120  
2121  1.1.24 release notes
2122  
2123  new features:
2124  - GLOB_TILDE extension to glob
2125  - non-stub catgets localization API, using netbsd binary catalog format
2126  - posix_spawn file actions for [f]chdir (extension, pending future standard)
2127  - secure_getenv function (extension)
2128  - copy_file_range syscall wrapper (Linux extension)
2129  - header-level support for new linux features in 5.2
2130  
2131  performance:
2132  - new fast path for lrint (generic C version) on 32-bit archs
2133  
2134  major internal changes:
2135  - functions involving time are overhauled to be time64-ready in 32-bit archs
2136  - x32 uses the new time64 code paths to replace nasty hacks in syscall glue
2137  
2138  compatibility & conformance:
2139  - support for powerpc[64] unaligned relocation types
2140  - powerpc[64] and sh sys/user.h no longer clash with kernel asm/ptrace.h
2141  - select no longer modifies timeout on failure (or at all)
2142  - mips64 stat results are no longer limited to 32-bit time range
2143  - optreset (BSD extension) now has a public declaration
2144  - support for clang inconsistencies in wchar_t type vs some 32-bit archs
2145  - mips r6 syscall asm no longer has invalid lo/hi register clobbers
2146  - vestigial asm declarations of __tls_get_new are removed (broke some tooling)
2147  - riscv64 mcontext_t mismatch glibc's member naming is corrected
2148  
2149  bugs fixed:
2150  - glob failed to match broken symlinks consistently
2151  - invalid use of interposed calloc to allocate initial TLS
2152  - various dlsym symbol resolution logic errors
2153  - semctl with SEM_STAT_ANY didn't work
2154  - pthread_create with explicit scheduling was subject to priority inversion
2155  - pthread_create failure path had data race for thread count
2156  - timer_create with SIGEV_THREAD notification had data race getting timer id
2157  - wide printf family failed to support l modifier for float formats
2158  
2159  arch-specific bugs fixed:
2160  - x87 floating point stack imbalance in math asm (i386-only CVE-2019-14697)
2161  - x32 clock_adjtime, getrusage, wait3, wait4 produced junk (struct mismatches)
2162  - lseek broken on x32 and mipsn32 with large file offsets
2163  - riscv64 atomics weren't compiler barriers
2164  - riscv64 atomics had broken asm constraints (missing earlyclobber flag)
2165  - arm clone() was broken when compiled as thumb if start function returned
2166  - mipsr6 setjmp/longjmp did not preserve fpu register state correctly
2167  
2168  
2169  
2170  1.2.0 release notes
2171  
2172  new features:
2173  - time_t is now 64-bit on all archs (not just 64-bit archs)
2174  - character type & case mapping data updated to Unicode 12.1.0
2175  - header-level support for new linux features in 5.3 and 5.4
2176  
2177  performance:
2178  - new O(1) wchar_t case mapping implementation
2179  - i386 now uses C math code for exp, faster than old asm
2180  - mips math asm
2181  
2182  compatibility & conformance:
2183  - endian.h now aims to conform to future POSIX definition
2184  - support older compilers that don't accept powerpc math asm constraints
2185  - fdpic code in ldso was incompatible with valid optimizations in gcc 9+
2186  - RLIMIT_RTTIME was missing from sys/resource.h
2187  
2188  bugs fixed:
2189  - wcwidth wrongly returned 0 for most of planes 4 and up
2190  - missing case mapping between U+03F3 and U+037F
2191  - wrong cacosh results for arguments with negative imaginary part
2192  - wrong catanf/catanl results for various classes of arguments
2193  - wrong return value for ungetc with argument outside [0,UCHAR_MAX]
2194  - posix_openpt with no ptys available produced wrong errno
2195  
2196  arch-specific bugs fixed:
2197  - sigcontext/regset definition mistakes & omissions on m68k, powerpc64
2198  - fesetenv(FE_DFL_ENV) crashed on riscv64
2199  - sh2 dynamic linker was broken since 1.1.21 (crash in stage 2b)
2200  - arm dynamic linker chose wrong tls/atomic variants since 1.1.21
2201  - some math library functions returned excess precision on i386
2202  - unconfirmed regression in fchmodat AT_SYMLINK_NOFOLLOW on mips*
2203  
2204  
2205  
2206  1.2.1 release notes
2207  
2208  major changes:
2209  - new malloc implementation (mallocng & overhauled bump allocator)
2210  
2211  new features:
2212  - DNS queries via res_* now set AD flag, report zone signedness (DNSSEC)
2213  - PTHREAD_NULL macro (POSIX-future)
2214  
2215  performance:
2216  - optimized memcpy and memset for aarch64
2217  - optimized memcpy for arm now supports big endian
2218  - optimized x86_64 remquol
2219  - improved strerror without linear search
2220  
2221  bugs fixed:
2222  - lock-skipping for processes that returned to single-threaded was wrong
2223  - AF_UNSPEC dns lookups mishandled single failure in paired A+AAAA
2224  - res_send and res_query returned wrong value on errors from nameserver
2225  - corrupted sysvipc timestamps on 32-bit archs with old kernels
2226  - incorrect parsing of timezone offsets after overly-long zone name
2227  - clock_adjtime was broken on 32-bit archs (time64)
2228  - pthread_kill as not async-signal-safe
2229  - pthread_cancel was not async-cancel-safe
2230  - large-ulp errors in various math functions in non-default rounding modes
2231  
2232  arch-specific bugs fixed:
2233  - arm clock_gettime was broken on some hw due to bad time64 vdso
2234  - m68k sqrtl lacked long double precision
2235  - mips* syscall mechanism regressions on older kernels
2236  - mips* had negated error codes for some syscalls (kernel bug)
2237  - mips* SIGEMT was wrongly called SIGSTKFLT
2238  - sh fesetround didn't work correctly on sh
2239  
2240  
2241  
2242  1.2.2 release notes
2243  
2244  major changes:
2245  - child restrictions lifted after fork of multithreaded parent
2246  
2247  new features:
2248  - _Fork function (POSIX-future)
2249  - reallocarray function (extension from OpenBSD, now widespread)
2250  - gettid function (kernel tid as supported concept)
2251  - SIGEV_THREAD_ID sigevent API (Linux extension)
2252  - tcgetwinsize and tcsetwinsize functions (POSIX-future)
2253  
2254  performance:
2255  - faster software sqrt on archs without native sqrt instruction
2256  
2257  compatibility:
2258  - realpath no longer depends on procfs availability & accuracy
2259  - time zone parser now always prefers 64-bit tables if present
2260  - crypt_blowfish now supports $2b$ prefix
2261  - res_query now reports errors via h_errno
2262  - set*id and setrlimit are now safe in vforked/cloned child
2263  - setgroups now applies to all threads
2264  - dlopen debugger notification is improved, should work with lldb
2265  - setrlimit no longer needs __synccall broadcast on linux 2.6.36+
2266  - faccessat with AT_EACCESS no longer needs child process on linux 5.8+
2267  
2268  bugs fixed:
2269  - buffer overflow and infinite loop errors in wcsnrtombs (CVE-2020-28928)
2270  - sem_close unmapped still-referenced semaphores
2271  - fork of process with active aio could deadlock or crash paren
2272  - pthread_cond_wait was broken with priority-inheritance mutex
2273  - getgrouplist wrongly failed when nscd reported an empty list
2274  - abort could leak modified SIGABRT disposition to fork or posix_spawn child
2275  - regression with mallocng: malloc_usable_size(0) crashed
2276  - readlink wrongly gave EINVAL on zero length dest buffer
2277  - sqrtl was severely inaccurate (not correctly rounded) on ldquad archs
2278  - assert failure wrongly flushed stdio (possible deadlock)
2279  - MUSL_LOCPATH search was broken with multiple components
2280  - missing newline in herror output
2281  - possible deadlock in pthread_exit with pshared mutex or barrier usage
2282  - pthread_mutexattr_getprotocol didn't read back protocol
2283  - v4l2 ioctl translation for pre-time64 kernels didn't work
2284  
2285  arch-specific bugs fixed:
2286  - x86_64 longjmp failed to handle 0 argument reliably
2287  - i386 __set_thread_area fallback for pre-2.6 kernels didn't work
2288  - missing O_LARGEFILE macro value on x86_64, x32, mips64
2289  - unpredictable s390x breakage from failure to preserve call-saved registers
2290  
2291  
2292  
2293  1.2.3 release notes
2294  
2295  new features:
2296  - qsort_r function (POSIX-future)
2297  - pthread_getname_np extension function
2298  - hard float on SPE FPU for powerpc-sf
2299  - SEEK_DATA and SEEK_HOLE exposed in unistd.h (Linux extensions)
2300  
2301  compatibility:
2302  - free now preserves errno (POSIX-future requirement)
2303  - setjmp is declared explicitly with returns_twice for non-GCC compilers
2304  - macro version of isascii is no longer defined for C++
2305  - dynamic linker now tolerates zero-length LOAD segments
2306  - epoll_[p]wait is now a cancellation point
2307  - pwd/grp functions no longer fail on systems without AF_UNIX support
2308  - POSIX TZ parsing is stricter to allow more names to fallback to files
2309  - NULL is now defined as nullptr when used in C++11 or later
2310  - gettext now accepts null pointer as argument
2311  
2312  bugs fixed:
2313  - old regression in wcwidth of Hangul combining (vowel/final) letters
2314  - duplocale used wrong malloc when malloc was replaced (1.2.2 regression)
2315  - fmaf rounded wrong on archs without FE_TOWARDZERO (all softfloat archs)
2316  - popen didn't honor requirement not to leak other popen pipe fds to child
2317  - aligned_alloc and variants crashed on allocation failure
2318  - dl_iterate_phdr reported incorrect module TLS pointers
2319  - mishandling of some inputs in acoshf and expm1f and functions using them
2320  - potentially wrong-sign zero in cproj functions at infinity
2321  - multiple bugs in legacy function cuserid
2322  - minor posix_spawn file actions API conformance issues
2323  - pthread_setname_np fd leak
2324  - out-of-bound read in zoneinfo handling with distant-past times
2325  - out-of-tree builds lacked generated debug cfi for x86 asm
2326  
2327  arch-specific bugs fixed:
2328  - powerpc (32-bit) struct shmid_ds layout was wrong for some fields
2329  - time64 struct layout was wrong in sound ioctl fallback (32-bit archs)
2330