| From 50859f3577418cc42f76e1319e699202a615bbe1 Mon Sep 17 00:00:00 2001 |
| From: Peter Seiderer <ps.report@gmx.net> |
| Date: Sat, 31 Oct 2015 19:45:04 +0100 |
| Subject: [PATCH] Fixes for musl libc. |
| |
| - add musl libc detection (prevents configure error) |
| - adjust preload and symbol names (based on the OpenWrt |
| patch, see [1]) |
| |
| [1] https://dev.openwrt.org/browser/trunk/package/devel/valgrind/patches/200-musl_fix.patch?rev=46302 |
| |
| Signed-off-by: Peter Seiderer <ps.report@gmx.net> |
| --- |
| configure.ac | 16 ++++++++++++++-- |
| coregrind/vg_preloaded.c | 2 +- |
| include/pub_tool_redir.h | 9 ++++++++- |
| 3 files changed, 23 insertions(+), 4 deletions(-) |
| |
| diff --git a/configure.ac b/configure.ac |
| index 8ab7f9b..e865bf5 100644 |
| --- a/configure.ac |
| +++ b/configure.ac |
| @@ -1009,6 +1009,13 @@ if test x$VGCONF_PLATFORM_PRI_CAPS = xX86_SOLARIS \ |
| GLIBC_VERSION="solaris" |
| fi |
| |
| +# GLIBC_VERSION is empty if a musl libc is used, so use the toolchain tuple |
| +# in this case. |
| +if test x$GLIBC_VERSION = x; then |
| + if $CC -dumpmachine | grep -q musl; then |
| + GLIBC_VERSION=musl |
| + fi |
| +fi |
| |
| AC_MSG_CHECKING([the glibc version]) |
| |
| @@ -1064,10 +1071,15 @@ case "${GLIBC_VERSION}" in |
| # DEFAULT_SUPP set in host_os switch-case above. |
| # No other suppression file is used. |
| ;; |
| + musl) |
| + AC_MSG_RESULT(Musl) |
| + AC_DEFINE([MUSL_LIBC], 1, [Define to 1 if you're using Musl libc]) |
| + # no DEFAULT_SUPP file yet for musl libc. |
| + ;; |
| 2.0|2.1|*) |
| AC_MSG_RESULT([unsupported version ${GLIBC_VERSION}]) |
| - AC_MSG_ERROR([Valgrind requires glibc version 2.2 or later,]) |
| - AC_MSG_ERROR([Darwin libc, Bionic libc or Solaris libc]) |
| + AC_MSG_ERROR([Valgrind requires glibc version 2.2 or later, uClibc,]) |
| + AC_MSG_ERROR([musl libc, Darwin libc, Bionic libc or Solaris libc]) |
| ;; |
| esac |
| |
| diff --git a/coregrind/vg_preloaded.c b/coregrind/vg_preloaded.c |
| index 2ea7a7a..7b51aba 100644 |
| --- a/coregrind/vg_preloaded.c |
| +++ b/coregrind/vg_preloaded.c |
| @@ -56,7 +56,7 @@ |
| void VG_NOTIFY_ON_LOAD(freeres)( void ); |
| void VG_NOTIFY_ON_LOAD(freeres)( void ) |
| { |
| -# if !defined(__UCLIBC__) \ |
| +# if !defined(__UCLIBC__) && !defined(MUSL_LIBC) \ |
| && !defined(VGPV_arm_linux_android) \ |
| && !defined(VGPV_x86_linux_android) \ |
| && !defined(VGPV_mips32_linux_android) \ |
| diff --git a/include/pub_tool_redir.h b/include/pub_tool_redir.h |
| index bac00d7..babcf9a 100644 |
| --- a/include/pub_tool_redir.h |
| +++ b/include/pub_tool_redir.h |
| @@ -242,8 +242,11 @@ |
| /* --- Soname of the standard C library. --- */ |
| |
| #if defined(VGO_linux) || defined(VGO_solaris) |
| +# if defined(MUSL_LIBC) |
| +# define VG_Z_LIBC_SONAME libcZdZa // libc.* |
| +#else |
| # define VG_Z_LIBC_SONAME libcZdsoZa // libc.so* |
| - |
| +#endif |
| #elif defined(VGO_darwin) && (DARWIN_VERS <= DARWIN_10_6) |
| # define VG_Z_LIBC_SONAME libSystemZdZaZddylib // libSystem.*.dylib |
| |
| @@ -274,7 +277,11 @@ |
| /* --- Soname of the pthreads library. --- */ |
| |
| #if defined(VGO_linux) |
| +# if defined(MUSL_LIBC) |
| +# define VG_Z_LIBPTHREAD_SONAME libcZdZa // libc.* |
| +#else |
| # define VG_Z_LIBPTHREAD_SONAME libpthreadZdsoZd0 // libpthread.so.0 |
| +#endif |
| #elif defined(VGO_darwin) |
| # define VG_Z_LIBPTHREAD_SONAME libSystemZdZaZddylib // libSystem.*.dylib |
| #elif defined(VGO_solaris) |
| -- |
| 2.1.4 |
| |