work around regression building for armhf with clang (compiler bug)
[musl.git] / WHATSNEW
blob935c0bb343c81b0f849a191532eb925313e22e64
1 0.5.0 - initial release
5 0.5.9 - signal ABI bugfix, various cleanup and fixes:
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.
12 improved security against DoS with tcb shadow passwords by checking
13 that the file opened was really an ordinary file.
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).
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.
25 many internal improvements have been made to the syscall-related code
26 in preparation for porting to x86_64 and other archs.
30 0.6.0 - x86_64 port, various important bugs fixed
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.
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.
40 fixed an inefficiency in qsort that triggered a bug (occasionaly
41 internal compiler error) in some versions of gcc.
43 fixed a major bug in the printf %n specifier that prevented it from
44 working and caused memory corruption.
48 0.7.0 - major improvements to posix conformance and completeness
50 implemented posix shared memory and semaphore interfaces.
52 implemented all remaining required pthread and clock interfaces.
54 major fixes to signal semantics.
56 greatly improved temporary file name generation for safety against
57 denial of service due to intentional name collisions.
59 added syscall wrappers for the linux inotify interface.
61 malloc(0) now returns a non-null pointer.
63 fixed printf %n specifier (again), pthread_once (it was always
64 hanging), and non-default-type mutex behavior.
66 added ucontext/sigcontext support in headers to facilitate building
67 libgcc with dwarf2 unwind support, and possibly other low-level tools.
69 improved musl-gcc compiler wrapper.
71 implemented many small missing functions here and there, minor header
72 fixes, etc.
76 0.7.1 - improvements to completeness, bug fixes
78 implemented flockfile, wprintf, and robust mutex functions.
80 fixed stack corruption bug in times(), minor header bugs, and some
81 error return value bugs in thread interfaces.
85 0.7.5 - new features, major optimization, and robustness
87 implemented POSIX timers.
89 optimized and simplified many thread-related functions.
91 eliminated resource leak races in thread cancellation. (almost all
92 existing implementations, including glibc, have these leaks.)
94 overhauled stdio implementation to take advantage of readv/writev for
95 reduced syscall load, and improved stdio's handling of error status.
97 added syscall header and interface for applications to use and
98 greatly simplified internal system for making syscalls.
100 strangthened tmpnam/tempnam/tmpfile filename generation and made the
101 straight C functions not depend on POSIX symbols.
103 fixed pthread cancellation ABI on i386 to match the LSB/glibc ABI
105 better double-free handling in malloc
107 various minor bug fixes
111 0.7.6 - major bug fixes
113 fixed rare but serious under-allocation bug in malloc.
115 fixed signedness bug in strchr that prevented finding high bytes.
117 fixed serious parsing bugs in strtold.
119 fixed statvfs syscall (it was always failing with EINVAL).
121 fixed race condition in set*id() functions with threads (possible
122 deadlock). further audit still needed though.
124 fseek no longer sets the stream error flag on failed seeks (this was
125 wrong and broke some programs, notably GNU m4).
127 nl_langinfo is no longer a dummy function. (the functionality was
128 previously implemented but accidentally left unused).
130 various small fixes have been made to the implementations and
131 prototypes for nonstandard and obsolete functions
135 0.7.7 - more bug fixes and program-compatibility improvements
137 fixed floating point formatting and rounding bugs in printf.
139 fixed broken %N$ positional argument specifiers in printf.
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.
146 fixed breakage of statvfs on x86_64
148 fixed crash in getmntent_r
150 fixed bug in POSIX timers created with NULL sigevent argument
152 improved semaphore performance, and sem_wait is now interruptable by
153 signals, as required by POSIX.
155 added many compatibility and system-level interfaces, increasing the
156 proportion of busybox that works with musl.
160 0.7.8 - more bug fixes and compatibility improvements
162 fixed problems with ipv6 dns and address printing code that made ipv6
163 support practically unusable, and some other getaddrinfo bugs.
165 fixed broken sendmsg/recvmsg functions on x86_64 (caused by incorrect
166 msghdr structure).
168 fixed broken sigsetjmp asm on x86_64.
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.
173 various improvements to the "rsyscall" system used to implement
174 threaded setuid, setgid, etc.
176 exiting/cancelling the a timer handler thread no longer kills the
177 timer.
179 fixed incorrect trailing zeros on some %g conversions in printf.
181 fixed buggy byte-swapping functions and moved them to inlines in
182 byteswap.h.
184 many small improvements to header/application compatibility, support
185 for nonstandard macros, etc.
189 0.7.9 release notes
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
197 new interfaces implemented:
198 - realpath (limited functionality)
199 - wordexp (limited functionality)
200 - flock (nonstandard)
201 - forkpty (nonstandard)
202 - posix_fadvise
203 - posix_fallocate
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
218 x86_64-specific bug fixes:
219 - fcntl file locking
220 - thread stack alignment
221 - broken select timeouts due to incorrect timeval definition
225 0.7.10 release notes
227 new features:
228 - ipv6 numeric string parsing
229 - eventfd syscall wrappers
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
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
244 compiler issue workarounds:
245 - incorrect inlining of variadic functions on recent gcc versions
246 - pcc preprocessor bug with recursive macro expansion
250 0.7.11 release notes
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)
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
272 0.7.12 release notes
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)
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
288 0.8.0 release notes
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
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
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
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
331 0.8.1 release notes
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
340 0.8.2 release notes
342 new features:
343 - ptrace syscall support
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
351 0.8.3 release notes
353 new features:
354 - arm port (experimental)
355 - better musl-gcc wrapper script for building against musl
356 - added clone system call
358 bug fixes:
359 - numerous header file typos, copy/paste errors, omissions
360 - statfs and statvfs ABI are now LSB-conformant (and actually work)
364 0.8.4 release notes
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)
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
391 security:
392 - avoid fd_set overflow in dns lookups
396 0.8.5 release notes
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
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
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)
431 0.8.6 release notes
433 bug fixes:
434 - fix crash in dns lookups for all static-linked, non-threaded programs
438 0.8.7 release notes
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
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)
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"
462 0.8.8 release notes
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
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
481 critical security fixes:
482 - stack-based buffer overflow in fprintf on unbuffered files
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
496 0.8.9 release notes
498 bug fixes:
499 - major breakage in strtol and family: failure to accept leading spaces
500 - incorrect name for MATH_ERREXCEPT in math.h
502 compatibility:
503 - prototypes for a few additional nonstandard functions
507 0.8.10 release notes
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
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
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
535 0.9.0 release notes
537 license change: MIT
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
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
558 optimization:
559 - additional x86_64 math asm
560 - better formula for acos use in i386 asm
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
570 0.9.1 release notes
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
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
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
604 0.9.2 release notes
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
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
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.
648 0.9.3 release notes
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
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
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)
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)
683 0.9.4 release notes
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
695 performance:
696 - assembly (string ops based) memcpy for i386 and x86_64
697 - reduce printf overhead
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
712 0.9.5 release notes
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
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
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
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
744 0.9.6 release notes
746 bug fixes:
747 - serious breakage in definition of O_ACCMODE mask (missing a bit)
749 new features:
750 - O_EXEC open mode
751 - md5 crypt hash function
755 0.9.7 release notes
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
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
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
786 0.9.8 release notes
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
796 compatibility:
797 - improved headers for trace/debugging/machine-access
798 - stub functions for unsupported thread-related functionality
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
813 0.9.9 release notes
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.
821 optimizations:
822 - hyperbolic, inverse hyperbolic, and inverse trig, bessel functions
823 - is* comparison macros in math.h now expand inline properly
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
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
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
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
869 0.9.10 release notes
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)
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
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
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
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
921 0.9.11 release notes
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)
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
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)
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
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
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)
964 0.9.12 release notes
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
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
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
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
1003 0.9.13 release notes
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
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)
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
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
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
1058 0.9.14 release notes
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
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
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)
1088 0.9.15 release notes
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)
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
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
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
1148 1.0.0 release notes
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
1156 new experimental ports:
1157 - sh (SuperH)
1158 - x32 (ILP32 ABI for x86_64)
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
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
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
1190 1.1.0 release notes
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
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
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
1218 1.1.1 release notes
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
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
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
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
1244 1.1.2 release notes
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
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
1269 arch-specific bugs fixed:
1270 - broken kernel side RLIM_INFINITY on mips
1271 - incorrect syscall argument 6/7 types for pselect on x32
1275 1.1.3 release notes
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)
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
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
1296 arch-specific bugs fixed:
1297 - various subtle relocation bugs in powerpc and sh dynamic linker
1301 1.1.4 release notes
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
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
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
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
1336 1.1.5 release notes
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
1344 performance:
1345 - private-futex support
1346 - redesigned cond var implementation with major performance improvement
1347 - tweaked spinning in userspace before performing futex waits
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
1374 1.1.6 release notes
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)
1385 performance:
1386 - efficient atomics on armv7+ targets
1387 - pthread_once shrink-wrapping of fast path
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
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, ...)
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
1416 1.1.7 release notes
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)
1424 performance:
1425 - significant memset asm optimizations on i386 and x86_64
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
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
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
1459 1.1.8 release notes
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
1469 arch-specific bugs fixed:
1470 - aarch64 was missing max_align_t definition
1474 1.1.9 release notes
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
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
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
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
1513 1.1.10 release notes
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
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
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
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
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
1546 1.1.11 release notes
1548 new features:
1549 - byte-based C locale
1550 - vdso clock_gettime on arm
1551 - musl-clang wrapper
1552 - sh2 nommu target support
1554 performance:
1555 - major speed-up for dynamic linker symbol lookups with GNU hash
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
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
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
1589 1.1.12 release notes
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
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
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
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
1624 1.1.13 release notes
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: \|, \+, \?
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
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
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
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
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