xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-devtools/valgrind/valgrind_3.18.1.bb (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1SUMMARY = "Valgrind memory debugger and instrumentation framework"
2HOMEPAGE = "http://valgrind.org/"
3DESCRIPTION = "Valgrind is an instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile your programs in detail."
4BUGTRACKER = "http://valgrind.org/support/bug_reports.html"
5LICENSE = "GPL-2.0-only & GPL-2.0-or-later & BSD-3-Clause"
6LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
7                    file://include/pub_tool_basics.h;beginline=6;endline=29;md5=41c410e8d3f305aee7aaa666b2e4f366 \
8                    file://include/valgrind.h;beginline=1;endline=56;md5=ad3b317f3286b6b704575d9efe6ca5df \
9                    file://COPYING.DOCS;md5=24ea4c7092233849b4394699333b5c56"
10
11DEPENDS = " \
12           ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'boost', '', d)} \
13        "
14
15SRC_URI = "https://sourceware.org/pub/valgrind/valgrind-${PV}.tar.bz2 \
16           file://fixed-perl-path.patch \
17           file://Added-support-for-PPC-instructions-mfatbu-mfatbl.patch \
18           file://run-ptest \
19           file://remove-for-aarch64 \
20           file://remove-for-all \
21           file://taskset_nondeterministic_tests \
22           file://0004-Fix-out-of-tree-builds.patch \
23           file://0005-Modify-vg_test-wrapper-to-support-PTEST-formats.patch \
24           file://use-appropriate-march-mcpu-mfpu-for-ARM-test-apps.patch \
25           file://avoid-neon-for-targets-which-don-t-support-it.patch \
26           file://valgrind-make-ld-XXX.so-strlen-intercept-optional.patch \
27           file://0001-makefiles-Drop-setting-mcpu-to-cortex-a8-on-arm-arch.patch \
28           file://0001-str_tester.c-Limit-rawmemchr-test-to-glibc.patch \
29           file://0001-sigqueue-Rename-_sifields-to-__si_fields-on-musl.patch \
30           file://0002-context-APIs-are-not-available-on-musl.patch \
31           file://0003-correct-include-directive-path-for-config.h.patch \
32           file://0005-tc20_verifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch \
33           file://0001-memcheck-arm64-Define-__THROW-if-not-already-defined.patch \
34           file://0002-memcheck-x86-Define-__THROW-if-not-defined.patch \
35           file://0003-tests-seg_override-Replace-__modify_ldt-with-syscall.patch \
36           file://0001-fix-opcode-not-supported-on-mips32-linux.patch \
37           file://0001-Guard-against-__GLIBC_PREREQ-for-musl-libc.patch \
38           file://0001-Make-local-functions-static-to-avoid-assembler-error.patch \
39           file://0001-Return-a-valid-exit_code-from-vg_regtest.patch \
40           file://0001-valgrind-filter_xml_frames-do-not-filter-usr.patch \
41           file://0001-memcheck-vgtests-remove-fullpath-after-flags.patch \
42           file://s390x_vec_op_t.patch \
43           file://0001-none-tests-fdleak_cmsg.stderr.exp-adjust-tmp-paths.patch \
44           file://0001-memcheck-tests-Fix-timerfd-syscall-test.patch \
45           file://0001-Implement-linux-rseq-syscall-as-ENOSYS.patch \
46           file://0001-docs-Disable-manual-validation.patch \
47           "
48SRC_URI[sha256sum] = "00859aa13a772eddf7822225f4b46ee0d39afbe071d32778da4d99984081f7f5"
49UPSTREAM_CHECK_REGEX = "valgrind-(?P<pver>\d+(\.\d+)+)\.tar"
50
51COMPATIBLE_HOST = '(i.86|x86_64|arm|aarch64|mips|powerpc|powerpc64).*-linux'
52
53# patch 0001-memcheck-vgtests-remove-fullpath-after-flags.patch removes relative path
54# argument. Change expected stderr files accordingly.
55do_patch:append() {
56    bb.build.exec_func('do_sed_paths', d)
57}
58
59do_sed_paths() {
60    sed -i -e 's|tests/||' ${S}/memcheck/tests/badfree3.stderr.exp
61    sed -i -e 's|tests/||' ${S}/memcheck/tests/varinfo5.stderr.exp
62}
63
64# valgrind supports armv7 and above
65COMPATIBLE_HOST:armv4 = 'null'
66COMPATIBLE_HOST:armv5 = 'null'
67COMPATIBLE_HOST:armv6 = 'null'
68
69# valgrind fails with powerpc soft-float
70COMPATIBLE_HOST:powerpc = "${@bb.utils.contains('TARGET_FPU', 'soft', 'null', '.*-linux', d)}"
71
72# X32 isn't supported by valgrind at this time
73COMPATIBLE_HOST:linux-gnux32 = 'null'
74COMPATIBLE_HOST:linux-muslx32 = 'null'
75
76# Disable for some MIPS variants
77COMPATIBLE_HOST:mipsarchr6 = 'null'
78COMPATIBLE_HOST:linux-gnun32 = 'null'
79
80# Disable for powerpc64 with musl
81COMPATIBLE_HOST:libc-musl:powerpc64 = 'null'
82
83# brokenseip is unfortunately required by ptests to pass
84inherit autotools-brokensep ptest multilib_header
85
86EXTRA_OECONF = "--enable-tls --without-mpicc"
87EXTRA_OECONF += "${@['--enable-only32bit','--enable-only64bit'][d.getVar('SITEINFO_BITS') != '32']}"
88
89# valgrind checks host_cpu "armv7*)", so we need to over-ride the autotools.bbclass default --host option
90EXTRA_OECONF:append:arm = " --host=armv7${HOST_VENDOR}-${HOST_OS}"
91
92EXTRA_OEMAKE = "-w"
93
94CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
95
96# valgrind likes to control its own optimisation flags. It generally defaults
97# to -O2 but uses -O0 for some specific test apps etc. Passing our own flags
98# (via CFLAGS) means we interfere with that. Only pass DEBUG_FLAGS to it
99# which fixes build path issue in DWARF.
100SELECTED_OPTIMIZATION = "${DEBUG_FLAGS}"
101
102do_configure:prepend () {
103    rm -rf ${S}/config.h
104    sed -i -e 's:$(abs_top_builddir):$(pkglibdir)/ptest:g' ${S}/none/tests/Makefile.am
105    sed -i -e 's:$(top_builddir):$(pkglibdir)/ptest:g' ${S}/memcheck/tests/Makefile.am
106}
107
108do_install:append () {
109    install -m 644 ${B}/default.supp ${D}/${libexecdir}/valgrind/
110    oe_multilib_header valgrind/config.h
111}
112
113VALGRINDARCH ?= "${TARGET_ARCH}"
114VALGRINDARCH:aarch64 = "arm64"
115VALGRINDARCH:x86-64 = "amd64"
116VALGRINDARCH:x86 = "x86"
117VALGRINDARCH:mips = "mips32"
118VALGRINDARCH:mipsel = "mips32"
119VALGRINDARCH:mips64el = "mips64"
120VALGRINDARCH:powerpc = "ppc"
121VALGRINDARCH:powerpc64 = "ppc64"
122VALGRINDARCH:powerpc64le = "ppc64le"
123
124INHIBIT_PACKAGE_STRIP_FILES = "${PKGD}${libexecdir}/valgrind/vgpreload_memcheck-${VALGRINDARCH}-linux.so"
125
126RDEPENDS:${PN} += "perl"
127
128# valgrind needs debug information for ld.so at runtime in order to
129# redirect functions like strlen.
130RRECOMMENDS:${PN} += "${TCLIBC}-dbg"
131
132RDEPENDS:${PN}-ptest += " bash coreutils curl file \
133   gdb libgomp \
134   perl \
135   perl-module-file-basename perl-module-file-glob perl-module-getopt-long \
136   perl-module-overloading perl-module-cwd perl-module-ipc-open3 \
137   perl-module-carp perl-module-symbol \
138   procps sed ${PN}-dbg ${PN}-src ${TCLIBC}-src gcc-runtime-dbg \
139   util-linux-taskset"
140RDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-utils"
141
142# One of the tests contains a bogus interpreter path on purpose.
143# Skip file dependency check
144SKIP_FILEDEPS:${PN}-ptest = '1'
145INSANE_SKIP:${PN}-ptest = "debug-deps"
146
147do_compile_ptest() {
148    oe_runmake check
149}
150
151do_install_ptest() {
152    chmod +x ${B}/tests/vg_regtest
153
154    # The test application binaries are not automatically installed.
155    # Grab them from the build directory.
156    #
157    # The regression tests require scripts and data files that are not
158    # copied to the build directory.  They must be copied from the
159    # source directory.
160    saved_dir=$PWD
161    for parent_dir in ${S} ${B} ; do
162        cd $parent_dir
163
164        subdirs=" \
165	   .in_place \
166	   cachegrind/tests \
167	   callgrind/tests \
168	   dhat/tests \
169	   drd/tests \
170	   gdbserver_tests \
171	   helgrind/tests \
172	   lackey/tests \
173	   massif/tests \
174	   memcheck/tests \
175	   none/tests \
176	   tests \
177	   exp-bbv/tests \
178	"
179        # Get the vg test scripts, filters, and expected files
180        for dir in $subdirs ; do
181            find $dir | cpio -pvdu ${D}${PTEST_PATH}
182        done
183        cd $saved_dir
184    done
185
186    # The scripts reference config.h so add it to the top ptest dir.
187    cp ${B}/config.h ${D}${PTEST_PATH}
188    install -D ${WORKDIR}/remove-for-aarch64 ${D}${PTEST_PATH}
189    install -D ${WORKDIR}/remove-for-all ${D}${PTEST_PATH}
190    install -D ${WORKDIR}/taskset_nondeterministic_tests ${D}${PTEST_PATH}
191
192    # Add an executable need by none/tests/bigcode
193    mkdir ${D}${PTEST_PATH}/perf
194    cp ${B}/perf/bigcode ${D}${PTEST_PATH}/perf
195
196    # Add an executable needed by memcheck/tests/vcpu_bz2
197    cp ${B}/perf/bz2 ${D}${PTEST_PATH}/perf
198
199    # Make the ptest dir look like the top level valgrind src dir
200    # This is checked by the gdbserver_tests/make_local_links script
201    mkdir ${D}${PTEST_PATH}/coregrind
202    cp ${B}/coregrind/vgdb ${D}${PTEST_PATH}/coregrind
203
204    # Add an executable needed by massif tests
205    cp ${B}/massif/ms_print ${D}${PTEST_PATH}/massif/ms_print
206
207    find ${D}${PTEST_PATH} \
208        \( \
209	   -name "Makefile*" \
210        -o -name "*.o" \
211	\) \
212        -exec rm {} \;
213
214    # These files need to be newer so touch them.
215    touch ${D}${PTEST_PATH}/cachegrind/tests/a.c -r ${D}${PTEST_PATH}/cachegrind/tests/cgout-test
216
217    # find *_annotate in ${bindir} for yocto build
218    sed -i s:\.\./\.\./cachegrind/cg_annotate:${bindir}/cg_annotate: ${D}${PTEST_PATH}/cachegrind/tests/ann1.vgtest
219    sed -i s:\.\./\.\./cachegrind/cg_annotate:${bindir}/cg_annotate: ${D}${PTEST_PATH}/cachegrind/tests/ann2.vgtest
220
221    sed -i s:\.\./\.\./callgrind/callgrind_annotate:${bindir}/callgrind_annotate: ${D}${PTEST_PATH}/callgrind/tests/ann1.vgtest
222    sed -i s:\.\./\.\./callgrind/callgrind_annotate:${bindir}/callgrind_annotate: ${D}${PTEST_PATH}/callgrind/tests/ann2.vgtest
223
224    # point the expanded @abs_top_builddir@ of the host to PTEST_PATH
225    sed -i s:${S}:${PTEST_PATH}:g \
226        ${D}${PTEST_PATH}/memcheck/tests/linux/debuginfod-check.vgtest
227
228    # handle multilib
229    sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
230    sed -i s:@libexecdir@:${libexecdir}:g ${D}${PTEST_PATH}/run-ptest
231    sed -i s:@bindir@:${bindir}:g ${D}${PTEST_PATH}/run-ptest
232
233    # This test fails on the host as well, using both 3.15 and git master (as of Jan 24 2020)
234    # https://bugs.kde.org/show_bug.cgi?id=402833
235    rm ${D}${PTEST_PATH}/memcheck/tests/overlap.vgtest
236
237    # This is known failure see https://bugs.kde.org/show_bug.cgi?id=435732
238    rm ${D}${PTEST_PATH}/memcheck/tests/leak_cpp_interior.vgtest
239
240    # As the binary isn't stripped or debug-splitted, the source file isn't fetched
241    # via dwarfsrcfiles either, so it needs to be installed manually.
242    mkdir -p ${D}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/${BP}/none/tests/
243    install ${S}/none/tests/tls.c ${D}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/${BP}/none/tests/
244}
245
246# avoid stripping some generated binaries otherwise some of the tests will fail
247# run-strip-reloc.sh, run-strip-strmerge.sh and so on will fail
248INHIBIT_PACKAGE_STRIP_FILES += "\
249    ${PKGD}${PTEST_PATH}/none/tests/tls \
250    ${PKGD}${PTEST_PATH}/none/tests/tls.so \
251    ${PKGD}${PTEST_PATH}/none/tests/tls2.so \
252    ${PKGD}${PTEST_PATH}/helgrind/tests/tc09_bad_unlock \
253    ${PKGD}${PTEST_PATH}/memcheck/tests/manuel1 \
254    ${PKGD}${PTEST_PATH}/drd/tests/pth_detached3 \
255"
256