// that its address is listed in libc.so's .init_array section.
// This ensures that the function is called by the dynamic linker
// as soon as the shared library is loaded.
-void __attribute__((constructor)) __libc_preinit(void);
-
-void __libc_preinit() {
+__attribute__((constructor)) static void __libc_preinit() {
// Read the kernel argument block pointer from TLS.
void* tls = const_cast<void*>(__get_tls());
KernelArgumentBlock** args_slot = &reinterpret_cast<KernelArgumentBlock**>(tls)[TLS_SLOT_BIONIC_PREINIT];
malloc_debug_init();
}
-void __libc_postfini() {
+__LIBC_HIDDEN__ void __libc_postfini() {
// A hook for the debug malloc library to let it know that we're shutting down.
malloc_debug_fini();
}
}
};
-tls_map_t ScopedTlsMapAccess::s_tls_map_;
-pthread_mutex_t ScopedTlsMapAccess::s_tls_map_lock_;
+__LIBC_HIDDEN__ tls_map_t ScopedTlsMapAccess::s_tls_map_;
+__LIBC_HIDDEN__ pthread_mutex_t ScopedTlsMapAccess::s_tls_map_lock_;
__LIBC_HIDDEN__ void pthread_key_clean_all() {
ScopedTlsMapAccess tls_map;
#if defined(__cplusplus)
struct KernelArgumentBlock;
-extern void __libc_init_tls(KernelArgumentBlock& args);
+extern __LIBC_HIDDEN__ void __libc_init_tls(KernelArgumentBlock& args);
#endif
#endif /* _SYS_TLS_H */