platform_bionic/linker
Vic Yang d8bef67153 Staticlly allocate string buffers for realpath_fd()
Creating two huge buffers with std::vector, as it is now, is very
expensive, because it ends up being satisfied with mmap()/munmap().
Instead, we statically allocate a large string buffer while resizing
the other one to be a smaller and more appropriate size so that it can
be placed on the stack.

Note that this does mean that we increase linker data segment by 4KB
and that increases the overall system memory usage by about 400KB.
However, since that additional page is mostly zeroed with only some
ASCII text, it should be fairly easy to compress when it's swapped out
to ZRAM.

Test: Run with strace and observe no mmap/munmap around readlinkat().
Test: Measure average linker time of starting cameraserver on a Go
      device and see ~3% speed-up.
Bug: 132783386

Change-Id: I600cc7a92be316ef67440a9a28c05d18de229f6c
2019-05-16 12:10:10 -07:00
..
arch Implement arm64 TLSDESC 2019-01-29 08:33:09 +00:00
Android.bp linker: support ldd(1)-like behavior via --list. 2019-05-09 22:12:17 -07:00
dlfcn.cpp Move dlerror out of a TLS slot and into a pthread_internal_t member. 2018-12-06 05:19:57 +00:00
ld.config.format.md linker: Add support for "whitelisted" property in linker config files 2019-03-20 10:20:49 -07:00
ld_android.cpp Expose libc_shared_globals to libc.so with symbol 2018-11-28 14:26:14 -08:00
ldd linker: support ldd(1)-like behavior via --list. 2019-05-09 22:12:17 -07:00
linked_list.h Clean up bionic_macros.h a bit. 2018-10-25 11:00:00 -07:00
linked_list_test.cpp Switch linker tests to Android.bp. 2019-02-15 14:40:08 -08:00
linker.arm.map Expose libc_shared_globals to libc.so with symbol 2018-11-28 14:26:14 -08:00
linker.cpp Staticlly allocate string buffers for realpath_fd() 2019-05-16 12:10:10 -07:00
linker.generic.map Expose libc_shared_globals to libc.so with symbol 2018-11-28 14:26:14 -08:00
linker.h linker: allow using reserved space for multiple libraries. 2019-02-20 17:29:36 -05:00
linker_block_allocator.cpp Cosmetic changes to linker allocator and config 2019-03-12 01:11:24 +00:00
linker_block_allocator.h Purge linker block allocators before leaving linker 2019-01-30 22:13:13 -08:00
linker_block_allocator_test.cpp Switch linker tests to Android.bp. 2019-02-15 14:40:08 -08:00
linker_cfi.cpp Add PR_SET_VMA and PR_SET_VMA_ANON_NAME to <sys/prctl.h>. 2018-08-22 10:36:23 -07:00
linker_cfi.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_common_types.h Clean up bionic_macros.h a bit. 2018-10-25 11:00:00 -07:00
linker_config.cpp Use std::move() for rvalue-reference setters and ctors 2019-03-20 10:20:49 -07:00
linker_config.h Use std::move() for rvalue-reference setters and ctors 2019-03-20 10:20:49 -07:00
linker_config_test.cpp linker: Add support for "whitelisted" property in linker config files 2019-03-20 10:20:49 -07:00
linker_debug.h libasync_safe: stop clobbering other folks' identifiers. 2019-02-14 14:23:13 -08:00
linker_dlwarning.cpp Unify linker files under one license (BSD) 2017-02-15 15:35:33 -08:00
linker_dlwarning.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_exidx_static.c Implement __gnu_Unwind_Find_exidx/__cxa_type_match 2017-08-29 18:18:27 +02:00
linker_gdb_support.cpp Unify linker files under one license (BSD) 2017-02-15 15:35:33 -08:00
linker_gdb_support.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_globals.cpp Be clearer about linker warnings. 2018-02-28 12:37:28 -08:00
linker_globals.h linker: support ldd(1)-like behavior via --list. 2019-05-09 22:12:17 -07:00
linker_libc_support.c Unify linker files under one license (BSD) 2017-02-15 15:35:33 -08:00
linker_libcxx_support.cpp Adapt to the new libc++/libc++abi update. 2018-01-08 14:44:42 -08:00
linker_logger.cpp linker: only generate log messages when logging is enabled 2019-01-17 14:24:14 -08:00
linker_logger.h Add more linker debug. 2019-03-19 14:03:18 +00:00
linker_main.cpp linker: support ldd(1)-like behavior via --list. 2019-05-09 22:12:17 -07:00
linker_main.h Allow invoking the linker on an executable. 2018-10-10 14:31:06 -07:00
linker_mapped_file_fragment.cpp Unify linker files under one license (BSD) 2017-02-15 15:35:33 -08:00
linker_mapped_file_fragment.h Clean up bionic_macros.h a bit. 2018-10-25 11:00:00 -07:00
linker_memory.cpp Move the linker allocator into libc 2019-01-25 15:31:35 -08:00
linker_mips.cpp MIPS: Fix MIPS linker VDSO issues 2017-10-13 12:08:30 +02:00
linker_namespaces.cpp linker: Add support for "whitelisted" property in linker config files 2019-03-20 10:20:49 -07:00
linker_namespaces.h Use std::move() for rvalue-reference setters and ctors 2019-03-20 10:20:49 -07:00
linker_phdr.cpp Fix DLEXT_WRITE_RELRO when loading multiple libs. 2019-04-02 18:06:12 -04:00
linker_phdr.h Fix DLEXT_WRITE_RELRO when loading multiple libs. 2019-04-02 18:06:12 -04:00
linker_reloc_iterators.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_relocs.h Add generic TLS linker reloc macros 2019-01-02 14:36:26 -08:00
linker_sdk_versions.cpp Move API levels from uint32_t to int. 2018-11-13 21:25:07 -08:00
linker_sleb128.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_sleb128_test.cpp Switch linker tests to Android.bp. 2019-02-15 14:40:08 -08:00
linker_soinfo.cpp linker: support ldd(1)-like behavior via --list. 2019-05-09 22:12:17 -07:00
linker_soinfo.h linker: allow using reserved space for multiple libraries. 2019-02-20 17:29:36 -05:00
linker_test_globals.cpp Switch linker tests to Android.bp. 2019-02-15 14:40:08 -08:00
linker_tls.cpp libasync_safe: stop clobbering other folks' identifiers. 2019-02-14 14:23:13 -08:00
linker_tls.h Implement arm64 TLSDESC 2019-01-29 08:33:09 +00:00
linker_utils.cpp Merge "linker: changes to init work arounds" 2018-11-29 16:50:37 +00:00
linker_utils.h linker: changes to init work arounds 2018-11-08 21:50:19 +00:00
linker_utils_test.cpp Switch linker tests to Android.bp. 2019-02-15 14:40:08 -08:00
linker_wrapper.cpp Rework the linker_wrapper to work with lld 2018-10-22 22:52:25 +00:00
MODULE_LICENSE_APACHE2 Move libdl and linker to static NOTICE files. 2019-04-19 14:18:07 -07:00
NOTICE Move libdl and linker to static NOTICE files. 2019-04-19 14:18:07 -07:00
rt.cpp More dynamic linker cleanup. 2012-10-30 16:35:38 -07:00