valgrind: fix musl compile
PATCH v3 1/1 valgrind: fix musl compile
Add musl libc detection (based on suggestions by Romain Naour and Arnout Vandecappelle) and add some tweaks for musl support (based on OpenWRT patch [1]).
Fixes ([2]):
checking the glibc version... unsupported version
configure: error: Valgrind requires glibc version 2.2 or later
Patch suggested upstream (see [3]).
[1] https://dev.openwrt.org/browser/trunk/package/devel/valgrind/patches/200-musl_fix.patch?rev=46302
[2] http://autobuild.buildroot.org/results/7b0/7b048ba58918f0a08498c61327fcf35a85a84837
[3] https://bugs.kde.org/show_bug.cgi?id=359202
---
Changes v2 -> v3:
- change valgrind patch define logic (suggested by Arnout Vandecappelle)
Changes v1 -> v2:
- add proper musl libc detection (suggested by Romain Naour and Arnout Vandecappelle)
--- package/valgrind/0004-Fixes-for-musl-libc.patch | 99 +++++++++++++++++++++++++ package/valgrind/valgrind.mk | 3 + 2 files changed, 102 insertions(+) create mode 100644 package/valgrind/0004-Fixes-for-musl-libc.patch
package/valgrind/0004-Fixes-for-musl-libc.patch new file +99 -0
@@ -0,0 +1,99 @@ +From 6916cc1b02ab271f04e925b8fce130c4833b9faf Mon Sep 17 00:00:00 2001 +From: Peter Seiderer <[email protected]> +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 <[email protected]> +--- + 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..d1fa071 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 +
package/valgrind/valgrind.mk +3 -0
@@ -12,6 +12,9 @@ VALGRIND_LICENSE_FILES = COPYING COPYING.DOCS VALGRIND_CONF_OPTS = --disable-ubsan VALGRIND_INSTALL_STAGING = YES +# patch 0004-Fixes-for-musl-libc.patch touching configure.ac +VALGRIND_AUTORECONF = YES + ifeq ($(BR2_GCC_ENABLE_TLS),y) VALGRIND_CONF_OPTS += --enable-tls else
Signature · 1 line
2.1.4
PATCH v3 1/1 valgrind: fix musl compile
Quoted 8 lines · Peter Seiderer
Add musl libc detection (based on suggestions by Romain Naour and Arnout Vandecappelle) and add some tweaks for musl support (based on OpenWRT patch [1]).
Fixes ([2]):
checking the glibc version... unsupported version
configure: error: Valgrind requires glibc version 2.2 or later
Quoted 7 lines
Patch suggested upstream (see [3]).
[1] https://dev.openwrt.org/browser/trunk/package/devel/valgrind/patches/200-musl_fix.patch?rev=46302
[2] http://autobuild.buildroot.org/results/7b0/7b048ba58918f0a08498c61327fcf35a85a84837
[3] https://bugs.kde.org/show_bug.cgi?id=359202Signed-off-by Peter Seiderer <[email protected]>
One small nit:
[snip]
package/valgrind/0004-Fixes-for-musl-libc.patch line 50
Quoted 4 lines
package/valgrind/0004-Fixes-for-musl-libc.patch new file +4
-0+ 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,])
It's uClibc (capital C).
package/valgrind/0004-Fixes-for-musl-libc.patch line 54
Quoted 4 lines
++
AC_MSG_ERROR([musl libc, Darwin libc, Bionic libc or Solaris libc])package/valgrind/0004-Fixes-for-musl-libc.patch new file +3
-0+ ;; + esac +
[snip]
I guess you'll update the upstream bug report as well?
Regards,
Arnout
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286500 Essensium/Mind http://www.mind.be G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle GPG fingerprint: 7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
PATCH v3 1/1 valgrind: fix musl compile
Hello Arnout,
Quoted 21 lines · Arnout Vandecappelle
Quoted 8 lines · Peter Seiderer
Add musl libc detection (based on suggestions by Romain Naour and Arnout Vandecappelle) and add some tweaks for musl support (based on OpenWRT patch [1]).
Fixes ([2]):
checking the glibc version... unsupported version
configure: error: Valgrind requires glibc version 2.2 or laterQuoted 7 lines
Patch suggested upstream (see [3]).
[1] https://dev.openwrt.org/browser/trunk/package/devel/valgrind/patches/200-musl_fix.patch?rev=46302
[2] http://autobuild.buildroot.org/results/7b0/7b048ba58918f0a08498c61327fcf35a85a84837
[3] https://bugs.kde.org/show_bug.cgi?id=359202Signed-off-by Peter Seiderer <[email protected]>One small nit:
Quoted 7 lines
[snip]
package/valgrind/0004-Fixes-for-musl-libc.patch line 50
Quoted 4 lines
package/valgrind/0004-Fixes-for-musl-libc.patch new file +4
-0+ 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,])It's uClibc (capital C).
O.k, fixed it (and many thanks for review patience)...
Quoted 9 lines
package/valgrind/0004-Fixes-for-musl-libc.patch line 54
Quoted 5 lines
++
AC_MSG_ERROR([musl libc, Darwin libc, Bionic libc or Solaris libc])package/valgrind/0004-Fixes-for-musl-libc.patch new file +3
-0+ ;; + esac +[snip]
I guess you'll update the upstream bug report as well?
Yes, done now...
Regards,
Peter
Quoted 4 lines
Regards,
Arnout