The implementation was using a double-checked locking approach that
could break on SMP.
In addition to the barriers I also switched to a volatile pointer. I
don't think this will matter unless gcc can conclude that _normal_lock
can't affect *once_control, but I figured it was better to be safe.
(It seems to have no impact whatsoever on the generated code.)
Bug 3022795.
Change-Id: Ib91da25d57ff5bee4288526e39d457153ef6aacd
Merge commit '6dbfddfe4e76790ee57ddc0a77b64a9457ec08fb'
* commit '6dbfddfe4e76790ee57ddc0a77b64a9457ec08fb':
Use a recursive lock for pthread_once. DO NOT MERGE.
Merge commit 'b9e49ad56e5776ace7c6eab2e997d5b7acb16792' into gingerbread-plus-aosp
* commit 'b9e49ad56e5776ace7c6eab2e997d5b7acb16792':
Use a recursive lock for pthread_once. DO NOT MERGE.
Merge commit 'ef3644d110bcb44010672c0ad0bc7c96fd130c8f'
* commit 'ef3644d110bcb44010672c0ad0bc7c96fd130c8f':
Use ARMv6 instruction for handling byte order
Merge commit '312be567a03aaf851707a268807ee666b12f8c74' into gingerbread-plus-aosp
* commit '312be567a03aaf851707a268807ee666b12f8c74':
Use ARMv6 instruction for handling byte order
Merge commit '6bf08d131f4109088b7fa1e53196513636c49e9b'
* commit '6bf08d131f4109088b7fa1e53196513636c49e9b':
Move the atom optimization flags into TARGET_linux-x86.mk.
Merge commit '3558834c565bbfe96dfcf233373c3814b4655347' into gingerbread-plus-aosp
* commit '3558834c565bbfe96dfcf233373c3814b4655347':
Move the atom optimization flags into TARGET_linux-x86.mk.
Merge commit '3a1bbee36b773862e88c6f1895b607c0cd81b499' into gingerbread-plus-aosp
* commit '3a1bbee36b773862e88c6f1895b607c0cd81b499':
Add eventfd system call support
libthread_db depends on libc but since unresolved symbols were allowed
in the makefile this problem was never realized until gdbserver tried
to link with it, failing in the runtime.
Change-Id: If2ee319a2503c81abf3010829444f920c7c0c227
This adds an explicit memory barrier to condition variable signaling.
It's a little murky as to whether it's strictly required, but it seems
like a wise thing to do.
Change-Id: Id0faa542d61e4b8ffa775e4adf68e4d7471f4fb7
Return a valid pointer (not NULL) when the character "c" is at the end of "src".
Change-Id: Iab0b677943f2c8a9fbb255c44689f5d6dc3535d7
Example:
memccpy(dest, "xzy", 'y', 3) should return dest+3 rather than null.
Merge commit '3fda8700bd042fbb7ac37e2bbe7496df8a087244'
* commit '3fda8700bd042fbb7ac37e2bbe7496df8a087244':
Make timezones available to the host build.
Merge commit 'cc6b18291075a7960ad0d638d2047f41be1297e8' into gingerbread-plus-aosp
* commit 'cc6b18291075a7960ad0d638d2047f41be1297e8':
Make timezones available to the host build.
ARMv6 ISA has several instructions to handle data in different byte order.
For endian conversion (byte swapping) of single data words, it might be a
good idea to use the REV/REV16 instruction simply.
Change-Id: Ic4a5ed6254e082763e54aa70d428f59a0088636e
Merge commit '994b68f5c7d637d2945c06260fe35b266c10379d'
* commit '994b68f5c7d637d2945c06260fe35b266c10379d':
Fix __get_tls() in static C library to use kernel helpers.