platform_bionic/libc/private
Peter Collingbourne e949195f64 Adopt GNU calling convention for ifunc resolvers.
In order for an ifunc resolver to detect the presence of certain CPU features,
access to getauxval(AT_HWCAP) or getauxval(AT_HWCAP2) may be required. In order
for getauxval() to work, it needs to access the pointer to the auxiliary vector
stored by the linker in the libc shared globals data structure. Accessing the
shared globals requires libc to call the __libc_shared_globals() function
exported by the linker. However, in order to call this function, libc must
be fully relocated, which is not guaranteed to be the case at the point when
ifunc resolvers are called.

glibc solves this problem by passing the values of getauxval(AT_HWCAP)
(and getauxval(AT_HWCAP2) on aarch64) as arguments to the ifunc resolver.
Since this seems to be not only the most straightforward way to solve the
problem but also improves our compatibility with glibc, we adopt their
calling convention.

This change is ABI compatible with old resolvers because the arguments are
passed in registers, so the old resolvers will simply ignore the new arguments.

Bug: 135772972
Change-Id: Ie65bd6e7067f0c878df3d348c815fda61dc12de2
2019-10-28 20:20:29 -07:00
..
__bionic_get_shell_path.h Fix internal uses of _PATH_BSHELL. 2019-03-25 17:28:22 -07:00
bionic_allocator.h Add BionicAllocator::memalign 2019-01-25 15:31:35 -08:00
bionic_arc4random.h Replace TLS_SLOT_BIONIC_PREINIT w/ shared globals 2018-12-04 13:51:56 -08:00
bionic_asm.h Mark __BIONIC_WEAK_FOR_NATIVE_BRIDGE symbols 2017-10-27 10:01:46 +02:00
bionic_asm_arm.h Unified sysroot: kill arch-specific include dirs. 2017-10-12 13:19:51 -07:00
bionic_asm_arm64.h Set __bionic_asm_align to 16 for arm64 2018-06-26 15:58:52 -03:00
bionic_asm_mips.h Unified sysroot: kill arch-specific include dirs. 2017-10-12 13:19:51 -07:00
bionic_asm_x86.h Unified sysroot: kill arch-specific include dirs. 2017-10-12 13:19:51 -07:00
bionic_asm_x86_64.h Unified sysroot: kill arch-specific include dirs. 2017-10-12 13:19:51 -07:00
bionic_auxv.h Use shared globals so getauxval works earlier 2018-12-04 13:51:46 -08:00
bionic_call_ifunc_resolver.h Adopt GNU calling convention for ifunc resolvers. 2019-10-28 20:20:29 -07:00
bionic_config.h Use a separate config.h for config like defines. 2014-06-16 23:35:53 -07:00
bionic_constants.h Increase the size of the shadow call stack guard region to 16MB. 2019-01-31 14:37:34 -08:00
bionic_ctype.h Use inline ctype functions for ato*/strto* and scanf. 2017-12-19 16:37:01 -08:00
bionic_defs.h Mark __BIONIC_WEAK_FOR_NATIVE_BRIDGE symbols 2017-10-27 10:01:46 +02:00
bionic_elf_tls.h Implement dynamic TLS accesses and allocation 2019-01-25 17:53:01 -08:00
bionic_fdsan.h libc_shared_globals: add a constexpr ctor 2019-01-03 17:11:27 -08:00
bionic_fortify.h bionic_fortify: clarify error message for an out of bounds FD. 2018-03-14 12:37:25 +00:00
bionic_futex.h Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
bionic_globals.h linker: Add library load and unload hooks for HWASan. 2019-08-05 16:51:01 -07:00
bionic_ieee.h Fix instances of '#if __LP64__'. 2016-09-15 14:21:28 -07:00
bionic_ifuncs.h ifuncs: start sharing. 2019-09-17 12:44:41 -07:00
bionic_inline_raise.h Generalize abort's inline_tgkill, use it in fdsan. 2018-08-31 16:39:23 -07:00
bionic_lock.h Comment about lock destruction and unlocking 2019-04-19 17:16:25 -07:00
bionic_macros.h Add arm32 case to BIONIC_STOP_UNWIND to correctly stop unwinders 2019-08-27 22:50:21 +01:00
bionic_malloc_dispatch.h Refactor the malloc_info code. 2019-03-07 08:39:55 -08:00
bionic_mbstate.h Include what we use. 2018-01-22 12:20:16 -08:00
bionic_page.h Move PAGE_MASK into <sys/user.h>. 2015-07-28 14:58:37 -07:00
bionic_sigdefs.h Move <sys/_sigdefs.h> and <sys/_errdefs.h> to private. 2016-04-13 17:45:39 -07:00
bionic_ssp.h
bionic_string_utils.h Fix pthread_getattr_np for the main thread. 2014-08-26 10:36:38 -07:00
bionic_systrace.h Clean up bionic_macros.h a bit. 2018-10-25 11:00:00 -07:00
bionic_time_conversions.h Always use CLOCK_MONOTONIC for pthreads and semaphores 2017-08-18 09:11:05 -07:00
bionic_tls.h Make tls related header files platform accessible. 2019-09-27 12:14:24 -07:00
bionic_vdso.h Clean up the time(2) implementation. 2018-01-12 15:20:28 -08:00
CachedProperty.h Address a bunch of clang-tidy complaints. 2018-01-19 15:56:12 -08:00
CFIShadow.h Revert "Revert "arm64: expand CFI shadow to cover 48-bit virtual addresses"" 2017-08-03 14:11:28 -07:00
ErrnoRestorer.h Clean up bionic_macros.h a bit. 2018-10-25 11:00:00 -07:00
FdPath.h Add POSIX fexecve. 2017-10-18 16:26:17 -07:00
get_cpu_count_from_string.h Fix the way to count online cpus. 2015-09-29 17:49:37 -07:00
grp_pwd.h Require vendor users and groups to start with vendor_ 2018-05-15 14:10:21 -07:00
icu.h Implement <iconv.h>. 2017-08-25 08:47:41 -07:00
KernelArgumentBlock.h Move the abort message to libc_shared_globals 2018-11-28 14:26:14 -08:00
linker_native_bridge.h Reorganize static TLS memory for ELF TLS 2019-01-11 15:34:22 -08:00
MallocXmlElem.h Refactor the malloc_info code. 2019-03-07 08:39:55 -08:00
NetdClientDispatch.h libnetd_client: support hooking sendto/sendmsg/sendmmsg too. 2019-06-20 08:32:24 -07:00
ScopedPthreadMutexLocker.h Clean up bionic_macros.h a bit. 2018-10-25 11:00:00 -07:00
ScopedReaddir.h Fix/suppress bionic google-explicit-constructor warnings 2019-01-02 11:04:05 -08:00
ScopedRWLock.h Factor out ScopedRWLock into its own header 2019-01-16 01:11:26 -08:00
ScopedSignalBlocker.h Clean up bionic_macros.h a bit. 2018-10-25 11:00:00 -07:00
ScopedSignalHandler.h Fix/suppress bionic google-explicit-constructor warnings 2019-01-02 11:04:05 -08:00
sigrtmin.h Reserve signal for java heap dumps. 2019-07-23 16:38:00 +01:00
SigSetConverter.h Add sigset64_t and accompanying functions. 2018-01-30 18:47:16 -08:00
thread_private.h Reimplement popen(3)/pclose(3). 2018-07-11 12:15:26 -07:00
WriteProtected.h Fix a few bionic test failures caused by hwasan global instrumentation. 2019-08-15 09:21:34 -07:00