xref: /OK3568_Linux_fs/kernel/tools/perf/perf-archive.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun# perf archive
4*4882a593Smuzhiyun# Arnaldo Carvalho de Melo <acme@redhat.com>
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunPERF_DATA=perf.data
7*4882a593Smuzhiyunif [ $# -ne 0 ] ; then
8*4882a593Smuzhiyun	PERF_DATA=$1
9*4882a593Smuzhiyunfi
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun#
12*4882a593Smuzhiyun# PERF_BUILDID_DIR environment variable set by perf
13*4882a593Smuzhiyun# path to buildid directory, default to $HOME/.debug
14*4882a593Smuzhiyun#
15*4882a593Smuzhiyunif [ -z $PERF_BUILDID_DIR ]; then
16*4882a593Smuzhiyun	PERF_BUILDID_DIR=~/.debug/
17*4882a593Smuzhiyunelse
18*4882a593Smuzhiyun        # append / to make substitutions work
19*4882a593Smuzhiyun        PERF_BUILDID_DIR=$PERF_BUILDID_DIR/
20*4882a593Smuzhiyunfi
21*4882a593Smuzhiyun
22*4882a593SmuzhiyunBUILDIDS=$(mktemp /tmp/perf-archive-buildids.XXXXXX)
23*4882a593SmuzhiyunNOBUILDID=0000000000000000000000000000000000000000
24*4882a593Smuzhiyun
25*4882a593Smuzhiyunperf buildid-list -i $PERF_DATA --with-hits | grep -v "^$NOBUILDID " > $BUILDIDS
26*4882a593Smuzhiyunif [ ! -s $BUILDIDS ] ; then
27*4882a593Smuzhiyun	echo "perf archive: no build-ids found"
28*4882a593Smuzhiyun	rm $BUILDIDS || true
29*4882a593Smuzhiyun	exit 1
30*4882a593Smuzhiyunfi
31*4882a593Smuzhiyun
32*4882a593SmuzhiyunMANIFEST=$(mktemp /tmp/perf-archive-manifest.XXXXXX)
33*4882a593SmuzhiyunPERF_BUILDID_LINKDIR=$(readlink -f $PERF_BUILDID_DIR)/
34*4882a593Smuzhiyun
35*4882a593Smuzhiyuncut -d ' ' -f 1 $BUILDIDS | \
36*4882a593Smuzhiyunwhile read build_id ; do
37*4882a593Smuzhiyun	linkname=$PERF_BUILDID_DIR.build-id/${build_id:0:2}/${build_id:2}
38*4882a593Smuzhiyun	filename=$(readlink -f $linkname)
39*4882a593Smuzhiyun	echo ${linkname#$PERF_BUILDID_DIR} >> $MANIFEST
40*4882a593Smuzhiyun	echo ${filename#$PERF_BUILDID_LINKDIR} >> $MANIFEST
41*4882a593Smuzhiyundone
42*4882a593Smuzhiyun
43*4882a593Smuzhiyuntar cjf $PERF_DATA.tar.bz2 -C $PERF_BUILDID_DIR -T $MANIFEST
44*4882a593Smuzhiyunrm $MANIFEST $BUILDIDS || true
45*4882a593Smuzhiyunecho -e "Now please run:\n"
46*4882a593Smuzhiyunecho -e "$ tar xvf $PERF_DATA.tar.bz2 -C ~/.debug\n"
47*4882a593Smuzhiyunecho "wherever you need to run 'perf report' on."
48*4882a593Smuzhiyunexit 0
49