Bionic ChangeLog:
-----------------

Differences between current and Android 2.1:

- Add support for SH-4 CPU architecture !

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

- <arpa/telnet.h>: New header (declarations only, no implementation).

- <err.h>: New header + implementation. GLibc compatibility.

- <warn.h>: New header + implementation. GLibc compatibility.

- <fts.h>: New header + implementation.

- <mntent.h>: Add missing <stdio.h> include.

- <regex.h>: New header + implementation.

- <signal.h>: Added killpg()

- <stdint.h>: Allow 64-bit type declarations on C99 builds.

- <stdio.h>: Add fdprintf() and vfdprintf(). Note that GLibc provides
  the confusing 'dprintf' and 'vdprintf()' functions instead.

- <stdlib.h>: 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.

- <strings.h>: Add missing <sys/types.h> include.

- <sys/queue.h>: Added new header (no implementation - macro templates).

- <sys/resource.h>: Add rlim_t proper definition.

- <time64.h>: Add missing C++ header inclusion guards.

- <unistd.h>: Add getusershell(), setusershell() and endusershell(), though
  implementation are bogus. GLibc compatibility.

- <wchar.h>: Add mbstowcs() and wcstombs()

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

- <sys/epoll.h>: <sys/system_properties.h>: 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.

-------------------------------------------------------------------------------
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.

- <netinet/in.h>: Now includes <netinet/in6.h>.

- <netinet/in6.h>: Added IPV6_JOIN_GROUP, IPV6_LEAVE_GROUP, IN6ADDR_ANY_INIT
  and ipv6mr_interface definitions.

- <time.h>:
    * 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 problen that appeared when switching to
  GCC 4.4.0.

- strftime(): fix incorrect handling of dates > 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).

- <sys/stat.h>: 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.
