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

Differences between current and Android 2.3:

- <android/api-level.h>: Added new header to define __ANDROID_API__ to
  a constant integer corresponding to the native API level. This header
  also exists in the NDK's platform headers.

- <sys/cdefs.h>: Include <android/api-level.h>

- <time.h>: Add timegm(), timelocal(), time2posix() and posix2time()

- <sched.h>: Add sched_getcpu(), sched_getaffinity(), sched_setaffinity(),
  cpu_set_t and related macros (e.g. CPU_SETSIZE, CPU_ZERO, CPU_SET, ...)

- <unistd.h>: Add ftruncate64().

- <signal.h>: Changed the definition of SIGRTMAX to 64. However, note that
  sigset_t is only 32-bit and cannot deal with real-time signals.

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

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

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

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

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

- <termio.h>: added missing header (just includes <termios.h>)

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

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

- <inttypes.h>: add missing declarations for strntoimax abd strntoumax.

- <stdlib.h>: 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 <sys/cdefs.h>)

- <sys/select.h>: add missing declaration for pselect()

- <sys/vfs.h>: fixed implementation of fstatfs() (also fixes fpathconf()
  which uses it).

- Added an implementation of pthread_atfork()

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

- <private/bionic_tls.h>: 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.

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