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

Differences between current and Android 2.2:

- <pthread.h>: Add reader/writer locks implementation.

- <math.h>: Added sincos() and sincosf() (GLibc compatibility).

- <sys/sysinfo.h>: Added missing sysinfo() system call implementation
  (the function was already declared in the header though).

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

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

- add sigaltstack() implementation for ARM.

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

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

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

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