<html><body><pre>Bionic ChangeLog:
-----------------

-------------------------------------------------------------------------------
Differences between Android 2.3 and Android 2.2:

- &lt;pthread.h&gt;: Add reader/writer locks implementation. Add sanity
  checking to pthread_mutex_destroy() (e.g. a locked mutex will return
  EBUSY).

- &lt;semaphore.h&gt;: Use private futexes for semaphore implementation,
  unless your set 'pshared' to non-0 when calling sem_init().

  Also fixed a bug in sem_post() to make it wake up all waiting
  threads, instead of one. As a consequence, the maximum semaphore
  value is now reduced to 0x3fffffff.

- &lt;math.h&gt;: Added sincos(), sincosf() and sincosl() (GLibc compatibility).

- &lt;sys/sysinfo.h&gt;: Added missing sysinfo() system call implementation
  (the function was already declared in the header though).

- sysconf() didn't work for some arguments due to a small bug in the
  /proc line parser.

- &lt;termio.h&gt;: added missing header (just includes &lt;termios.h&gt;)

- &lt;unistd.h&gt;: add missing declaration for truncate(). The implementation
  was already here since Android 1.5.

  modify implementation of alarm() to return 0 in case of error (i.e.
  if a value larger than 0x7fffffff seconds is passed to it). This
  makes the implementation compliant with the GLibc behaviour.

- &lt;wchar.h&gt;: small fixes to really support wchar_t in Bionic (not there yet).

     the size of wchar_t is still 32-bit (decided by the compiler)

     WCHAR_MIN: changed from 0 to INT_MIN
     WCHAR_MAX: changed from 255 to INT_MAX

     wcpcpy(), wcpncpy(), wcscat(), wcschr(), wcscmp(),
     wcscpy(), wcscspn(), wcsdup(), wcslcat(), wcslcpy(),
     wcslen(), wcsncat(), wcsncmp(), wcsncpy(), wcsnlen(),
     wcspbrk(), wcsrchr(), wcsrchr(), wcsspn(), wcsstr(),
     wcstok(), wcswidth(), wmemchr(), wmemcmp(), wmemcpy(),
     wmemmove(), wmemset(): Added proper implementations.

     wcscasecmp(), wcsncasecmp(): Added implementation limited
     to ASCII codes for lower/upper.

     wcscoll(): added dummy implementation that calls wcscmp()
     wcsxfrm(): added dummy implementation that calls wcsncpy()

  NOTE: Technically, this breaks the ABI, but we never claimed to support
        wchar_t anyway. The wchar_t support is still *NOT* official at this
        point. We need better multi-byte support code, and wprintf/wscanf
        stuff too.

- &lt;inttypes.h&gt;: add missing declarations for strntoimax abd strntoumax.

- &lt;stdlib.h&gt;: add missing declarations for drand48() and erand48().

- clearerr(): fix broken implementation.

- Feature test macros like _POSIX_C_SOURCE / _XOPEN_SOURCE / _C99_SOURCE
  are now handled correctly by our C library headers (see &lt;sys/cdefs.h&gt;)

- &lt;sys/select.h&gt;: add missing declaration for pselect()

- &lt;sys/vfs.h&gt;: fixed implementation of fstatfs() (also fixes fpathconf()
  which uses it).

- Added an implementation of pthread_atfork()

- &lt;dlfcn.h&gt;: fixed dlopen() implementation to support dlopen(NULL, ...).
  This allows one to look at the dynamic symbols exported by an executable.

- &lt;private/bionic_tls.h&gt;: use kernel helper functions for static versions
  of the C library. This is necessary because we don't know where the corresponding
  machine code is going to run, and the optimization for __get_tls() might
  not match the features of the target device where we run a static executable
  linked to the C library. This fixes one of the bug that explains why gdbserver
  didn't work well with threads.

-------------------------------------------------------------------------------
Differences between Android 2.2. and Android 2.1:

- Support FP register save/load in setjmp()/longjmp() on ARMv7 builds.

- Add support for SH-4 CPU architecture !

- __atomic_swap(): use LDREX/STREX CPU instructions on ARMv6 and higher.

- &lt;arpa/telnet.h&gt;: New header (declarations only, no implementation).

- &lt;err.h&gt;: New header + implementation. GLibc compatibility.

- &lt;warn.h&gt;: New header + implementation. GLibc compatibility.

- &lt;fts.h&gt;: New header + implementation.

- &lt;mntent.h&gt;: Add missing &lt;stdio.h&gt; include.

- &lt;regex.h&gt;: New header + implementation.

- &lt;signal.h&gt;: Added killpg()

- &lt;stdint.h&gt;: Allow 64-bit type declarations on C99 builds.

- &lt;stdio.h&gt;: Add fdprintf() and vfdprintf(). Note that GLibc provides
  the confusing 'dprintf' and 'vdprintf()' functions instead.

- &lt;stdlib.h&gt;: Fix ptsname_r(): the return type is int instead of char*.
  The mistake comes from a GLibc man page bug (the man page listed a return
  type of char*, while the implementation used int. Fixed in late 2009 only).
  The Bionic implementation was incorrect. Technically, this is an ABI
  breakage, but code that used this function probably never worked or
  compiled properly anyway.

- &lt;strings.h&gt;: Add missing &lt;sys/types.h&gt; include.

- &lt;sys/queue.h&gt;: Added new header (no implementation - macro templates).

- &lt;sys/resource.h&gt;: Add rlim_t proper definition.

- &lt;time64.h&gt;: Add missing C++ header inclusion guards.

- &lt;unistd.h&gt;: Add getusershell(), setusershell() and endusershell(), though
  implementation are bogus. GLibc compatibility.

- &lt;wchar.h&gt;: Add mbstowcs() and wcstombs()

- add clone() implementation for ARM (x86 and SH-4 not working yet).

- &lt;sys/epoll.h&gt;: &lt;sys/system_properties.h&gt;: Add missing C++ inclusion guards

- fix getpwnam() and getpwgrp() to accept "app_0" as a valid user name.

- fix sem_trywait() to return -1 and set errno to EAGAIN, instead of
  returning EAGAIN directly.

- fix sem_post() to wake up multiple threads when called rapidly in
  succession.

- DNS: partial implementation of RFC3484 (rule 1, 2, 5, 6, 8, 10 and
  modified rule 9), for better address selection/sorting.
  In the process, removed code that was previously used for "sortlist"
  in /etc/resolv.conf. (resolv.conf is already ignored, so the latter
  is a no-op for actual functionality.)

- fix pthread_sigmask() to properly return an error code without touching
  errno. Previous implementation returned -1 on error, setting errno, which
  is not Posix compliant.

- add sigaltstack() implementation for ARM.

- &lt;time.h&gt;: Properly implement the 'timezone' and 'daylight' global variables
  (they were not defined previously, though declared in the header).

- &lt;time.h&gt;: Fix timezone management implementation to properly update
  'tm_gmtoff' field in 'struct tm' structure.

- DNS: get rid of spurious random DNS queries when trying to resolve
  an unknown domain name. Due to an initialization bug, a random DNS search
  list was generated for each thread if net.dns.search is not defined.

- &lt;pthread.h&gt;: Add pthread_condattr_init/destroy/setpshared/getpshared functions
  to enable proper shared conditional variable initialization.

  Modify the pthread_mutex_t and pthread_cond_t implementation to use private
  futexes for performance reasons. Mutexes and Condvars are no longer shareable
  between processes by default anymore, unless you use PTHREAD_PROCESS_SHARED
  with pthread_mutexattr_setpshared() and/or pthread_condattr_setpshared().

-------------------------------------------------------------------------------
Differences between Android 2.1 and 2.0.1:

- zoneinfo: updated data tables to version 2009s


-------------------------------------------------------------------------------
Differences between Android 2.0.1 and 2.0:

- abort(): ARM-specific hack to preserve the 'lr' register when abort()
  is called (GCC does not preserve it by default since it thinks that
  abort() never returns). This improves stack traces considerably.


-------------------------------------------------------------------------------
Differences between Android 2.0 and 1.6:

- memcmp(), memcpy(): ARMv7 optimized versions.

- pthread_mutexattr_setpshared(): implementation will not return ENOTSUP
  if PTHREAD_PROCESS_SHARED is used, because our Mutex implementation can
  work across multiple processes.

  *HOWEVER* it does not use "robust futexes" which means that held mutexes
  *are not* automatically released by the kernel when the owner process
  crashes or exits. This is only done to simplify communication between
  two always-live system processes, DO NOT USE THIS IN APPLICATIONS !

- pthread_mutex_lock_timeout_np(): New Android-specific function to
  perform a timed lock (). In case of timeout, it returns EBUSY.

- pthread_cond_timedwait_monotonic_np(): Same as pthread_cond_timedwait()
  but uses the monotonic clock(). Android-specific.

- pthread_cond_timedwait_relative_np(): Same as pthread_cond_timedwait()
  but uses a relative timeout instead. Android-specific.

- &lt;netinet/in.h&gt;: Now includes &lt;netinet/in6.h&gt;.

- &lt;netinet/in6.h&gt;: Added IPV6_JOIN_GROUP, IPV6_LEAVE_GROUP, IN6ADDR_ANY_INIT
  and ipv6mr_interface definitions.

- &lt;time.h&gt;:
    * Add missing tzset() declaration.
    * Add Android-specific strftime_tz().

- getaddrinfo():
    Only perform IPv6 lookup for AF_UNSPEC if we have IPv6 connectivity.
    This saves one DNS query per lookup on non-IPv6 systems.

- mktime(): Fix an infinite loop problem that appeared when switching to
  GCC 4.4.0.

- strftime(): fix incorrect handling of dates &gt; 2038 due to 64-bit issue
  in original code.

-------------------------------------------------------------------------------
Differences between Android 1.6 and 1.5:

- C runtime: Fix runtime initialization to be called before any static C++
  constructors. This allows these to use pthread functions properly.

- __aeabi_atexit(): Fix implementation to properly call C++ static destructors
  when the program exits (or when a shared library is unloaded).

- &lt;sys/stat.h&gt;: added GLibc compatibility macros definitions:

        #define  st_atimensec  st_atime_nsec
        #define  st_mtimensec  st_mtime_nsec
        #define  st_ctimensec  st_ctime_nsec

- getaddrinfo(): implementation will now allow numeric ports if ai_socktype is
  set to ANY. This is to match the GLibc behaviour.

- getservent(): and getservent_r() incorrectly returned the port in host-endian
  order in the s_port field. It now returns it in big-endian order.

- DNS: Allow underscore in the middle of DNS labels. While not really
  standard, this extension is needed for some VPN configurations and is
  supported by other operating systems.

- DNS: Support for DNS domain search lists through the new net.dns.search
  system property. The corresponding value must be a space-separated list of
  domain suffixes.
</pre></body></html>