mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 08:32:02 +00:00
51 lines
2.1 KiB
C++
51 lines
2.1 KiB
C++
|
/// In glibc 2.32 new version of some symbols had been added [1]:
|
||
|
///
|
||
|
/// $ nm -D clickhouse | fgrep -e @GLIBC_2.32
|
||
|
/// U pthread_getattr_np@GLIBC_2.32
|
||
|
/// U pthread_sigmask@GLIBC_2.32
|
||
|
///
|
||
|
/// [1]: https://www.spinics.net/lists/fedora-devel/msg273044.html
|
||
|
///
|
||
|
/// Right now ubuntu 20.04 is used as official image for building
|
||
|
/// ClickHouse, however once it will be switched someone may not be happy
|
||
|
/// with that fact that he/she cannot use official binaries anymore because
|
||
|
/// they have glibc < 2.32.
|
||
|
///
|
||
|
/// To avoid this dependency, let's force previous version of those
|
||
|
/// symbols from glibc.
|
||
|
///
|
||
|
/// Also note, that the following approach had been tested:
|
||
|
/// a) -Wl,--wrap -- but it goes into endless recursion whey you try to do
|
||
|
/// something like this:
|
||
|
///
|
||
|
/// int __pthread_getattr_np_compact(pthread_t thread, pthread_attr_t *attr);
|
||
|
/// GLIBC_COMPAT_SYMBOL(__pthread_getattr_np_compact, pthread_getattr_np)
|
||
|
/// int __pthread_getattr_np_compact(pthread_t thread, pthread_attr_t *attr);
|
||
|
/// int __wrap_pthread_getattr_np(pthread_t thread, pthread_attr_t *attr)
|
||
|
/// {
|
||
|
/// return __pthread_getattr_np_compact(thread, attr);
|
||
|
/// }
|
||
|
///
|
||
|
/// int __pthread_sigmask_compact(int how, const sigset_t *set, sigset_t *oldset);
|
||
|
/// GLIBC_COMPAT_SYMBOL(__pthread_sigmask_compact, pthread_sigmask)
|
||
|
/// int __pthread_sigmask_compact(int how, const sigset_t *set, sigset_t *oldset);
|
||
|
/// int __wrap_pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset)
|
||
|
/// {
|
||
|
/// return __pthread_sigmask_compact(how, set, oldset);
|
||
|
/// }
|
||
|
///
|
||
|
/// b) -Wl,--defsym -- same problems (and you cannot use version of symbol with
|
||
|
/// version in the expression)
|
||
|
/// c) this approach -- simply add this file with -include directive.
|
||
|
|
||
|
#if defined(__amd64__)
|
||
|
#define GLIBC_COMPAT_SYMBOL(func) __asm__(".symver " #func "," #func "@GLIBC_2.2.5");
|
||
|
#elif defined(__aarch64__)
|
||
|
#define GLIBC_COMPAT_SYMBOL(func) __asm__(".symver " #func "," #func "@GLIBC_2.17");
|
||
|
#else
|
||
|
#error Your platform is not supported.
|
||
|
#endif
|
||
|
|
||
|
GLIBC_COMPAT_SYMBOL(pthread_sigmask)
|
||
|
GLIBC_COMPAT_SYMBOL(pthread_getattr_np)
|