| Bionic ChangeLog: |
| ----------------- |
| |
| Differences between current and Android 2.2: |
| |
| - Added an implementation of pthread_atfork() |
| |
| |
| ------------------------------------------------------------------------------- |
| Differences between Android 2.2 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. |
| |
| - 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. |