blob: 4861a20edee225c9e28621d81ed324eba7132091 [file] [log] [blame]
Olivier Deprez157378f2022-04-04 15:47:50 +02001#!/bin/sh
2# build id cache operations
3# SPDX-License-Identifier: GPL-2.0
4
5# skip if there's no readelf
6if ! [ -x "$(command -v readelf)" ]; then
7 echo "failed: no readelf, install binutils"
8 exit 2
9fi
10
11# skip if there's no compiler
12if ! [ -x "$(command -v cc)" ]; then
13 echo "failed: no compiler, install gcc"
14 exit 2
15fi
16
17ex_md5=$(mktemp /tmp/perf.ex.MD5.XXX)
18ex_sha1=$(mktemp /tmp/perf.ex.SHA1.XXX)
19
20echo 'int main(void) { return 0; }' | cc -Wl,--build-id=sha1 -o ${ex_sha1} -x c -
21echo 'int main(void) { return 0; }' | cc -Wl,--build-id=md5 -o ${ex_md5} -x c -
22
23echo "test binaries: ${ex_sha1} ${ex_md5}"
24
25check()
26{
27 id=`readelf -n ${1} 2>/dev/null | grep 'Build ID' | awk '{print $3}'`
28
29 echo "build id: ${id}"
30
31 link=${build_id_dir}/.build-id/${id:0:2}/${id:2}
32 echo "link: ${link}"
33
34 if [ ! -h $link ]; then
35 echo "failed: link ${link} does not exist"
36 exit 1
37 fi
38
39 file=${build_id_dir}/.build-id/${id:0:2}/`readlink ${link}`/elf
40 echo "file: ${file}"
41
42 if [ ! -x $file ]; then
43 echo "failed: file ${file} does not exist"
44 exit 1
45 fi
46
47 diff ${file} ${1}
48 if [ $? -ne 0 ]; then
49 echo "failed: ${file} do not match"
50 exit 1
51 fi
52
53 echo "OK for ${1}"
54}
55
56test_add()
57{
58 build_id_dir=$(mktemp -d /tmp/perf.debug.XXX)
59 perf="perf --buildid-dir ${build_id_dir}"
60
61 ${perf} buildid-cache -v -a ${1}
62 if [ $? -ne 0 ]; then
63 echo "failed: add ${1} to build id cache"
64 exit 1
65 fi
66
67 check ${1}
68
69 rm -rf ${build_id_dir}
70}
71
72test_record()
73{
74 data=$(mktemp /tmp/perf.data.XXX)
75 build_id_dir=$(mktemp -d /tmp/perf.debug.XXX)
76 perf="perf --buildid-dir ${build_id_dir}"
77
78 ${perf} record --buildid-all -o ${data} ${1}
79 if [ $? -ne 0 ]; then
80 echo "failed: record ${1}"
81 exit 1
82 fi
83
84 check ${1}
85
86 rm -rf ${build_id_dir}
87 rm -rf ${data}
88}
89
90# add binaries manual via perf buildid-cache -a
91test_add ${ex_sha1}
92test_add ${ex_md5}
93
94# add binaries via perf record post processing
95test_record ${ex_sha1}
96test_record ${ex_md5}
97
98# cleanup
99rm ${ex_sha1} ${ex_md5}
100
101exit ${err}