summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/valgrind/valgrind_3.17.0.bb
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/valgrind/valgrind_3.17.0.bb')
-rw-r--r--meta/recipes-devtools/valgrind/valgrind_3.17.0.bb251
1 files changed, 251 insertions, 0 deletions
diff --git a/meta/recipes-devtools/valgrind/valgrind_3.17.0.bb b/meta/recipes-devtools/valgrind/valgrind_3.17.0.bb
new file mode 100644
index 0000000000..1e29896596
--- /dev/null
+++ b/meta/recipes-devtools/valgrind/valgrind_3.17.0.bb
@@ -0,0 +1,251 @@
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 = "GPLv2 & GPLv2+ & BSD"
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://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 \
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-Add-missing-musl.supp.patch \
46 "
47SRC_URI[md5sum] = "afe11b5572c3121a781433b7c0ab741b"
48SRC_URI[sha256sum] = "ad3aec668e813e40f238995f60796d9590eee64a16dff88421430630e69285a2"
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}
59
60do_sed_paths() {
61 sed -i -e 's|tests/||' ${S}/memcheck/tests/badfree3.stderr.exp
62 sed -i -e 's|tests/||' ${S}/memcheck/tests/varinfo5.stderr.exp
63}
64
65# valgrind supports armv7 and above
66COMPATIBLE_HOST_armv4 = 'null'
67COMPATIBLE_HOST_armv5 = 'null'
68COMPATIBLE_HOST_armv6 = 'null'
69
70# valgrind fails with powerpc soft-float
71COMPATIBLE_HOST_powerpc = "${@bb.utils.contains('TARGET_FPU', 'soft', 'null', '.*-linux', d)}"
72
73# X32 isn't supported by valgrind at this time
74COMPATIBLE_HOST_linux-gnux32 = 'null'
75COMPATIBLE_HOST_linux-muslx32 = 'null'
76
77# Disable for some MIPS variants
78COMPATIBLE_HOST_mipsarchr6 = 'null'
79COMPATIBLE_HOST_linux-gnun32 = 'null'
80
81# Disable for powerpc64 with musl
82COMPATIBLE_HOST_libc-musl_powerpc64 = 'null'
83
84# brokenseip is unfortunately required by ptests to pass
85inherit autotools-brokensep ptest multilib_header
86
87EXTRA_OECONF = "--enable-tls --without-mpicc"
88EXTRA_OECONF += "${@['--enable-only32bit','--enable-only64bit'][d.getVar('SITEINFO_BITS') != '32']}"
89
90# valgrind checks host_cpu "armv7*)", so we need to over-ride the autotools.bbclass default --host option
91EXTRA_OECONF_append_arm = " --host=armv7${HOST_VENDOR}-${HOST_OS}"
92
93EXTRA_OEMAKE = "-w"
94
95CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
96
97# valgrind likes to control its own optimisation flags. It generally defaults
98# to -O2 but uses -O0 for some specific test apps etc. Passing our own flags
99# (via CFLAGS) means we interfere with that. Only pass DEBUG_FLAGS to it
100# which fixes build path issue in DWARF.
101SELECTED_OPTIMIZATION = "${DEBUG_FLAGS}"
102
103do_configure_prepend () {
104 rm -rf ${S}/config.h
105 sed -i -e 's:$(abs_top_builddir):$(pkglibdir)/ptest:g' ${S}/none/tests/Makefile.am
106 sed -i -e 's:$(top_builddir):$(pkglibdir)/ptest:g' ${S}/memcheck/tests/Makefile.am
107}
108
109do_install_append () {
110 install -m 644 ${B}/default.supp ${D}/${libexecdir}/valgrind/
111 oe_multilib_header valgrind/config.h
112}
113
114VALGRINDARCH ?= "${TARGET_ARCH}"
115VALGRINDARCH_aarch64 = "arm64"
116VALGRINDARCH_x86-64 = "amd64"
117VALGRINDARCH_x86 = "x86"
118VALGRINDARCH_mips = "mips32"
119VALGRINDARCH_mipsel = "mips32"
120VALGRINDARCH_mips64el = "mips64"
121VALGRINDARCH_powerpc = "ppc"
122VALGRINDARCH_powerpc64 = "ppc64"
123VALGRINDARCH_powerpc64el = "ppc64le"
124
125INHIBIT_PACKAGE_STRIP_FILES = "${PKGD}${libexecdir}/valgrind/vgpreload_memcheck-${VALGRINDARCH}-linux.so"
126
127RDEPENDS_${PN} += "perl"
128
129# valgrind needs debug information for ld.so at runtime in order to
130# redirect functions like strlen.
131RRECOMMENDS_${PN} += "${TCLIBC}-dbg"
132
133RDEPENDS_${PN}-ptest += " bash coreutils file \
134 gdb libgomp \
135 perl \
136 perl-module-file-basename perl-module-file-glob perl-module-getopt-long \
137 perl-module-overloading perl-module-cwd perl-module-ipc-open3 \
138 perl-module-carp perl-module-symbol \
139 procps sed ${PN}-dbg ${PN}-src"
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
191 # Add an executable need by none/tests/bigcode
192 mkdir ${D}${PTEST_PATH}/perf
193 cp ${B}/perf/bigcode ${D}${PTEST_PATH}/perf
194
195 # Add an executable needed by memcheck/tests/vcpu_bz2
196 cp ${B}/perf/bz2 ${D}${PTEST_PATH}/perf
197
198 # Make the ptest dir look like the top level valgrind src dir
199 # This is checked by the gdbserver_tests/make_local_links script
200 mkdir ${D}${PTEST_PATH}/coregrind
201 cp ${B}/coregrind/vgdb ${D}${PTEST_PATH}/coregrind
202
203 # Add an executable needed by massif tests
204 cp ${B}/massif/ms_print ${D}${PTEST_PATH}/massif/ms_print
205
206 find ${D}${PTEST_PATH} \
207 \( \
208 -name "Makefile*" \
209 -o -name "*.o" \
210 \) \
211 -exec rm {} \;
212
213 # These files need to be newer so touch them.
214 touch ${D}${PTEST_PATH}/cachegrind/tests/a.c -r ${D}${PTEST_PATH}/cachegrind/tests/cgout-test
215
216 # find *_annotate in ${bindir} for yocto build
217 sed -i s:\.\./\.\./cachegrind/cg_annotate:${bindir}/cg_annotate: ${D}${PTEST_PATH}/cachegrind/tests/ann1.vgtest
218 sed -i s:\.\./\.\./cachegrind/cg_annotate:${bindir}/cg_annotate: ${D}${PTEST_PATH}/cachegrind/tests/ann2.vgtest
219
220 sed -i s:\.\./\.\./callgrind/callgrind_annotate:${bindir}/callgrind_annotate: ${D}${PTEST_PATH}/callgrind/tests/ann1.vgtest
221 sed -i s:\.\./\.\./callgrind/callgrind_annotate:${bindir}/callgrind_annotate: ${D}${PTEST_PATH}/callgrind/tests/ann2.vgtest
222
223 # point the expanded @abs_top_builddir@ of the host to PTEST_PATH
224 sed -i s:${S}:${PTEST_PATH}:g \
225 ${D}${PTEST_PATH}/memcheck/tests/linux/debuginfod-check.vgtest
226
227 # handle multilib
228 sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
229 sed -i s:@libexecdir@:${libexecdir}:g ${D}${PTEST_PATH}/run-ptest
230 sed -i s:@bindir@:${bindir}:g ${D}${PTEST_PATH}/run-ptest
231
232 # This test fails on the host as well, using both 3.15 and git master (as of Jan 24 2020)
233 # https://bugs.kde.org/show_bug.cgi?id=402833
234 rm ${D}${PTEST_PATH}/memcheck/tests/overlap.vgtest
235
236 # As the binary isn't stripped or debug-splitted, the source file isn't fetched
237 # via dwarfsrcfiles either, so it needs to be installed manually.
238 mkdir -p ${D}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/${BP}/none/tests/
239 install ${S}/none/tests/tls.c ${D}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/${BP}/none/tests/
240}
241
242# avoid stripping some generated binaries otherwise some of the tests will fail
243# run-strip-reloc.sh, run-strip-strmerge.sh and so on will fail
244INHIBIT_PACKAGE_STRIP_FILES += "\
245 ${PKGD}${PTEST_PATH}/none/tests/tls \
246 ${PKGD}${PTEST_PATH}/none/tests/tls.so \
247 ${PKGD}${PTEST_PATH}/none/tests/tls2.so \
248 ${PKGD}${PTEST_PATH}/helgrind/tests/tc09_bad_unlock \
249 ${PKGD}${PTEST_PATH}/memcheck/tests/manuel1 \
250 ${PKGD}${PTEST_PATH}/drd/tests/pth_detached3 \
251"