1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-08 05:09:24 +00:00

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

(From OE-Core rev: 8ab1828f073b5eab606161681a5f260cc0e77bf1)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj
2017-06-12 07:59:05 -07:00
committed by Richard Purdie
parent 93ddbfd17d
commit 98a967d10d
8 changed files with 275 additions and 0 deletions
@@ -0,0 +1,31 @@
From 64ad2744acfb4fa40b1c114633a053f87125a203 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
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 <raj.khem@gmail.com>
---
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 <syscall.h>
#include <unistd.h>
+/* 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
@@ -0,0 +1,39 @@
From de692e359801a1f0488c76267e4f904dd2efe754 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
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 <raj.khem@gmail.com>
---
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
@@ -0,0 +1,49 @@
From 862b807076d57f2f58ed9d572ddac8bb402774a2 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
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 <raj.khem@gmail.com>
---
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
@@ -0,0 +1,45 @@
From ecbdea7bd8b08205f1bc3f6b72d4b4a80f313fcb Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
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 <raj.khem@gmail.com>
---
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 <fcntl.h>
#include <signal.h>
#include <stdint.h>
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 <stdio.h>
#if defined(HAVE_SYS_KLOG_H)
#include <sys/klog.h>
--
2.13.1
@@ -0,0 +1,37 @@
From fb77fef4f866dac7bcc6d1ae025da60564869f84 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
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 <raj.khem@gmail.com>
---
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 <errno.h>
-#if !defined(__APPLE__) && !defined(__sun)
+#if !defined(__APPLE__) && !defined(__sun) && defined(__GLIBC__)
# include <error.h>
#endif
#include <stdlib.h>
@@ -27,7 +27,7 @@
#include <sys/wait.h>
#include <stdio.h>
-#if defined(__APPLE__) || defined(__sun)
+#if defined(__APPLE__) || defined(__sun) || (defined(__linux__) && !defined(__GLIBC__))
#include <string.h> /* strerror */
static void error (int status, int errnum, char* msg)
{
--
2.13.1
@@ -0,0 +1,30 @@
From b4b9f072c22f96844e02cb9d68f7ff2408680817 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
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 <raj.khem@gmail.com>
---
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
@@ -0,0 +1,32 @@
From a6547fc17c120dbd95b852f50b0c4bdee4fedb9a Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
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 <raj.khem@gmail.com>
---
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
@@ -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/
}