diff options
author | Ryan Prichard <rprichard@google.com> | 2018-05-17 17:14:18 -0700 |
---|---|---|
committer | Ryan Prichard <rprichard@google.com> | 2018-05-30 16:44:23 -0700 |
commit | 27475b5105e30332dd2145e0bfba098b756673d9 (patch) | |
tree | 02f72da22fcc8e2d2e8bf6db1e84d10f3365592c /libc/malloc_hooks/malloc_hooks.cpp | |
parent | cb5f4100060cd9894273863a973d622d6ebd2719 (diff) |
Initialize __libc_sysinfo early on.
__libc_sysinfo is hidden, so accessing it doesn't require a relocated GOT.
It is important not to have a relocatable initializer on __libc_sysinfo,
because if it did have one, and if we initialized it before relocating the
linker, then on 32-bit x86 (which uses REL rather than RELA), the
relocation step would calculate the wrong addend and overwrite
__libc_sysinfo with garbage.
Asides:
* It'd be simpler to keep the __libc_sysinfo initializer for static
executables, but the loader pulls in libc_init_static (even though it
uses almost none of the code in that file, like __libc_init).
* The loader has called __libc_init_sysinfo three times by the time it
has relocated itself. A static executable calls it twice, while libc.so
calls it only once.
Bug: none
Test: lunch aosp_x86-userdebug ; emulator
Test: adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests
Test: adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static
Change-Id: I5944f57847db7191608f4f83dde22b49e279e6cb
Diffstat (limited to 'libc/malloc_hooks/malloc_hooks.cpp')
0 files changed, 0 insertions, 0 deletions