6a51defa03
This is needed to fix gdbserver's handling of threaded programs, among other things. Change-Id: I823387c602cef9891532da946a01db14be780ab0
256 lines
10 KiB
Text
256 lines
10 KiB
Text
Bionic ChangeLog:
|
|
-----------------
|
|
|
|
Differences between current 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).
|
|
|
|
- <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.
|