blob: d0aefdf39af9297a2ff8b5063f6dbd98232dffa6 [file] [log] [blame]
Brad Bishopc342db32019-05-15 21:57:59 -04001SUMMARY = "Valgrind memory debugger and instrumentation framework"
2HOMEPAGE = "http://valgrind.org/"
Andrew Geissler90fd73c2021-03-05 15:25:55 -06003DESCRIPTION = "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."
Brad Bishopc342db32019-05-15 21:57:59 -04004BUGTRACKER = "http://valgrind.org/support/bug_reports.html"
5LICENSE = "GPLv2 & GPLv2+ & BSD"
6LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
Andrew Geissler4ed12e12020-06-05 18:00:41 -05007 file://include/pub_tool_basics.h;beginline=6;endline=29;md5=41c410e8d3f305aee7aaa666b2e4f366 \
Brad Bishopc342db32019-05-15 21:57:59 -04008 file://include/valgrind.h;beginline=1;endline=56;md5=ad3b317f3286b6b704575d9efe6ca5df \
9 file://COPYING.DOCS;md5=24ea4c7092233849b4394699333b5c56"
10
Brad Bishop96ff1982019-08-19 13:50:42 -040011DEPENDS = " \
Brad Bishopc342db32019-05-15 21:57:59 -040012 ${@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 \
Brad Bishopa34c0302019-09-23 22:34:48 -040019 file://remove-for-aarch64 \
Andrew Geisslerd1e89492021-02-12 15:35:20 -060020 file://remove-for-all \
Brad Bishopc342db32019-05-15 21:57:59 -040021 file://0004-Fix-out-of-tree-builds.patch \
22 file://0005-Modify-vg_test-wrapper-to-support-PTEST-formats.patch \
23 file://0001-Remove-tests-that-fail-to-build-on-some-PPC32-config.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 \
Brad Bishopc342db32019-05-15 21:57:59 -040032 file://0005-tc20_verifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch \
Brad Bishopc342db32019-05-15 21:57:59 -040033 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 \
Andrew Geisslerc9f78652020-09-18 14:11:35 -050041 file://0001-memcheck-vgtests-remove-fullpath-after-flags.patch \
Andrew Geissler82c905d2020-04-13 13:39:40 -050042 file://s390x_vec_op_t.patch \
43 file://0001-none-tests-fdleak_cmsg.stderr.exp-adjust-tmp-paths.patch \
Andrew Geissler82c905d2020-04-13 13:39:40 -050044 file://0001-memcheck-tests-Fix-timerfd-syscall-test.patch \
Andrew Geissler4c19ea12020-10-27 13:52:24 -050045 file://0001-drd-Port-to-Fedora-33.patch \
46 file://0001-drd-musl-fix.patch \
Andrew Geissler6ce62a22020-11-30 19:58:47 -060047 file://0001-helgrind-Intercept-libc-functions.patch \
Andrew Geissler9b4d8b02021-02-19 12:26:16 -060048 file://0001-gdbserver_tests-Disable-nlcontrolc.vgtest-for-x86-64.patch \
Brad Bishopc342db32019-05-15 21:57:59 -040049 "
Andrew Geisslerd25ed322020-06-27 00:28:28 -050050SRC_URI[md5sum] = "d1b153f1ab17cf1f311705e7a83ef589"
51SRC_URI[sha256sum] = "c91f3a2f7b02db0f3bc99479861656154d241d2fdb265614ba918cc6720a33ca"
Brad Bishopc342db32019-05-15 21:57:59 -040052UPSTREAM_CHECK_REGEX = "valgrind-(?P<pver>\d+(\.\d+)+)\.tar"
53
54COMPATIBLE_HOST = '(i.86|x86_64|arm|aarch64|mips|powerpc|powerpc64).*-linux'
55
Andrew Geisslerc9f78652020-09-18 14:11:35 -050056# patch 0001-memcheck-vgtests-remove-fullpath-after-flags.patch removes relative path
57# argument. Change expected stderr files accordingly.
58do_patch_append() {
59 bb.build.exec_func('do_sed_paths', d)
60}
61
62do_sed_paths() {
63 sed -i -e 's|tests/||' ${S}/memcheck/tests/badfree3.stderr.exp
64 sed -i -e 's|tests/||' ${S}/memcheck/tests/varinfo5.stderr.exp
65}
66
Brad Bishopc342db32019-05-15 21:57:59 -040067# valgrind supports armv7 and above
68COMPATIBLE_HOST_armv4 = 'null'
69COMPATIBLE_HOST_armv5 = 'null'
70COMPATIBLE_HOST_armv6 = 'null'
71
Andrew Geisslerd25ed322020-06-27 00:28:28 -050072# valgrind fails with powerpc soft-float
73COMPATIBLE_HOST_powerpc = "${@bb.utils.contains('TARGET_FPU', 'soft', 'null', '.*-linux', d)}"
74
Brad Bishopc342db32019-05-15 21:57:59 -040075# X32 isn't supported by valgrind at this time
76COMPATIBLE_HOST_linux-gnux32 = 'null'
77COMPATIBLE_HOST_linux-muslx32 = 'null'
78
79# Disable for some MIPS variants
80COMPATIBLE_HOST_mipsarchr6 = 'null'
81COMPATIBLE_HOST_linux-gnun32 = 'null'
82
83# Disable for powerpc64 with musl
84COMPATIBLE_HOST_libc-musl_powerpc64 = 'null'
85
Andrew Geissler82c905d2020-04-13 13:39:40 -050086# brokenseip is unfortunately required by ptests to pass
87inherit autotools-brokensep ptest multilib_header
Brad Bishopc342db32019-05-15 21:57:59 -040088
89EXTRA_OECONF = "--enable-tls --without-mpicc"
90EXTRA_OECONF += "${@['--enable-only32bit','--enable-only64bit'][d.getVar('SITEINFO_BITS') != '32']}"
91
92# valgrind checks host_cpu "armv7*)", so we need to over-ride the autotools.bbclass default --host option
93EXTRA_OECONF_append_arm = " --host=armv7${HOST_VENDOR}-${HOST_OS}"
94
95EXTRA_OEMAKE = "-w"
96
97CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
98
99# valgrind likes to control its own optimisation flags. It generally defaults
100# to -O2 but uses -O0 for some specific test apps etc. Passing our own flags
101# (via CFLAGS) means we interfere with that. Only pass DEBUG_FLAGS to it
102# which fixes build path issue in DWARF.
103SELECTED_OPTIMIZATION = "${DEBUG_FLAGS}"
104
105do_configure_prepend () {
106 rm -rf ${S}/config.h
107 sed -i -e 's:$(abs_top_builddir):$(pkglibdir)/ptest:g' ${S}/none/tests/Makefile.am
108 sed -i -e 's:$(top_builddir):$(pkglibdir)/ptest:g' ${S}/memcheck/tests/Makefile.am
109}
110
111do_install_append () {
112 install -m 644 ${B}/default.supp ${D}/${libdir}/valgrind/
113 oe_multilib_header valgrind/config.h
114}
115
116VALGRINDARCH ?= "${TARGET_ARCH}"
117VALGRINDARCH_aarch64 = "arm64"
118VALGRINDARCH_x86-64 = "amd64"
119VALGRINDARCH_x86 = "x86"
120VALGRINDARCH_mips = "mips32"
121VALGRINDARCH_mipsel = "mips32"
122VALGRINDARCH_mips64el = "mips64"
123VALGRINDARCH_powerpc = "ppc"
124VALGRINDARCH_powerpc64 = "ppc64"
125VALGRINDARCH_powerpc64el = "ppc64le"
126
127INHIBIT_PACKAGE_STRIP_FILES = "${PKGD}${libdir}/valgrind/vgpreload_memcheck-${VALGRINDARCH}-linux.so"
128
129RDEPENDS_${PN} += "perl"
130
131# valgrind needs debug information for ld.so at runtime in order to
132# redirect functions like strlen.
133RRECOMMENDS_${PN} += "${TCLIBC}-dbg"
134
Brad Bishopa34c0302019-09-23 22:34:48 -0400135RDEPENDS_${PN}-ptest += " bash coreutils file \
136 gdb libgomp \
137 perl \
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500138 perl-module-file-basename perl-module-file-glob perl-module-getopt-long \
139 perl-module-overloading \
Andrew Geissler82c905d2020-04-13 13:39:40 -0500140 procps sed ${PN}-dbg ${PN}-src"
Brad Bishopc342db32019-05-15 21:57:59 -0400141RDEPENDS_${PN}-ptest_append_libc-glibc = " glibc-utils"
142
143# One of the tests contains a bogus interpreter path on purpose.
144# Skip file dependency check
145SKIP_FILEDEPS_${PN}-ptest = '1'
146INSANE_SKIP_${PN}-ptest = "debug-deps"
147
148do_compile_ptest() {
149 oe_runmake check
150}
151
152do_install_ptest() {
153 chmod +x ${B}/tests/vg_regtest
154
155 # The test application binaries are not automatically installed.
156 # Grab them from the build directory.
157 #
158 # The regression tests require scripts and data files that are not
159 # copied to the build directory. They must be copied from the
160 # source directory.
161 saved_dir=$PWD
162 for parent_dir in ${S} ${B} ; do
163 cd $parent_dir
164
Brad Bishopc342db32019-05-15 21:57:59 -0400165 subdirs=" \
Brad Bishopa34c0302019-09-23 22:34:48 -0400166 .in_place \
Brad Bishopc342db32019-05-15 21:57:59 -0400167 cachegrind/tests \
168 callgrind/tests \
Brad Bishopa34c0302019-09-23 22:34:48 -0400169 dhat/tests \
Brad Bishopc342db32019-05-15 21:57:59 -0400170 drd/tests \
171 gdbserver_tests \
172 helgrind/tests \
Brad Bishopa34c0302019-09-23 22:34:48 -0400173 lackey/tests \
Brad Bishopc342db32019-05-15 21:57:59 -0400174 massif/tests \
175 memcheck/tests \
176 none/tests \
177 tests \
Brad Bishopa34c0302019-09-23 22:34:48 -0400178 exp-bbv/tests \
Brad Bishopc342db32019-05-15 21:57:59 -0400179 "
Brad Bishopc342db32019-05-15 21:57:59 -0400180 # Get the vg test scripts, filters, and expected files
181 for dir in $subdirs ; do
182 find $dir | cpio -pvdu ${D}${PTEST_PATH}
183 done
184 cd $saved_dir
185 done
186
Brad Bishopa34c0302019-09-23 22:34:48 -0400187 # The scripts reference config.h so add it to the top ptest dir.
188 cp ${B}/config.h ${D}${PTEST_PATH}
189 install -D ${WORKDIR}/remove-for-aarch64 ${D}${PTEST_PATH}
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600190 install -D ${WORKDIR}/remove-for-all ${D}${PTEST_PATH}
Brad Bishopa34c0302019-09-23 22:34:48 -0400191
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
Brad Bishopc342db32019-05-15 21:57:59 -0400207 find ${D}${PTEST_PATH} \
Brad Bishopa34c0302019-09-23 22:34:48 -0400208 \( \
209 -name "Makefile*" \
Brad Bishopc342db32019-05-15 21:57:59 -0400210 -o -name "*.o" \
Brad Bishopa34c0302019-09-23 22:34:48 -0400211 \) \
Brad Bishopc342db32019-05-15 21:57:59 -0400212 -exec rm {} \;
Brad Bishopa34c0302019-09-23 22:34:48 -0400213
214 # These files need to be newer so touch them.
Brad Bishop15ae2502019-06-18 21:44:24 -0400215 touch ${D}${PTEST_PATH}/cachegrind/tests/a.c -r ${D}${PTEST_PATH}/cachegrind/tests/cgout-test
Brad Bishopc342db32019-05-15 21:57:59 -0400216
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
Brad Bishopc342db32019-05-15 21:57:59 -0400224 # handle multilib
225 sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
Brad Bishopa34c0302019-09-23 22:34:48 -0400226 sed -i s:@bindir@:${bindir}:g ${D}${PTEST_PATH}/run-ptest
Andrew Geissler82c905d2020-04-13 13:39:40 -0500227
228 # This test fails on the host as well, using both 3.15 and git master (as of Jan 24 2020)
229 # https://bugs.kde.org/show_bug.cgi?id=402833
230 rm ${D}${PTEST_PATH}/memcheck/tests/overlap.vgtest
231
232 # As the binary isn't stripped or debug-splitted, the source file isn't fetched
233 # via dwarfsrcfiles either, so it needs to be installed manually.
234 mkdir -p ${D}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/${BP}/none/tests/
235 install ${S}/none/tests/tls.c ${D}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/${BP}/none/tests/
Brad Bishopc342db32019-05-15 21:57:59 -0400236}
Andrew Geissler82c905d2020-04-13 13:39:40 -0500237
238# avoid stripping some generated binaries otherwise some of the tests will fail
239# run-strip-reloc.sh, run-strip-strmerge.sh and so on will fail
240INHIBIT_PACKAGE_STRIP_FILES = "\
241 ${PKGD}${PTEST_PATH}/none/tests/tls \
242 ${PKGD}${PTEST_PATH}/none/tests/tls.so \
243 ${PKGD}${PTEST_PATH}/none/tests/tls2.so \
244 ${PKGD}${PTEST_PATH}/helgrind/tests/tc09_bad_unlock \
245 ${PKGD}${PTEST_PATH}/memcheck/tests/manuel1 \
246 ${PKGD}${PTEST_PATH}/drd/tests/pth_detached3 \
247"