A changelog for uClibc 0.9.27->0.9.28.

Rob Landley rob at landley.net
Thu Jul 27 16:22:59 PDT 2006

(I'd like to thank Timesys for giving me several days to work on this.)


Development of uClibc 0.9.28 involved 563 patches (svn 9690 through
svn 11186) over a period of seven months.  Important changes include:

Lots of architecture upgrades.  Fixes and upgrades for arm, PPC, mips, CRIS,
Blackfin, 68k, sparc, alpha, sh, and sh64.  Add support for x86-64, sh2a, and
ARM1136JF-S.  Some cleanups (such as svn 10060) touch all architectures.
Add PIE support and thumb support for ARM.  Several fixes for 64 bit support.
Better support for nommu platforms (improved mmap behavior in malloc-generic 
and a vfork() that actually calls the kernel's vfork(), not fork()).

A security fix (svn 9998) for dynamic linking of suid apps.

Numerous improvements to system calls.  For example, some architectures only
have a umount2 call, uClibc now emulates the older umount using umount2()
when necessary.  Only include uselib(), bdflush(), and pivot_root() on
architectures that support them.  Add fadvise(), fadvise64(), clock_getres(),
clock_settime(), and CLOCK_MONOTONIC.  Fix nice() return code to comply with
SUSv3.  Make strptime() only modify specified struct tm fields.  Return
multiple IP addresses in h_addr_list for round-robin DNS resolution.  Add
nanosecond support to stat.  Fix abort() to actually abort when SIGABRT has
a handler registered.  Upgrade memctl(), semctl(), and shmctl() to use new
64 bit interfaces and define __IPC_64.  Upgrade lots of headers (many under
net/*, plus elf.h, errno.h, string.h, sys/sysmacros.h...  Remove namespace
pollution like AUTOCONF_INCLUDED).  Support 6-argument syscalls.  Fix a
segfault in glob().  Catch output errors in vfprintf().  Use getcwd()
syscall where appropriate.

Better dynamic linking support.  Fixes, upgrades, and cleanups to to libdl
and ldso.  Can now run execute ldso (like glibc), and libdl can handle
libraries with circular dependencies.  RPATH is searched before
LD_LIBRARY_PATH and RUNPATH after, and these paths should work even if they
starts with a ":".  Extensive updates to entry/exit code, with new _init and
_fini processing and improved atexit() behavior.  Migrate all platforms from
crt0 to crt1.  Calculate envp in C rather than platform-specific asm.  Export

Several threading fixes and upgrades (threads and gdb, threads and signals, 
speed up threads on PPC, etc).

Numerous build fixes.  Better dependency checking, support for parallel
builds, and fixes for building out of tree.  General simplification and
removal of dead code.  Better support for cross compiling.  You can now
specify CROSS_COMPILER_PREFIX in .config, and that and CC can now contain
spaces.  Add utils directory to make clean.  Cleanup warnings with
newer compilers, and build breaks where gcc 4.x would refuse to compile code
that worked under gcc 3.x.  When installing headers, create symlink for
asm-$TARGET_ARCH if it exists.

Lots of debugging upgrades.  Support for propolice stack smashing protection.
Humor gdb's idiosyncrasies on mips and PowerPC.  Lots of work on the built-in
test suite in uClibc, a new framework, cross-compile support, and changes to
numerous tests.

There are now man pages for ldconfig.8 and ldd.1.  The menuconfig code was 
updated to the version used in the 2.6.11 Linux kernel.

Here are one line summaries of the individual changes that weren't just 

9690: CRIS fix.
9693: propolice
9708: add #ifdef _NR_uselib (build fix)
9709: add #ifdef _NR_bdflush (build fix)
9710: Some archs only have umount2.
9712: Allow ldconfig to build non-static.
9714: Allow $(CROSS) and $(CC) to contain spaces.
9716: Add posix fadvise and fadvise64
9722: portability fix for use of realtime posix timers with threads
9723: Building out of tree, RANLIB
9724: Parallel builds.
9726: Dependencies
9727: Dependencies
9728: Dependencies
9729: Dependencies, makefile ifs
9730: RANLIB (what's RANLIB?)
9731: Dependencies
9732: Dependencies
9733: Parallel builds.
9734: Undo breakage from 9716
9735: makefile ifs
9736: Cleanup warnings.
9739: Dependencies
9741: Dependencies
9742: Dependencies
9762: Emulate umount() with umount2() when necessary.  (See 9710)
9770: Build tweak for libdl.
9770: Parallel builds.
9783: Parallel builds.
9784: Cross-compiling fix: Use HOSTCC for setting up the syscall list.
9785: Fix for debugging threads on ppc with gdb.
9788: Fix for threads and signals.
9789: threads
9790: Cross-compiling fix: use targetcc to rebuild sysnum.h
9791: Threads and gdb
9792: Threads and gdb
9795: update scripts/getent
9815: propolice/ssp /dev/erandom
9818: propolice: document /dev/erandom support in ssp.
9820: Better help text.
9825: Cris threads fix.
9826: Cris crt0 fix.
9827: Fix for old (pre C99) compilers in printf.
9843: Speed up threads on PPC
9864: Makefile fix (cross compiling)
9865: x86_64 fix
9866: x86_64 fix
9867: x86_64 fix
9872: Fix nice() return code to comply with susv3
9873: Proper fix for 9827
9874: x86_64 kconfig
9875: x86_64 headers
9876: x86_64 assembly
9877: more x86_64 assembly
9878: more x86_64
9879: more x86_64
9880: x86_64
9881: x86_64
9885: libdl fix
9886: libdl fix
9911: new blackfin header
9912: build fix for uClinux systems without pivot_root
9918: x86_64
9921: Add buildroot web page.
9926: Dependency fix for threading
9927: Dependency fix for libm
9939: umount again.
9941: Fix for wide characters intereacting with stack limits.
9943: bugfix in sem_timedwait()
9946: Dependency fix for libm
9977: Optimize floating point wrapper functions.
9982: add "make check" target.
9992: Optimize dynamic linking for ELF (PPC architecture).
9993: Portability fix for chown in makefile.
9997: Suppress warnings.
9998: Security fix for dynamic linking of suid apps.
9999: Generalize 9992
10000: Simplify dynamic linker.
10001: Suppress warning for MIPS.
10002: Fix 9999 for x86
10003: Fix 9999 for mips
10006: Fix 9999 for mips more.
10007: Fix 9999 for cris
10010: Documentation: Add MAINTAINERS list.
10013: Cross compiling (set CROSS in kconfig)
10015: move 10013 to CROSS_COMPILER_PREFIX
10016: m68k headers.
10017: m68k headers.
10018: m68k headers.
10020: m68k headers.
10021: m68k build fix.
10022: m68k headers.
10023: m68k syscalls.
10024: m68k works as a shared library.
10025: m68k build fix.
10026: m68k with MMU
10027: tweak complier flags (warnings)
10028: updates to net headers
10029: m68k bad fix (reverted in 10035)
10030: dependencies
10031: sparc
10032: sparc
10033: sparc
10034: sparc
10035: revert 10029
10036: standalone ldso, new mips asm.
10039: Fix ldso for mips.
10040: dependencies (make ldso.c depend on dl-startup.h)
10041: m68k cleanup.
10043: Remove dead code.
10044: ldso change preparing to move FINI handling to libc (atexit).
10045: More FINI shuffling.
10046: More FINI shuffling.
10047: Enable new FINI handling on i386.  (Breaks API, relink apps.)
10053: Prepare new FINI on powerpc.
10054: Enable new FINI on powerpc.
10055: fopen cleanup.
10056: menuconfig infrastructure fix.
10060: ldso shrink/speedup.
10064: sh
10066: sh64 updates and fixes.
10068: ldso shrink/speedup.
10069: mips syscall cleanup.
10071: standalone ldso for powerpc
10074: yank pthread_atfork() prototype (unimplemented, gone from glibc too)
10076: cris cleanup.
10084: ldso shrinkage.
10085: ldso cleanup.
10086: ldso fix.
10087: ldso debugging fix.
10088: cleanup debugging macros in dl-startup.c
10089: Don't write NULL in log.
10090: big change to libdl to fix ldso crash on ppc (bug 214).
10091: Disable early debug on mips (where it doesn't work)
10092: Further rework the mips syscalls.
10093: Fix mips ldso startup code.
10095: Add missing definition of DL_OPENED.
10105: sync elf.h with glibc-2.3
10106: more elf.h sync with glibc
10107: Fix openlog() (compatability with a brain-dead standard, see bug 195)
10108: Fix mkstemp/mktemp when no /dev/urandom (bug 116)
10131: sync lxdialog (menuconfig) with Linux 2.6.11.
10132: Sync the rest of menuconfig with 2.6.11.
10162: Cleanup library loading (ldso and libdl)
10167: Teach libdl to handle libraries circular dependencies.
10176: Move msgctl/semctl/shmctl to new 64-bit interfaces.
10184: Build fix for gcc-4.1.0.
10185: Documentation update, mq_ interfaces now available in librt.
10189: sh/sh64 simplification and build fix.
10192: Get rid of extern references to ldso variables.
10194: Replace makefile's explicit source file list with $(wildcard).
10195: Update bits/time.h to match glibc 2.3.4 (adds CLOCK_MONOTONIC)
10196: add clock_getres() and clock_settime().
10198: Make inet/resolv.c thread safe.
10199: Cleanup inet/resolv.c error handling.
10200: Make inet/resolv.c return multiple addresses via h_addr_list.
10221: Rename mips resolver to match gdb's expectations.
10222: Add sh2a architecture.
10223: Move sh64 to its own config.
10224: sh-4 has nommu variants.
10229: sh: work around gcc4 bug.
10230: Make rpc build under newer gcc.
10240: Update maintainer addresses.
10255: Config entry for NPTL.  No code yet.
10257: Import a ton of dead code from glibc that doesn't do anything yet.
10269: Yank obsolete TODO item.
10270: sh: fix trapa value for _syscall6() to conform to new sh syscall ABI.
10271: Bugfix so IPC code doesn't smash stack.
10282: Change strptime so it only modifies specified struct tm fields.
10283: Increase static buffer size in resolver to handle 21 DNS entries.
10284: Dead code elimination from sys/shm.h.
10290: Delete some of the nptl files from 10257.
10291: Delete more nptl files from 10257.
10292: Delete more nptl files from 10257.
10295: Delete an unused powerpc file.
10296: Teach svn to ignore a bunch of generated stuff.
10297: Teach svn to ignore more generated stuff.
10300: linuxthreads cleanup.
10301: Delete more nptl files from 10257.
10302: Delete more nptl files from 10257.
10303: Add a changelog to keep track of the nptl deleting.
10304: Delete more nptl files from 10257.
10305: Add a file to nptl, just for a change.
10306: Add include/atomic.h and bits/atomic.h to various architectures.
10324: Add ARM1136JF-S support.
10326: Makefile fix, set TARGET_ARCH correctly.
10327: Makefile fix, add missing file to clean list for mips.
10328: Build tweaks, symlink headers to select NPTL someday.
10329: Add TOPDIR prefix to config file when getting target arch.
10330: Update sigthread.h to match current glibc.
10331: Unify two pthreadtypes.h instances.
10332: delete a dead file.
10334: More NPTL header file symlink build tweaks.
10389: Delete all the NPTL stuff, move it to a branch.
10390: Revert more NPTL changes.
10391: Fix debug macros.
10392: Kill crt0, make everything use crt1.  Update 386 for new ABI.
10393. Update PPC for 10392.
10394: Enable new FINI processing.
10400: Adapt start code (_init and _fini) to look more like glibc.
10401: Prepare for standalone execution of ldso.
10409: Fix "off by one" bug in crt1.S
10410: Makefile tweak.
10411: Add PIE support to ARM.
10413: Calculate envp in C rather than per-platform asm.
10414: Fix PPC for 10413.
10415: Fix x86 for 10413.
10416: Cleanup i386/crt1.S
10417: Align stack ptr on PPC.
10418: Minor tweak for correctness in mips setjmp.
10419: Update mips crt1
10421: Update mips crt1 again.
10422: Humor gcc 4.x.
10423: propolice/ssp tweak.
10426: crt1.S tweak for i386
10427: crt1.S tweak for mips
10429: Fix propolice/ssp with threads.
10430: Make spinlock warning go away.
10431: Fix warnings.
10432: Remove -z defs from Makefile
10434: Add fini/crt adapter to run apps built against 0.9.27.
10443: Fix LD_LIBRARY_PATH to work if starts with :.
10445: Support for RPATH and RUNPATH.
10446: Debug printf in libdl.c.
10476: Tweak to ssp.
10498: Finish updating mips for the new ABI.
10499: Update arm for new ABI.
10501: Fix arm crt1.
10502: Fix arm crt1.
10503: asm changes for arm, mips, and ppc.
10504: arm linker fix.
10505: arm fix.
10506: arm fix.
10519: add nanosec fields to stat.
10544: #define _sys_siglist sys_siglist in include/signal.h
10560: Fix gcc 4.0 compilation for powerpc.
10588: libdl tweak.
10589: libdl tweak.
10590: Remove #ifdefs to make debug printfs more readable.
10592: More ldso debugging infrastructure.
10593: More ldso debugging infrastructure.
10594: More ldso debugging infrastructure.
10595: Fix arm PIE apps.
10598: use __PIC__ guard in arm code.
10599: use __PIC__ guard in ppc code.
10600: Delete dead file from powerpc.
10601: use __PIC__ guard in i386 and delete dead file.
10602: Fix stack_end in powerpc.
10603: arm fix.
10604: Add __libc_stack_end to ld.so.
10607: remove __IPC_64 from syscall macro.
10609: also symlink asm-$TARGET_ARCH if it exists.
10610: #ifdef out a check that always fails.
10611: Fix abort() to actually abort when SIGABRT has a handler.
10613: Tweak to remove warning when TZ is enabled.
10614: Always define __IPC_64 even on systems that don't have __NR_ipc.
10615: Typecast around a warning rather than actually fix it.
10616: More init/fini on i386.
10617: Migrate from crt0 to crt1 on x86_64.
10619: Add syscall error handling for x86_64.
10620: stat64 on x86_64.
10621: Update x86_64 Makefile.
10623: x86_64 startup code assembly syntax tweaks.
10625: Minor cleanup to ppc syscalls.h.
10626: Undo breakage from 10607.
10627: include features.h in i386 startup assembly code.
10628: include features.h in alpha and sh assembly.
10629: More init/fini on PowerPC.
10630: test suite tweak for 64 bit architectures.
10631: Makefile syntax tweak.
10632: Make testsuite use global .config.
10633: Simplify test suite makefiles.
10634: testsuite
10635: testsuite
10636: add __libc_stack_end.
10637: Bugfix for 10636.
10640: Build fix for gcc 4.1 (inlining)
10643: Use %p to display pointers to avoid worrying about sizeof(pointer).
10647: fix typecast for 64 bit pointers.
10650: Change Elf32_* to ElfW(*) (more 64 bit cleanups).
10652: Create generic ELF_* macros to hide 32/64 bit differences.
10653: Dependency tweaks for ldso and libdl build.
10654: Fix typo in umount2() emulation of umount()
10655: Remove pointless exit in makefile.
10656: Don't use relative paths for header files in makefile.
10657: testsuite (threading)
10658: testsuite
10659: testsuite (32/64 bit warnings)
10660: testsuite: Remove unused variable
10661: testsuite: warnings
10662: testsuite: warnings
10663: testsuite: build fix.
10664: testsuite: dependencies.
10665: testsuite: pretty output.
10666: testsuite: quiet arg_test.
10667: testsuite: check exit status.
10668: testsuite: compare uclibc and glibc results.
10669: testsuite: use CROSS_COMPILER_PREFIX.
10670: testsuite: s/GNU libc/glibc/
10671: update debug macros for libpthread.
10672: build tweak.
10673: add config option for enabling pthreads debug output.
10675: remove unused errno from x86_64 vfork.
10677: x86_64 include features.h
10678: x86_64 include features.h
10682: add errno to x86_64 clone.S
10683: x86_64 enable clone.S in the makefile
10688: sync x86_64/tls.h with glibc
10689: sync include/errno.h with glibc
10690: use C style comments in errno.h
10691: sync more headers with glibc.
10692: use __always_inline in dl-string.h
10694: use __always_inline in dl-elf.h and dl-string.h
10695: sync include/elf.h with glibc.
10696: new testcase for clone()
10697: testsuite: strip quotes from cross compiler prefix.
10698: testsuite: malloc exit code
10699: testsuite: new framework
10700: testsuite: move setjmp to new test framework.
10701: testsuite: move mmap to new framework.
10702: testsuite: move ctype to new framework.
10710: upgrade ldso to work with new helf header.
10711: armeb fixes
10717: testsuite: dlopen
10718: testsuite: realloc
10719: add __MALLOC_GLIBC_COMPAT__ determining whether malloc(0) returns NULL
10720: tweak x86_64 asm to use % as function marker instead of @
10724: dependencies for ldso
10725: x86_64 ldso
10726: i386 assembly syntax touchups
10727: yank features.h from clone.S i386 and x86_64
10728: i386 clone.S
10729: i386 assembly setting errno
10730: more features.h includes
10731: ELF wrapper macros
10732: include features.h in ldso
10733: consolidate debug code in ldso and libdl
10734: make RUNPATH/RPATH support configurable
10735: fix malloc-simple to do a sane mmap/munmap on nommu platforms.
10737: support 6 argument syscalls on i386.
10738: remove errno.h from vfork.S
10739: better errno handling in i386/clone.S
10740: x86_64 ldso
10742: add debug code for showing argc/argv/envp in ldso.
10743: cleanup architecture support in ldso.
10744: x86_64 fix ldso startup code.
10745: m68k add dl-debug.h
10746: sparc add dl-debug.h
10747: fix 10745
10748: fix 10746
10750: sparc Makefile tweak
10751: more debug macros
10753: x86_64
10754: ldso more debug output
10758: i386 assembly fix.
10759: x86_64
10760: testsuite: termios
10761: testsuite: stat
10762: testsuite: signal
10764: x86_64: use syscall6() version of mmap
10765: use syscall6() version of mmap in ldso
10766: ldso: use long instead of int to be 64-bit clean.
19767: sparc
10768: sparc: rewrite crt in asm.
10769: sparc
10770: sparc (drop envp)
10771: sparc: make crt1 handle both 32 and 64 bit
10772: sparc: use the small errno handling trick.
10773: remove unused __pthread_return_void function.
10776: alpha: update __UCLIBC_CTOR_DTOR__ check in crt0.
10777: alpha
10778: warn if arch is undefined in abort.c
10779: alpha: add to abort.c
10780: m68k: add to abort.c
10781: alpha: clone.S
10782: update TODO, what needs to be done for specific arches
10786: a debug macro should not modify the data it outputs
10787: ldso: don't truncate address on 64bit hosts.
10788: ldso: architecture portability fix for __rtld_stack_end
10789: debug tweak
10790: debug wrapper macro
10791: use debug print macros
10792: debug print macros
10793: tweak hash buckets
10794: x86_64: don't use void *, use actual pointer type.
10795: fix sefgault in glob.
10796: use debug macros
10810: ldso: tweak for the ELF spec.
10813: ldso: typo in ELF_ST_BIND macros.
10814: ldso: dump the address we transfer control to.
10823: x86_64: PIE support.
10824: x86_64: remove unused instructions.
10825: testsuite: use specific ldso
10826: x86_64: elfinterp.c
10832: x86_64: add a config.  Shared/ldso works, not threads yet.
10833: add nanosecond support to xstat.
10838: arm: work around ABI change between 2.4->2.6.
10839: arm: ensure stat64 struct is packed.
10840: add nanosecond support in bits/stat.h
10841: revert 10838: big endian arm kernels need patching.
10902: mips: fix errno from clone.S
10910: fix 2 bugs in strftime()
10915: update todo list
10916: TODO: alpha, x86_64 notes.
10924: testsuite: errno
10925: testsuite: stdlib
10926: i386: more fun with errno
10932: libdl: protect _dl_symbol_tables (bug 358)
10934: more fun with 64 bit sysvipc code.
10935: config option for abort() to shutdown stdio.
10936: fix string.h
10937: i386 build: tweak $TOPDIR to not have duplicate //
10938: i386: fix errno more.
10939: testsuite: check return value of clone call.
10940: x86_64: use common bits/sem.h
10941: build: add c to default arflags to remove warning.
10942: powerpc: cleanup bits/sem.h
10943: in bits/sem.h s/__kernel_time_t/__time_t/
10948: call fcntl64() from fcntl() when necessary if LFS is enabled.
10951: ldso build tweak
10952: build fix: get silent mode of make to shut up.
10955: build: clean up PIE flag checks
10956: build: export PIEFLAG and AS test so gcc/as not re-executed lots
10958: arm: take absolute value of negative errno.
10959: arm: nanosecond support in stat.
10960: build: remove unused include directory.
10961: arm: ARM926T is armv5, not armv4.
10963: build fix.
10964: revert 10963
10965: mips: fix bits/msq.h to announce IPC_64 support.
10966: mips: update mips/sgidefs.h
10967: catch output errors in vfprintf
10985: Check for __NR_fcntl64
10990: mips: fix pread/pwrite bugs reported by ltp.
10993: mips: fix for clone.S
11004: dependency fix.
11016: Do not define AUTOCONF_INCLUDED
11026: mips: POSIX requires that stat.h's st_dev and st_rdev be dev_t.
11027: mips: more header updates (sigaction)
11047: arm: use correct word order in floating point arithmetic.
11061: utils: use STRIPTOOL instead of compiler flags.
11063: sh: remove duplicated _syscall6 definitions.
11064: feed -s flag to STRIPTOOL
11069: sh: remove unused variables.
11070: sh: fix libm linking with new toolchains.
11071: sh: use sigprocmask.
11072: sh: update crt0->crt1.
11084: feed -s flag to STRIPTOOL in another place.
11087: elf.h header tweak.
11088: TODO: not architectures still in need of updating.
11089: header dependencies for parallel building.
11090: conditionally disable early debug code.
11093: sh: inline stuff.
11094: bump version number to 0.9.28 to prepare for release
11100: fix wide character support in headers.
11113: sign warnings
11114: i386: jump straight to __syscall_error
11115: undo 10954 
11116: touchup PIE support for all utils.
11122: i386: another __syscall_error case.
11123: revert __syscall_error change for clone.S
11124: remove hardcoded ld-uClibc.so.0 name in ldso
11142: remove the variable DYNAMIC_LINKER
11144: arm: import thumb support
11146: make clean should now clean utils directory.
11151: arm: thumb support (bug 385)
11152: arm: more thumb support.
11153: arm: move iopl support.
11154: arm: remove iopl #ifdef
11155: arm: more thumb support.
11156: move arch-specific checks from dl-syscall.h to arch-syscalls.h
11158: libdl: missing _dl_progname for static apps (bug 387)
11160: don't declare nonexistent BSD-style getloadavg() in headers.
11162: remove quote char which doesn't belong in dl-syscall.h
11163: put quote char back around bigger area in dl-syscall.h
11165: sort out getcwd() for current kernels vs old 2.0 behavior.
11166: add man pages for ldconfig.8 and ldd.1
11170: new FAQ entry for __fputc_unlocked link errors.
11171: add 0.9.27 compat symbol to wstring.c
11175: skip .svn, linux, and asm dirs when installing include files.
11176: revert 11175.
11177: don't install linux/asm if KERNEL_SOURCE == DEVEL_PREFIX.
11180: testsuite: make sure UCLIBC_LDSO is defined.
11181: testsuite: start of rpc tests
11185: make vfork() use kernel vfork() instead of fork().

Never bet against the cheap plastic solution.

More information about the uClibc mailing list