From 8ab1828f073b5eab606161681a5f260cc0e77bf1 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Mon, 12 Jun 2017 07:59:05 -0700 Subject: valgrind: Fix ptest build with musl musl unearthed a problem when building out of tree, config.h was being used from $(srcdir) instead of generated config.h in $(builddir) this assumed functions e.g. mallinfo() and more which are not in musl as a result tests broke. Also add fixes to build remaining tests when building on musl pass -fno-pie as it cant use PIE especially in ptests/x86_64 Signed-off-by: Khem Raj Signed-off-by: Richard Purdie --- ...e-Rename-_sifields-to-__si_fields-on-musl.patch | 31 ++++++++++++++ ...tr_tester.c-Limit-rawmemchr-test-to-glibc.patch | 39 +++++++++++++++++ ...02-context-APIs-are-not-available-on-musl.patch | 49 ++++++++++++++++++++++ ...rrect-include-directive-path-for-config.h.patch | 45 ++++++++++++++++++++ ...4-pth_atfork1.c-Define-error-API-for-musl.patch | 37 ++++++++++++++++ ...erifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch | 30 +++++++++++++ ...d3.c-Dereference-pthread_t-before-adding-.patch | 32 ++++++++++++++ meta/recipes-devtools/valgrind/valgrind_3.12.0.bb | 12 ++++++ 8 files changed, 275 insertions(+) create mode 100644 meta/recipes-devtools/valgrind/valgrind/0001-sigqueue-Rename-_sifields-to-__si_fields-on-musl.patch create mode 100644 meta/recipes-devtools/valgrind/valgrind/0001-str_tester.c-Limit-rawmemchr-test-to-glibc.patch create mode 100644 meta/recipes-devtools/valgrind/valgrind/0002-context-APIs-are-not-available-on-musl.patch create mode 100644 meta/recipes-devtools/valgrind/valgrind/0003-correct-include-directive-path-for-config.h.patch create mode 100644 meta/recipes-devtools/valgrind/valgrind/0004-pth_atfork1.c-Define-error-API-for-musl.patch create mode 100644 meta/recipes-devtools/valgrind/valgrind/0005-tc20_verifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch create mode 100644 meta/recipes-devtools/valgrind/valgrind/0006-pth_detached3.c-Dereference-pthread_t-before-adding-.patch (limited to 'meta/recipes-devtools/valgrind') diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-sigqueue-Rename-_sifields-to-__si_fields-on-musl.patch b/meta/recipes-devtools/valgrind/valgrind/0001-sigqueue-Rename-_sifields-to-__si_fields-on-musl.patch new file mode 100644 index 0000000000..27366153f7 --- /dev/null +++ b/meta/recipes-devtools/valgrind/valgrind/0001-sigqueue-Rename-_sifields-to-__si_fields-on-musl.patch @@ -0,0 +1,31 @@ +From 64ad2744acfb4fa40b1c114633a053f87125a203 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 10 Jun 2017 00:46:39 -0700 +Subject: [PATCH 1/6] sigqueue: Rename _sifields to __si_fields on musl + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +--- + memcheck/tests/linux/sigqueue.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/memcheck/tests/linux/sigqueue.c b/memcheck/tests/linux/sigqueue.c +index d18bd72..acb7cba 100644 +--- a/memcheck/tests/linux/sigqueue.c ++++ b/memcheck/tests/linux/sigqueue.c +@@ -8,6 +8,11 @@ + #include + #include + ++/* musl libc defines siginfo_t __si_fields instead of _sifields */ ++#if defined(__linux__) && !defined(__GLIBC__) ++#define _sifields __si_fields ++#endif ++ + int main(int argc, char **argv) + { + siginfo_t *si; +-- +2.13.1 + diff --git a/meta/recipes-devtools/valgrind/valgrind/0001-str_tester.c-Limit-rawmemchr-test-to-glibc.patch b/meta/recipes-devtools/valgrind/valgrind/0001-str_tester.c-Limit-rawmemchr-test-to-glibc.patch new file mode 100644 index 0000000000..185b8f9e60 --- /dev/null +++ b/meta/recipes-devtools/valgrind/valgrind/0001-str_tester.c-Limit-rawmemchr-test-to-glibc.patch @@ -0,0 +1,39 @@ +From de692e359801a1f0488c76267e4f904dd2efe754 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 10 Jun 2017 00:39:07 -0700 +Subject: [PATCH] str_tester.c: Limit rawmemchr() test to glibc + +rawmemchr() is a GNU extention therefore mark it so + +Signed-off-by: Khem Raj +--- +Upstream-Status: Pending + + memcheck/tests/str_tester.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/memcheck/tests/str_tester.c b/memcheck/tests/str_tester.c +index 9f7790a..47e4b4a 100644 +--- a/memcheck/tests/str_tester.c ++++ b/memcheck/tests/str_tester.c +@@ -504,7 +504,7 @@ test_strchrnul (void) + #endif + + // DDD: better done by testing for the function. +-#if !defined(__APPLE__) && !defined(__sun) ++#if !defined(__APPLE__) && !defined(__sun) && defined(__GLIBC__) + static void + test_rawmemchr (void) + { +@@ -1442,7 +1442,7 @@ main (void) + test_strchrnul (); + # endif + +-# if !defined(__APPLE__) && !defined(__sun) ++# if !defined(__APPLE__) && !defined(__sun) && defined(__GLIBC__) + /* rawmemchr. */ + test_rawmemchr (); + # endif +-- +2.13.1 + diff --git a/meta/recipes-devtools/valgrind/valgrind/0002-context-APIs-are-not-available-on-musl.patch b/meta/recipes-devtools/valgrind/valgrind/0002-context-APIs-are-not-available-on-musl.patch new file mode 100644 index 0000000000..3f9f33b487 --- /dev/null +++ b/meta/recipes-devtools/valgrind/valgrind/0002-context-APIs-are-not-available-on-musl.patch @@ -0,0 +1,49 @@ +From 862b807076d57f2f58ed9d572ddac8bb402774a2 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 10 Jun 2017 01:01:10 -0700 +Subject: [PATCH 2/6] context APIs are not available on musl + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +--- + memcheck/tests/linux/stack_changes.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/memcheck/tests/linux/stack_changes.c b/memcheck/tests/linux/stack_changes.c +index a978fc2..ffb49c6 100644 +--- a/memcheck/tests/linux/stack_changes.c ++++ b/memcheck/tests/linux/stack_changes.c +@@ -10,6 +10,7 @@ + // This test is checking the libc context calls (setcontext, etc.) and + // checks that Valgrind notices their stack changes properly. + ++#ifdef __GLIBC__ + typedef struct ucontext mycontext; + + mycontext ctx1, ctx2, oldc; +@@ -51,9 +52,11 @@ int init_context(mycontext *uc) + + return ret; + } ++#endif + + int main(int argc, char **argv) + { ++#ifdef __GLIBC__ + int c1 = init_context(&ctx1); + int c2 = init_context(&ctx2); + +@@ -66,6 +69,8 @@ int main(int argc, char **argv) + //free(ctx1.uc_stack.ss_sp); + VALGRIND_STACK_DEREGISTER(c2); + //free(ctx2.uc_stack.ss_sp); +- ++#else ++ printf("libc context call APIs e.g. getcontext() are deprecated by posix\n"); ++#endif + return 0; + } +-- +2.13.1 + diff --git a/meta/recipes-devtools/valgrind/valgrind/0003-correct-include-directive-path-for-config.h.patch b/meta/recipes-devtools/valgrind/valgrind/0003-correct-include-directive-path-for-config.h.patch new file mode 100644 index 0000000000..c2965c40df --- /dev/null +++ b/meta/recipes-devtools/valgrind/valgrind/0003-correct-include-directive-path-for-config.h.patch @@ -0,0 +1,45 @@ +From ecbdea7bd8b08205f1bc3f6b72d4b4a80f313fcb Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 10 Jun 2017 01:03:17 -0700 +Subject: [PATCH 3/6] correct include directive path for config.h + +when building out of source tree, it can not find +the generated config.h otherwise + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +--- + memcheck/tests/linux/syscalls-2007.c | 2 +- + memcheck/tests/linux/syslog-syscall.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/memcheck/tests/linux/syscalls-2007.c b/memcheck/tests/linux/syscalls-2007.c +index b61c6d5..cc3fd62 100644 +--- a/memcheck/tests/linux/syscalls-2007.c ++++ b/memcheck/tests/linux/syscalls-2007.c +@@ -10,7 +10,7 @@ + + #define _GNU_SOURCE + +-#include "../../config.h" ++#include "config.h" + #include + #include + #include +diff --git a/memcheck/tests/linux/syslog-syscall.c b/memcheck/tests/linux/syslog-syscall.c +index 1143722..21e758b 100644 +--- a/memcheck/tests/linux/syslog-syscall.c ++++ b/memcheck/tests/linux/syslog-syscall.c +@@ -6,7 +6,7 @@ + * klogctl(). + */ + +-#include "../../config.h" ++#include "config.h" + #include + #if defined(HAVE_SYS_KLOG_H) + #include +-- +2.13.1 + diff --git a/meta/recipes-devtools/valgrind/valgrind/0004-pth_atfork1.c-Define-error-API-for-musl.patch b/meta/recipes-devtools/valgrind/valgrind/0004-pth_atfork1.c-Define-error-API-for-musl.patch new file mode 100644 index 0000000000..1cb7062545 --- /dev/null +++ b/meta/recipes-devtools/valgrind/valgrind/0004-pth_atfork1.c-Define-error-API-for-musl.patch @@ -0,0 +1,37 @@ +From fb77fef4f866dac7bcc6d1ae025da60564869f84 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 10 Jun 2017 01:06:11 -0700 +Subject: [PATCH 4/6] pth_atfork1.c: Define error() API for musl + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +--- + none/tests/pth_atfork1.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/none/tests/pth_atfork1.c b/none/tests/pth_atfork1.c +index 34201ef..b7f5f2d 100644 +--- a/none/tests/pth_atfork1.c ++++ b/none/tests/pth_atfork1.c +@@ -18,7 +18,7 @@ + Boston, MA 02111-1307, USA. */ + + #include +-#if !defined(__APPLE__) && !defined(__sun) ++#if !defined(__APPLE__) && !defined(__sun) && defined(__GLIBC__) + # include + #endif + #include +@@ -27,7 +27,7 @@ + #include + #include + +-#if defined(__APPLE__) || defined(__sun) ++#if defined(__APPLE__) || defined(__sun) || (defined(__linux__) && !defined(__GLIBC__)) + #include /* strerror */ + static void error (int status, int errnum, char* msg) + { +-- +2.13.1 + diff --git a/meta/recipes-devtools/valgrind/valgrind/0005-tc20_verifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch b/meta/recipes-devtools/valgrind/valgrind/0005-tc20_verifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch new file mode 100644 index 0000000000..6176640e42 --- /dev/null +++ b/meta/recipes-devtools/valgrind/valgrind/0005-tc20_verifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch @@ -0,0 +1,30 @@ +From b4b9f072c22f96844e02cb9d68f7ff2408680817 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 10 Jun 2017 01:07:59 -0700 +Subject: [PATCH 5/6] tc20_verifywrap.c: Fake __GLIBC_PREREQ with musl + +similar to sun + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +--- + helgrind/tests/tc20_verifywrap.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/helgrind/tests/tc20_verifywrap.c b/helgrind/tests/tc20_verifywrap.c +index c110000..a311a49 100644 +--- a/helgrind/tests/tc20_verifywrap.c ++++ b/helgrind/tests/tc20_verifywrap.c +@@ -20,7 +20,7 @@ + + #if !defined(__APPLE__) + +-#if defined(__sun__) ++#if defined(__sun__) || (defined(__linux__) && !defined(__GLIBC__)) + /* Fake __GLIBC_PREREQ on Solaris. Pretend glibc >= 2.4. */ + # define __GLIBC_PREREQ + #else +-- +2.13.1 + diff --git a/meta/recipes-devtools/valgrind/valgrind/0006-pth_detached3.c-Dereference-pthread_t-before-adding-.patch b/meta/recipes-devtools/valgrind/valgrind/0006-pth_detached3.c-Dereference-pthread_t-before-adding-.patch new file mode 100644 index 0000000000..05886c743d --- /dev/null +++ b/meta/recipes-devtools/valgrind/valgrind/0006-pth_detached3.c-Dereference-pthread_t-before-adding-.patch @@ -0,0 +1,32 @@ +From a6547fc17c120dbd95b852f50b0c4bdee4fedb9a Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 10 Jun 2017 01:20:32 -0700 +Subject: [PATCH 6/6] pth_detached3.c: Dereference pthread_t before adding + offset to it + +Fixes +error: invalid use of undefined type 'struct __pthread' + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +--- + drd/tests/pth_detached3.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drd/tests/pth_detached3.c b/drd/tests/pth_detached3.c +index c02eef1..35d43a6 100644 +--- a/drd/tests/pth_detached3.c ++++ b/drd/tests/pth_detached3.c +@@ -21,7 +21,7 @@ int main(int argc, char** argv) + pthread_detach(thread); + + /* Invoke pthread_detach() with an invalid thread ID. */ +- pthread_detach(thread + 8); ++ pthread_detach((pthread_t*)(&thread + 8)); + + fprintf(stderr, "Finished.\n"); + +-- +2.13.1 + diff --git a/meta/recipes-devtools/valgrind/valgrind_3.12.0.bb b/meta/recipes-devtools/valgrind/valgrind_3.12.0.bb index d5a8dda487..d7b6d77000 100644 --- a/meta/recipes-devtools/valgrind/valgrind_3.12.0.bb +++ b/meta/recipes-devtools/valgrind/valgrind_3.12.0.bb @@ -24,6 +24,13 @@ SRC_URI = "http://www.valgrind.org/downloads/valgrind-${PV}.tar.bz2 \ file://avoid-neon-for-targets-which-don-t-support-it.patch \ file://valgrind-make-ld-XXX.so-strlen-intercept-optional.patch \ file://0001-makefiles-Drop-setting-mcpu-to-cortex-a8-on-arm-arch.patch \ + file://0001-str_tester.c-Limit-rawmemchr-test-to-glibc.patch \ + file://0001-sigqueue-Rename-_sifields-to-__si_fields-on-musl.patch \ + file://0002-context-APIs-are-not-available-on-musl.patch \ + file://0003-correct-include-directive-path-for-config.h.patch \ + file://0004-pth_atfork1.c-Define-error-API-for-musl.patch \ + file://0005-tc20_verifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch \ + file://0006-pth_detached3.c-Dereference-pthread_t-before-adding-.patch \ " SRC_URI_append_libc-musl = "\ file://0001-fix-build-for-musl-targets.patch \ @@ -67,6 +74,7 @@ CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'" SELECTED_OPTIMIZATION = "${DEBUG_FLAGS}" CFLAGS_append_libc-uclibc = " -D__UCLIBC__ " +CFLAGS += "-no-pie" def get_mcpu(d): for arg in (d.getVar('TUNE_CCARGS') or '').split(): @@ -76,6 +84,10 @@ def get_mcpu(d): continue return "" +do_configure_prepend () { + rm -rf ${S}/config.h +} + do_install_append () { install -m 644 ${B}/default.supp ${D}/${libdir}/valgrind/ } -- cgit 1.2.3-korg