Any of the setuid functions now updates /acct/uid/ with its own tid
before changing users. This is so we can properly account for cpu time
per uid.
Change-Id: I34186cf4d5228cac8439e582a9e26c01ef3011e4
Signed-off-by: Mike Chan <mike@android.com>
Java changes required not to mess up the ordering from bionic will arrive in a
later commit.) In particular, this will give us more correct behavior when on a
6to4 network, in that IPv4 will usually be preferred over 6to4.
Most of RFC 3484 is implemented -- what's not is rule 3 (avoid deprecated
addresses), 4 (prefer home addresses) and 7 (prefer native transport) as they
require low-level access to the kernel routing table via netlink. (glibc also
started out this way, and these rules are primarily useful in pretty obscure
circumstances, so we should be fine for the time being.)
Also, rule 9 (use longest matching prefix) has been modified so it does not try
to sort IPv4 addresses; given current IPv4 addressing practice these rules are
pretty much meaningless. Finally, I've added support for Teredo as a separate
label, with slightly lower preference than 6to4. (Vista puts the preference
below IPv4 by default. glibc puts the preference together with non-tunneled
IPv6.)
Note that this patch removes support for the "sortlist" directive in
resolv.conf; I've never seen it in actual use, it's irrelevant for Android
(since we don't use resolv.conf anyway), and it's not clear how it would be
implemented alongside RFC 3484.
On ARM EABI, 64-bit function parameters must be aligned
to an even/odd register pair. The weird way these stubs
were written (using separate lo/hi parameters) prevented
this alignment from being enforced by the compiler.
It decreases code size:
text data bss dec hex filename
161 0 0 161 a1 strndup-BEFORE.o
153 0 0 153 99 strndup-AFTER.o
Signed-off-by: André Goddard Rosa <andre.goddard@gmail.com>
Only provide an implementation for ARM at the moment, since
it requires specific assembly fragments (the standard syscall
stubs cannot be used because the child returns in a different
stack).
The gHardy man pages specify the return type of ptsname_r to be char*, but the
return value to be 0 on success, negative on error and the gHardy stdlib.h
defines extern int ptsname_r(...).
Busybox telnetd fails to run successfully without this change.
Merge commit 'f197147a787d7415e6e0a1bad15566836c55befb'
* commit 'f197147a787d7415e6e0a1bad15566836c55befb':
Revert "Add qsort_r() implementation to the C library."
Merge commit 'be71c8142d4225dd9af4742ec050f30fcbc2aa5e'
* commit 'be71c8142d4225dd9af4742ec050f30fcbc2aa5e':
Add qsort_r() implementation to the C library.
Merge commit 'ca07064c9ebd8523ed88fa09e97feaaafb7e9c15' into eclair-mr2-plus-aosp
* commit 'ca07064c9ebd8523ed88fa09e97feaaafb7e9c15':
Revert "Add qsort_r() implementation to the C library."
Merge commit '5f53a18204ec991f5a77872806eeaa185936aa8c' into eclair-plus-aosp
* commit '5f53a18204ec991f5a77872806eeaa185936aa8c':
Revert "Add qsort_r() implementation to the C library."
Merge commit '5f53a18204ec991f5a77872806eeaa185936aa8c' into eclair-mr2
* commit '5f53a18204ec991f5a77872806eeaa185936aa8c':
Revert "Add qsort_r() implementation to the C library."
Merge commit '20b3097d4cc225d948dac38e778a9d3b3b1549db' into eclair-mr2-plus-aosp
* commit '20b3097d4cc225d948dac38e778a9d3b3b1549db':
Add qsort_r() implementation to the C library.
This reverts commit 754c178ae5.
Turns out we don't need it afterall (needed a stable sort anyways).
So, we'll make that change in the dev branch instead.
Merge commit '754c178ae551aedcbbfd3bfd1c1c3b710d9ad989' into eclair-mr2
* commit '754c178ae551aedcbbfd3bfd1c1c3b710d9ad989':
Add qsort_r() implementation to the C library.
Merge commit '754c178ae551aedcbbfd3bfd1c1c3b710d9ad989' into eclair-plus-aosp
* commit '754c178ae551aedcbbfd3bfd1c1c3b710d9ad989':
Add qsort_r() implementation to the C library.
NOTE: This replaces qsort.c with the FreeBSD version. While
the patch changes the source, it should not alter the
implementation that should use the exact same algorithm.
log_channel_t contains fd member, which is file descriptor for
exact logging channel. change cc05d12716
lacks initialization of this member in __write_to_log_init(), thus
logging code is not working, although not crashable.
Additional details may be found in comments here:
http://review.source.android.com/5617
The file descriptor wasn't getting set, so the writev() call was
silently failing.
There's a parallel implementation over in system/core/liblog, but it's
still using the old approach and didn't have this problem.
Merge commit 'ae77aae80cb78b33f32e65c43a473d5e297b866b'
* commit 'ae77aae80cb78b33f32e65c43a473d5e297b866b':
Rebuild the time zone data files in 32-bit format instead of 64-bit.
Merge commit '07401a681f7530a8126fb0fd07a097828337b30a' into eclair-mr2-plus-aosp
* commit '07401a681f7530a8126fb0fd07a097828337b30a':
Rebuild the time zone data files in 32-bit format instead of 64-bit.
Merge commit 'cd5df2d92c3adeac41e27aab5ba0f999c753c4c4' into eclair-mr2
* commit 'cd5df2d92c3adeac41e27aab5ba0f999c753c4c4':
Rebuild the time zone data files in 32-bit format instead of 64-bit.
Merge commit 'cd5df2d92c3adeac41e27aab5ba0f999c753c4c4' into eclair-plus-aosp
* commit 'cd5df2d92c3adeac41e27aab5ba0f999c753c4c4':
Rebuild the time zone data files in 32-bit format instead of 64-bit.
Merge commit 'a5d9651368779ae054f4184c5881566fdee85003'
* commit 'a5d9651368779ae054f4184c5881566fdee85003':
Correct the raw offsets in the time zone index for a few zones.
Merge commit '8d7c6953373b4e2c6f49dfff741bf0da09030760' into eclair-mr2-plus-aosp
* commit '8d7c6953373b4e2c6f49dfff741bf0da09030760':
Correct the raw offsets in the time zone index for a few zones.
Merge commit '7e6178998507f993eedf6bec726b0c28881f0485' into eclair-plus-aosp
* commit '7e6178998507f993eedf6bec726b0c28881f0485':
Correct the raw offsets in the time zone index for a few zones.
Merge commit '7e6178998507f993eedf6bec726b0c28881f0485' into eclair-mr2
* commit '7e6178998507f993eedf6bec726b0c28881f0485':
Correct the raw offsets in the time zone index for a few zones.
ZoneCompactor was using the system time zone database to get the offsets
instead of using the data it was compiling, so for newly added or recently
changed zones the index could be inconsistent with the data.
Affected zones: San_Luis, Casey, Davis, Mawson, Kathmandu, Novokuznetsk
Wrapped declarations in time64.h with __BEGIN_DECLS/__END_DECLS so that
the prototypes are correctly identified as extern C.
Change-Id: I253453307831c929a6c7174b28b48bceef946fed
Signed-off-by: Fred Fettinger <fred.fettinger@motorola.com>
Signed-off-by: Mike Lockwood <lockwood@android.com>
Merge commit '9cb69cf4dc8962204715a7662c7d0e778a7ee113'
* commit '9cb69cf4dc8962204715a7662c7d0e778a7ee113':
Update zoneinfo time zone data to version 2009s
Merge commit '25a3a3ea8cb234bead6d80a71823713b80acfea8' into eclair-mr2-plus-aosp
* commit '25a3a3ea8cb234bead6d80a71823713b80acfea8':
Update zoneinfo time zone data to version 2009s
Merge commit 'a6083b7768a2d1efc52805ff7ce049866186c744' into eclair-plus-aosp
* commit 'a6083b7768a2d1efc52805ff7ce049866186c744':
Update zoneinfo time zone data to version 2009s
Merge commit 'a6083b7768a2d1efc52805ff7ce049866186c744' into eclair-mr2
* commit 'a6083b7768a2d1efc52805ff7ce049866186c744':
Update zoneinfo time zone data to version 2009s
Merge commit 'fdfa16776ca8f33f671cbac5dd9fa8bd761e16a8'
* commit 'fdfa16776ca8f33f671cbac5dd9fa8bd761e16a8':
Split libc_debug.so into two .so modules loaded on demand from libc.so
Merge commit '362b2aabee2dd04e04a3ad9c09f0ad0212569be4' into eclair-mr2-plus-aosp
* commit '362b2aabee2dd04e04a3ad9c09f0ad0212569be4':
Split libc_debug.so into two .so modules loaded on demand from libc.so
This change is intended to eliminate need to replace libc.so with libc_debug.so in order to enablememory allocation debugging.
This is also the first step towards implementing extended memoryallocation debugging using emulator's capabilities in monitoring memory access.
Merge commit '83362689f5b1f6393d376d242fe29541b63ead2d'
* commit '83362689f5b1f6393d376d242fe29541b63ead2d':
added and modified linker to support SuperH architecture
Add the BSD sys_signame array.
added and modified bionic code to support SuperH architecture
Merge commit '96bbbe21778fc3f4a932822c2436238d6ce5721b' into eclair-plus-aosp
* commit '96bbbe21778fc3f4a932822c2436238d6ce5721b':
Wrap ARM abort() to improve stack trace.
The code generated for Thumb and Thumb2 targets has different handling
for abort(). Because abort() is "noreturn", it doesn't need to preserve
the callee-save registers. The Thumb2 version trashes LR and makes it
impossible to figure out who called abort().
This inserts a trivial stub function; net effect is stack traces are
reasonable after an abort().
For bug 2191452.
Eclair branch Dr. No approved by: hiroshi
Merge commit '581f43056b594429b3df4678d87989c93d8f81d2'
* commit '581f43056b594429b3df4678d87989c93d8f81d2':
use local symbols in memset so it doesn't screw up profiling
Merge commit '76ef331cd6967ca8f5af779d25c8b634f8cdd2b6' into eclair-mr2-plus-aosp
* commit '76ef331cd6967ca8f5af779d25c8b634f8cdd2b6':
use local symbols in memset so it doesn't screw up profiling
Merge commit '7e7d6c48a064af82f0ec39f47b9eb803a6e1df4c' into eclair-plus-aosp
* commit '7e7d6c48a064af82f0ec39f47b9eb803a6e1df4c':
use local symbols in memset so it doesn't screw up profiling
Merge commit '7e7d6c48a064af82f0ec39f47b9eb803a6e1df4c' into eclair-mr2
* commit '7e7d6c48a064af82f0ec39f47b9eb803a6e1df4c':
use local symbols in memset so it doesn't screw up profiling
Merge commit '5f32207a3db0bea3ca1c7f4b2b563c11b895f276' into eclair-mr2-plus-aosp
* commit '5f32207a3db0bea3ca1c7f4b2b563c11b895f276':
Wrap ARM abort() to improve stack trace.
The code generated for Thumb and Thumb2 targets has different handling
for abort(). Because abort() is "noreturn", it doesn't need to preserve
the callee-save registers. The Thumb2 version trashes LR and makes it
impossible to figure out who called abort().
This inserts a trivial stub function; net effect is stack traces are
reasonable after an abort().
For bug 2191452.
Merge commit '73981476a389847e8537cca37503c43e107fadc9'
* commit '73981476a389847e8537cca37503c43e107fadc9':
Fill l_ld of linkmaps with value from soinfo::dynamic.
modified kernel headers re-generate tools to support SuperH architecture
added syscalls for SuperH which automatically generate by gensyscalls.py
Merge commit '5c32826841460294cfba98ff713b4804512bacd1' into eclair-plus-aosp
* commit '5c32826841460294cfba98ff713b4804512bacd1':
libc: kernel: add linux/msm_q6venc.h kernel include for qsd8k h/w video encode
the issue here is that abort() can be called from anywhere, in particular
from malloc or free. When we try to use the debug_log functions, these
can end up calling into some code (like malloc/free) that called abort()
in the first place and end up in an infinite recursion loop.
Do not submit this patch before the one that modifies the Android emulator to
work-around a weird ARMv7 emulation issue. This is done to temporarily re-allow
the -user builds needed for QA.
This is required to work-around some corny bugs in ARMv7 emulation.
The emulation itself is required to run the dex pre-optimization pass
for -user builds.
Merge commit '7a9e06fa7e4e533074cde314f25dff3024f34a5d' into eclair-plus-aosp
* commit '7a9e06fa7e4e533074cde314f25dff3024f34a5d':
Fix ABI breakage in libc.so and libm.so between 1.6 and Eclair.
372 MB/s for large transfers, 440 MB/s for smaller ones down to 1KB. 130 MB/s for very small transfers ( < 32 bytes )
Performance is similar with non-congruent buffers.
Merge commit 'bc10cd2900cdb7fed077163b6a33e0f8572b2b19' into eclair-plus-aosp
* commit 'bc10cd2900cdb7fed077163b6a33e0f8572b2b19':
Fix a typo that resulted in a crash in the boot sequence
This is used to perform a mutex lock for a given amount of
milliseconds before giving up. Using the _np prefix since this
is absolutely not portable.
Also remove a compiler warning in pthread_attr_getstackaddr
For performance reasons, we don't call the kernel helper. Instead, we directly
access the TLS register on ARMv6 and higher. For ARMv5TE, keep using the hard-coded
address populated by the kernel on each task switch.
NOTE: Since we don't call the kernel helper, this must precisely match your
kernel configuration. This is controlled by setting the ARCH_ARM_HAVE_TLS_REGISTER
variable to 'true' in your board configuration file.
the TLS access functions to use the kernel helper.
This Fix is verified on ST Ericsson's U8500 platform and Submitted on behalf of a third-party:
Surinder-pal SINGH from STMicroelectronics.
Compiling with -std=c99 defines __STRICT_ANSI__, but the 64 bit types
and type macros should still be defined in this case.
This helps compiling third party code that needs -std=c99 with the NDK.
Merge commit '4e57cf3f8c0b696f117579c8165b13c8d32b9b5d' into eclair-plus-aosp
* commit '4e57cf3f8c0b696f117579c8165b13c8d32b9b5d':
Fix an infinite loop in time2sub.
The problem is that time_t is signed, and the original code relied on the
fact that (X + c < X) in case of overflow for c >= 0. Unfortunately, this
condition is only guaranteed by the standard for unsigned arithmetic, and
the gcc 4.4.0 optimizer did completely remove the corresponding test from
the code. This resulted in a missing boundary check, and an infinite loop.
The problem is solved by testing explicitely for TIME_T_MIN and TIME_T_MAX
in the loop that uses this.
Also fix increment_overflow and long_increment_overflow which were buggy
for exactly the same reasons.
Note: a similar fix is needed for system/core/libcutils
Merge commit '9e74f697e0178a0e9b6133a2b270cc7fed9920bf' into eclair-plus-aosp
* commit '9e74f697e0178a0e9b6133a2b270cc7fed9920bf':
libc: add void to clock() function prototype
ARMv6 onwards. These architectures provide the load-linked, store-conditional pair of ldrex/strex whose use
is recommended in place of 'swp'. Also, the description of the 'swp' instruction in the ARMv6 reference
manual states that the swap operation does not include any memory barrier guarantees.This fix attempts to
address these issues by providing an atomic swap implementation using ldrex/strex under _ARM_HAVE_LDREX_STREX
macro. This Fix is verified on ST Ericsson's U8500 platform and Submitted on behalf of a third-party:
Surinder-pal SINGH from STMicroelectronics.
Main differences from original code:
1. now log channel for LOG_ID_MAIN may exist even if LOG_ID_RADIO
facility failed.
2. __write_to_log_null() now acts as always successful function.
3. it's more simplier to add new logging channels now
ammended commit fixes my typo on line 130
Merge commit '3773d35eb98e22b5edab4d82fb72bdf86ff80494'
* commit '3773d35eb98e22b5edab4d82fb72bdf86ff80494':
Make the DNS resolver accept domain names with an underscore.
More precisely, this accepts domain labels with an underscore in
the middle (i.e. not at the start or the end of the label). This
is needed to perform complex CNAME chain resolution in certain
VPN networks.
Some libc changes were preventing the initialization call from being made.
The basic problem appears to be that libc_init_common.c is only built once,
and it's only built for the non-debug libc.
Merge commit 'ef0bd1857041ffde069cf52138aaf22c1af7130e'
* commit 'ef0bd1857041ffde069cf52138aaf22c1af7130e':
Pass the elfdata pointer in a slot of the temporary TLS area.
This allows libc.so to run the C runtime initializer as soon as the
dynamic linker loads the shared library, i.e. before any other initializers
(e.g. static C++ constructors in other shared libraries the executable depends
on).
This also removes the bug where the initializers from the executable itself
were run twice: once by the dynamic linker, and another time by __libc_init
as defined by libc_init_dynamic.c
This is needed to properly initialize the C runtime when libc.so
is loaded by the dynamic linker.
Move the temporary TLS setup before the first system call, just
in case something really horrible happens, we won't crash when
trying to write an error code in 'errno'
Remove the broken TLS_SLOT_THREAD_ID setup. First, this slot
should normally receive the address of a pthread_internal_t,
not a kernel thread identifier. Second, it is never used by
the linker anyway.
Also remove an obsolete comment.
Merge commit 'c4eee3765bf9dd81ff055e70ff7daa83a3926d2a'
* commit 'c4eee3765bf9dd81ff055e70ff7daa83a3926d2a':
Prevent a crash in the memory leak checker (which happened in chk_free())
Simplify the code a little, removing un-necessary mutex locks/unlocks.
Provide slightly better diagnostic message in case of corruption.
Use snprintf/strlcat instead of sprintf/strcat
Merge commit '09baf4e881c78e67c7849aa81432ceb34e72e913'
* commit '09baf4e881c78e67c7849aa81432ceb34e72e913':
Add Glibc-compatible macro aliases for the nanosecond time accessors in stat structure
Merge commit '3ddc15e10a6f5690e53e729c0da2c42f0eb944d1'
* commit '3ddc15e10a6f5690e53e729c0da2c42f0eb944d1':
Add new clean header for PPP on PPTP (VPN)
Merge commit '3a654b1e04d4275ae315cfe1b196998acf10052c'
* commit '3a654b1e04d4275ae315cfe1b196998acf10052c':
Revert "Fix the C library initialization to avoid calling static C++ constructors twice."
Merge commit '03eabfe65e1e2c36f4d26c78a730fa19a3bdada3'
* commit '03eabfe65e1e2c36f4d26c78a730fa19a3bdada3':
Fix the C library initialization to avoid calling static C++ constructors twice.
The problem was due to the fact that, in the case of dynamic executables,
the dynamic linker calls the DT_PREINIT_ARRAY, DT_INIT and DT_INIT_ARRAY
constructors when loading shared libraries and dynamic executables,
*before* calling the executable's entry point (i.e. arch-$ARCH/bionic/crtbegin_dynamic.c)
which in turns call __libc_init() in libc.so, as defined by bionic/libc_init_dynamic.c
The latter did call these constructors array again, mistakenly.
The patch also updates the documentation of many related functions.
Also adds a new section to linker/README.TXT explaining restrictions on
C library usage.
The patch has been tested on a Dream for stability issues with
proprietary blobs:
- H264 decoding works
- Camera + Video recording works
- GPS works
- Sensors work
The tests in system/extra/tests/bionic/libc/common/test_static_cpp_mutex.cpp has been
run and shows the static C++ constructor being called only once.
Merge commit '49e55332784b82f7112ee7c1ea3c176c9dc32d7a'
* commit '49e55332784b82f7112ee7c1ea3c176c9dc32d7a':
libc: Add an intermediate version of the static libc without malloc
Removes a lot of redundant code, and reorganizes the file. We first
setup all the comomn variables we may need, and then define the
actual libraries that need to be generated.
Signed-off-by: Dima Zavin <dima@android.com>
Merge commit 'cdb68bf8ce26448cfe173d86f1c074e167c3420f'
* commit 'cdb68bf8ce26448cfe173d86f1c074e167c3420f':
Fix getservent() so that it returns s_port in network byte order.
Merge commit '5c106fcaa5b9d0a3ebeb2e8cdca589129d6a7ebd'
* commit '5c106fcaa5b9d0a3ebeb2e8cdca589129d6a7ebd':
Fix __eabi_atexit() implementation, as well as a bug in the BSD-originated __cxa_finalize() implementation
* changes:
Fix __eabi_atexit() implementation, as well as a bug in the BSD-originated __cxa_finalize() implementation This patch uses "#if ANDROID" instead of "#if 1" in the __cxa_finalize() fix
Merge commit 'd386afcc41e92c96778d9b1a498199f48fa2d4aa'
* commit 'd386afcc41e92c96778d9b1a498199f48fa2d4aa':
revert to previous implementation of __aeabi_atexit() since the new one seems to crash a static ICU String destructor.
Merge commit '3e16f84fcad103c97a2df4a58948835277043569'
* commit '3e16f84fcad103c97a2df4a58948835277043569':
Fix __aeabi_atexit to call __cxa_atexit properly. This function is defined by the C++ ABI for ARM document.
the issue is that the BSD implementation doesn't accept a call like:
getaddrinfo(SERVER_NAME, "9999", NULL, &res);
because if will reject a numerical string in the second parameter if no hints are explicitely
provided. This technically doesn't violate POSIX but might make porting Linux software a bit
difficult. For more details see:
http://groups.google.com/group/android-ndk/browse_thread/thread/818ab9c53f24c87
also comment debugging printf() calls which shouldn't be there.
Merge commit '85a01ffba337b123436f57eba4daae38c7c90d1e'
* commit '85a01ffba337b123436f57eba4daae38c7c90d1e':
Add the domain search list for VPN connection.
* changes:
Add the domain search list for VPN connection. The current solution is to read the net.dns.search property, and expand the list during the resolve initialization. In the future, we could implement search list per process.
Merge commit 'd2c9dcc9265e66f6432ec39dcc7378b944449e60'
* commit 'd2c9dcc9265e66f6432ec39dcc7378b944449e60':
libc: Replace a reference to TARGET_BUILD_TYPE with DEBUG_BIONIC_LIBC
The current solution is to read the net.dns.search property,
and expand the list during the resolve initialization. In the
future, we could implement search list per process.
Update: refine the code accordingly.
Update: remove unnecessary code.
Update: remove the unused variable.