blob: 717d82830e79a54eb314ca8710c5d1e28b14c947 [file] [log] [blame]
Andrew Geisslereff27472021-10-29 15:35:00 -05001SUMMARY = "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"
Andrew Geissler7e0e3c02022-02-25 20:34:39 +00005LICENSE = "GPL-2.0-only & GPL-2.0-or-later & BSD-3-Clause"
Andrew Geisslereff27472021-10-29 15:35:00 -05006LIC_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 \
Andrew Geisslereff27472021-10-29 15:35:00 -050022 file://0005-Modify-vg_test-wrapper-to-support-PTEST-formats.patch \
Andrew Geisslereff27472021-10-29 15:35:00 -050023 file://use-appropriate-march-mcpu-mfpu-for-ARM-test-apps.patch \
24 file://avoid-neon-for-targets-which-don-t-support-it.patch \
25 file://valgrind-make-ld-XXX.so-strlen-intercept-optional.patch \
26 file://0001-makefiles-Drop-setting-mcpu-to-cortex-a8-on-arm-arch.patch \
Andrew Geisslereff27472021-10-29 15:35:00 -050027 file://0001-sigqueue-Rename-_sifields-to-__si_fields-on-musl.patch \
28 file://0002-context-APIs-are-not-available-on-musl.patch \
29 file://0003-correct-include-directive-path-for-config.h.patch \
Andrew Geisslereff27472021-10-29 15:35:00 -050030 file://0001-fix-opcode-not-supported-on-mips32-linux.patch \
Andrew Geisslereff27472021-10-29 15:35:00 -050031 file://0001-Make-local-functions-static-to-avoid-assembler-error.patch \
32 file://0001-Return-a-valid-exit_code-from-vg_regtest.patch \
33 file://0001-valgrind-filter_xml_frames-do-not-filter-usr.patch \
34 file://0001-memcheck-vgtests-remove-fullpath-after-flags.patch \
35 file://s390x_vec_op_t.patch \
36 file://0001-none-tests-fdleak_cmsg.stderr.exp-adjust-tmp-paths.patch \
37 file://0001-memcheck-tests-Fix-timerfd-syscall-test.patch \
Andrew Geissler595f6302022-01-24 19:11:47 +000038 file://0001-docs-Disable-manual-validation.patch \
Patrick Williamse760df82023-05-26 11:10:49 -050039 file://0001-none-tests-x86-linux-seg_override.c-add-missing-incl.patch \
Andrew Geisslereff27472021-10-29 15:35:00 -050040 "
Patrick Williamse760df82023-05-26 11:10:49 -050041SRC_URI[sha256sum] = "10ce1618bb3e33fad16eb79552b0a3e1211762448a0d7fce11c8a6243b9ac971"
Andrew Geisslereff27472021-10-29 15:35:00 -050042UPSTREAM_CHECK_REGEX = "valgrind-(?P<pver>\d+(\.\d+)+)\.tar"
43
44COMPATIBLE_HOST = '(i.86|x86_64|arm|aarch64|mips|powerpc|powerpc64).*-linux'
45
46# patch 0001-memcheck-vgtests-remove-fullpath-after-flags.patch removes relative path
47# argument. Change expected stderr files accordingly.
48do_patch:append() {
49 bb.build.exec_func('do_sed_paths', d)
50}
51
52do_sed_paths() {
53 sed -i -e 's|tests/||' ${S}/memcheck/tests/badfree3.stderr.exp
54 sed -i -e 's|tests/||' ${S}/memcheck/tests/varinfo5.stderr.exp
55}
56
57# valgrind supports armv7 and above
58COMPATIBLE_HOST:armv4 = 'null'
59COMPATIBLE_HOST:armv5 = 'null'
60COMPATIBLE_HOST:armv6 = 'null'
61
62# valgrind fails with powerpc soft-float
63COMPATIBLE_HOST:powerpc = "${@bb.utils.contains('TARGET_FPU', 'soft', 'null', '.*-linux', d)}"
64
65# X32 isn't supported by valgrind at this time
66COMPATIBLE_HOST:linux-gnux32 = 'null'
67COMPATIBLE_HOST:linux-muslx32 = 'null'
68
69# Disable for some MIPS variants
70COMPATIBLE_HOST:mipsarchr6 = 'null'
71COMPATIBLE_HOST:linux-gnun32 = 'null'
72
73# Disable for powerpc64 with musl
74COMPATIBLE_HOST:libc-musl:powerpc64 = 'null'
75
76# brokenseip is unfortunately required by ptests to pass
77inherit autotools-brokensep ptest multilib_header
78
79EXTRA_OECONF = "--enable-tls --without-mpicc"
80EXTRA_OECONF += "${@['--enable-only32bit','--enable-only64bit'][d.getVar('SITEINFO_BITS') != '32']}"
81
82# valgrind checks host_cpu "armv7*)", so we need to over-ride the autotools.bbclass default --host option
83EXTRA_OECONF:append:arm = " --host=armv7${HOST_VENDOR}-${HOST_OS}"
84
85EXTRA_OEMAKE = "-w"
86
87CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
88
89# valgrind likes to control its own optimisation flags. It generally defaults
90# to -O2 but uses -O0 for some specific test apps etc. Passing our own flags
91# (via CFLAGS) means we interfere with that. Only pass DEBUG_FLAGS to it
92# which fixes build path issue in DWARF.
93SELECTED_OPTIMIZATION = "${DEBUG_FLAGS}"
94
95do_configure:prepend () {
96 rm -rf ${S}/config.h
97 sed -i -e 's:$(abs_top_builddir):$(pkglibdir)/ptest:g' ${S}/none/tests/Makefile.am
98 sed -i -e 's:$(top_builddir):$(pkglibdir)/ptest:g' ${S}/memcheck/tests/Makefile.am
99}
100
101do_install:append () {
102 install -m 644 ${B}/default.supp ${D}/${libexecdir}/valgrind/
103 oe_multilib_header valgrind/config.h
104}
105
106VALGRINDARCH ?= "${TARGET_ARCH}"
107VALGRINDARCH:aarch64 = "arm64"
108VALGRINDARCH:x86-64 = "amd64"
109VALGRINDARCH:x86 = "x86"
110VALGRINDARCH:mips = "mips32"
111VALGRINDARCH:mipsel = "mips32"
112VALGRINDARCH:mips64el = "mips64"
113VALGRINDARCH:powerpc = "ppc"
114VALGRINDARCH:powerpc64 = "ppc64"
115VALGRINDARCH:powerpc64le = "ppc64le"
116
117INHIBIT_PACKAGE_STRIP_FILES = "${PKGD}${libexecdir}/valgrind/vgpreload_memcheck-${VALGRINDARCH}-linux.so"
118
119RDEPENDS:${PN} += "perl"
120
121# valgrind needs debug information for ld.so at runtime in order to
122# redirect functions like strlen.
123RRECOMMENDS:${PN} += "${TCLIBC}-dbg"
124
125RDEPENDS:${PN}-ptest += " bash coreutils curl file \
126 gdb libgomp \
127 perl \
128 perl-module-file-basename perl-module-file-glob perl-module-getopt-long \
129 perl-module-overloading perl-module-cwd perl-module-ipc-open3 \
130 perl-module-carp perl-module-symbol \
Andrew Geissler595f6302022-01-24 19:11:47 +0000131 procps sed ${PN}-dbg ${PN}-src ${TCLIBC}-src gcc-runtime-dbg \
132 util-linux-taskset"
Andrew Geisslerfc113ea2023-03-31 09:59:46 -0500133RDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-utils glibc-gconv-utf-32"
Andrew Geisslereff27472021-10-29 15:35:00 -0500134
135# One of the tests contains a bogus interpreter path on purpose.
136# Skip file dependency check
137SKIP_FILEDEPS:${PN}-ptest = '1'
138INSANE_SKIP:${PN}-ptest = "debug-deps"
139
140do_compile_ptest() {
Andrew Geissler615f2f12022-07-15 14:00:58 -0500141 oe_runmake check
Andrew Geisslereff27472021-10-29 15:35:00 -0500142}
143
Patrick Williams03907ee2022-05-01 06:28:52 -0500144
Andrew Geisslereff27472021-10-29 15:35:00 -0500145do_install_ptest() {
146 chmod +x ${B}/tests/vg_regtest
147
148 # The test application binaries are not automatically installed.
149 # Grab them from the build directory.
150 #
151 # The regression tests require scripts and data files that are not
152 # copied to the build directory. They must be copied from the
153 # source directory.
154 saved_dir=$PWD
155 for parent_dir in ${S} ${B} ; do
156 cd $parent_dir
157
158 subdirs=" \
159 .in_place \
160 cachegrind/tests \
161 callgrind/tests \
162 dhat/tests \
163 drd/tests \
164 gdbserver_tests \
165 helgrind/tests \
166 lackey/tests \
167 massif/tests \
168 memcheck/tests \
169 none/tests \
170 tests \
171 exp-bbv/tests \
172 "
173 # Get the vg test scripts, filters, and expected files
174 for dir in $subdirs ; do
175 find $dir | cpio -pvdu ${D}${PTEST_PATH}
176 done
177 cd $saved_dir
178 done
179
180 # The scripts reference config.h so add it to the top ptest dir.
181 cp ${B}/config.h ${D}${PTEST_PATH}
182 install -D ${WORKDIR}/remove-for-aarch64 ${D}${PTEST_PATH}
183 install -D ${WORKDIR}/remove-for-all ${D}${PTEST_PATH}
184 install -D ${WORKDIR}/taskset_nondeterministic_tests ${D}${PTEST_PATH}
185
186 # Add an executable need by none/tests/bigcode
187 mkdir ${D}${PTEST_PATH}/perf
188 cp ${B}/perf/bigcode ${D}${PTEST_PATH}/perf
189
190 # Add an executable needed by memcheck/tests/vcpu_bz2
191 cp ${B}/perf/bz2 ${D}${PTEST_PATH}/perf
192
193 # Make the ptest dir look like the top level valgrind src dir
194 # This is checked by the gdbserver_tests/make_local_links script
195 mkdir ${D}${PTEST_PATH}/coregrind
196 cp ${B}/coregrind/vgdb ${D}${PTEST_PATH}/coregrind
197
198 # Add an executable needed by massif tests
199 cp ${B}/massif/ms_print ${D}${PTEST_PATH}/massif/ms_print
200
201 find ${D}${PTEST_PATH} \
202 \( \
203 -name "Makefile*" \
204 -o -name "*.o" \
205 \) \
206 -exec rm {} \;
207
Andrew Geisslereff27472021-10-29 15:35:00 -0500208 sed -i s:\.\./\.\./callgrind/callgrind_annotate:${bindir}/callgrind_annotate: ${D}${PTEST_PATH}/callgrind/tests/ann1.vgtest
209 sed -i s:\.\./\.\./callgrind/callgrind_annotate:${bindir}/callgrind_annotate: ${D}${PTEST_PATH}/callgrind/tests/ann2.vgtest
210
211 # point the expanded @abs_top_builddir@ of the host to PTEST_PATH
212 sed -i s:${S}:${PTEST_PATH}:g \
213 ${D}${PTEST_PATH}/memcheck/tests/linux/debuginfod-check.vgtest
214
215 # handle multilib
216 sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
217 sed -i s:@libexecdir@:${libexecdir}:g ${D}${PTEST_PATH}/run-ptest
218 sed -i s:@bindir@:${bindir}:g ${D}${PTEST_PATH}/run-ptest
219
220 # This test fails on the host as well, using both 3.15 and git master (as of Jan 24 2020)
221 # https://bugs.kde.org/show_bug.cgi?id=402833
222 rm ${D}${PTEST_PATH}/memcheck/tests/overlap.vgtest
223
224 # This is known failure see https://bugs.kde.org/show_bug.cgi?id=435732
225 rm ${D}${PTEST_PATH}/memcheck/tests/leak_cpp_interior.vgtest
226
Patrick Williams03907ee2022-05-01 06:28:52 -0500227 # https://bugs.kde.org/show_bug.cgi?id=445743
228 rm ${D}${PTEST_PATH}/drd/tests/pth_mutex_signal
229
Andrew Geisslereff27472021-10-29 15:35:00 -0500230 # As the binary isn't stripped or debug-splitted, the source file isn't fetched
231 # via dwarfsrcfiles either, so it needs to be installed manually.
Patrick Williams92b42cb2022-09-03 06:53:57 -0500232 mkdir -p ${D}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/none/tests/
233 install ${S}/none/tests/tls.c ${D}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/none/tests/
Andrew Geisslereff27472021-10-29 15:35:00 -0500234}
235
Andrew Geissler517393d2023-01-13 08:55:19 -0600236do_install_ptest:append:x86-64 () {
237 # https://bugs.kde.org/show_bug.cgi?id=463456
238 rm ${D}${PTEST_PATH}/memcheck/tests/origin6-fp.vgtest
239 # https://bugs.kde.org/show_bug.cgi?id=463458
240 rm ${D}${PTEST_PATH}/memcheck/tests/vcpu_fnfns.vgtest
241 # https://bugs.kde.org/show_bug.cgi?id=463463
242 rm ${D}${PTEST_PATH}/none/tests/amd64/fma.vgtest
243}
244
Andrew Geisslereff27472021-10-29 15:35:00 -0500245# avoid stripping some generated binaries otherwise some of the tests will fail
246# run-strip-reloc.sh, run-strip-strmerge.sh and so on will fail
247INHIBIT_PACKAGE_STRIP_FILES += "\
248 ${PKGD}${PTEST_PATH}/none/tests/tls \
249 ${PKGD}${PTEST_PATH}/none/tests/tls.so \
250 ${PKGD}${PTEST_PATH}/none/tests/tls2.so \
251 ${PKGD}${PTEST_PATH}/helgrind/tests/tc09_bad_unlock \
252 ${PKGD}${PTEST_PATH}/memcheck/tests/manuel1 \
253 ${PKGD}${PTEST_PATH}/drd/tests/pth_detached3 \
254"