summaryrefslogtreecommitdiff
path: root/libc/malloc_hooks/malloc_hooks.cpp
diff options
context:
space:
mode:
authorMatthew Maurer <mmaurer@google.com>2020-10-23 09:55:33 -0700
committerRyan Prichard <rprichard@google.com>2020-11-02 17:28:41 -0800
commitde30635eb67282b37454dc0d3f67507feb172967 (patch)
tree8c9d46b1b7c0c245c33efb14ed919dfec88baae8 /libc/malloc_hooks/malloc_hooks.cpp
parent10c2875934c9f47b39c1ffd9a3ecbe63d59f3183 (diff)
Put __*_ARRAY__ symbols before prioritized init/fini funcs
A constructor or destructor function with an integral priority is placed in an .init_array or .fini_array section with the priority suffixed to the section name: - __attribute__((constructor)) ==> .init_array - __attribute__((constructor(42))) ==> .init_array.42 The suffixed init/fini sections appear before the unsuffixed sections, so the prioritized functions appeared before the __{INIT,FINI}_ARRAY__ symbols and were dropped when the symbols were used. The (static) linker doesn't recognize priority suffixes on .preinit_array. This bug affected .init_array and .fini_array for static executables. For dynamic executables, only .fini_array was affected, because .init_array is handled by the dynamic loader instead, which uses DT_INIT_ARRAY[SZ]. For DSOs, neither is affected, because the two sections are only handled by the dynamic loader. This patch also fixes a minor inconsistency where dynamic init/preinit were passed argc/argv/envp, but static were not. Bug: http://b/170983066 Test: bionic-unit-tests Change-Id: I0fffa776e5d9bdb6f8af06b4c1af148236742fef
Diffstat (limited to 'libc/malloc_hooks/malloc_hooks.cpp')
0 files changed, 0 insertions, 0 deletions