Hi! I've noticed libtsan can't be installed via rpm, due to invalid use of dynamic linker's internals:
#ifdef __i386__ # define INTERNAL_FUNCTION __attribute__((regparm(3), stdcall)) #else # define INTERNAL_FUNCTION #endif extern "C" void _dl_get_tls_static_info(size_t*, size_t*) __attribute__((weak)) INTERNAL_FUNCTION; static int InitTlsSize() { typedef void (*get_tls_func)(size_t*, size_t*) INTERNAL_FUNCTION; get_tls_func get_tls = &_dl_get_tls_static_info; if (get_tls == 0) { void *get_tls_static_info_ptr = dlsym(RTLD_NEXT, "_dl_get_tls_static_info"); CHECK_EQ(sizeof(get_tls), sizeof(get_tls_static_info_ptr)); internal_memcpy(&get_tls, &get_tls_static_info_ptr, sizeof(get_tls_static_info_ptr)); } CHECK_NE(get_tls, 0); size_t tls_size = 0; size_t tls_align = 0; get_tls(&tls_size, &tls_align); return tls_size; } The get_tls_func get_tls = &_dl_get_tls_static_info; is what precludes libtsan installation, then libtsan.so refers to _dl_get_tls_static_info@@GLIBC_PRIVATE symbol and at least our rpm dependency stuff reject that, because nothing outside of glibc should ever refer to symbols marked as GLIBC_PRIVATE. Those are exported solely because they are used by other libraries that are part of glibc (in this case libc.so.6). If you need to get at the info it returns, please talk to libc-al...@sourceware.org for help. The first line certainly must go, the second alternative (dlsym) will not prevent installation, but may break anytime, glibc doesn't guarantee anything about the ABI of the symbols, it can be removed any time, can change parameters/return values without warning. Jakub