[PATCH 1/1] perf archive: unpack to correct dir given by perf
From: Haoze Xie
Date: Sun Jul 07 2024 - 14:04:50 EST
In perf-archive.sh, the code segment that defines 'PERF_BUILDID_DIR' is
advanced before 'unpack' operation for subsequent use, followed by a
'mkdir' operation to ensure that the dir exists. Symbols in 'unpack' will
be extracted to correct dir given by perf.
When '--unpack' param is appointed, the symbols are extracted to '~/.debug'
folder by default, without using 'PERF_BUILDID_DIR' given by perf. This
will cause perf to be unable to find the correct buildid's path when users
configured buildid.dir in 'perf config' or used '--buildid-dir' cli param,
since perf will read these params and put them in 'PERF_BUILDID_DIR' env.
'perf script' and 'perf report' will use the env as the basis for buildid
indexing.
Fixes: e43c64c971e4 ("perf archive: Add new option '--unpack' to expand tarballs")
Signed-off-by: Haoze Xie <royenheart@xxxxxxxxx>
Signed-off-by: Yuan Tan <tanyuan@xxxxxxxxxxx>
---
tools/perf/perf-archive.sh | 28 +++++++++++++++-------------
1 file changed, 15 insertions(+), 13 deletions(-)
diff --git a/tools/perf/perf-archive.sh b/tools/perf/perf-archive.sh
index 6ed7e52ab881..f29bbc129056 100755
--- a/tools/perf/perf-archive.sh
+++ b/tools/perf/perf-archive.sh
@@ -23,6 +23,19 @@ while [ $# -gt 0 ] ; do
fi
done
+#
+# PERF_BUILDID_DIR environment variable set by perf
+# path to buildid directory, default to $HOME/.debug
+#
+if [ -z $PERF_BUILDID_DIR ]; then
+ PERF_BUILDID_DIR=~/.debug/
+else
+ # append / to make substitutions work
+ PERF_BUILDID_DIR=$PERF_BUILDID_DIR/
+fi
+
+mkdir -p $PERF_BUILDID_DIR
+
if [ $UNPACK -eq 1 ]; then
if [ ! -z "$UNPACK_TAR" ]; then # tar given as an argument
if [ ! -e "$UNPACK_TAR" ]; then
@@ -65,25 +78,14 @@ if [ $UNPACK -eq 1 ]; then
fi
# unzip the perf.data file in the current working directory and debug symbols in ~/.debug directory
- tar xvf $TARGET && tar xvf $PERF_SYMBOLS.tar.bz2 -C ~/.debug
+ tar xvf $TARGET && tar xvf $PERF_SYMBOLS.tar.bz2 -C $PERF_BUILDID_DIR
else # perf tar generated by perf archive (contains only debug symbols)
- tar xvf $TARGET -C ~/.debug
+ tar xvf $TARGET -C $PERF_BUILDID_DIR
fi
exit 0
fi
-#
-# PERF_BUILDID_DIR environment variable set by perf
-# path to buildid directory, default to $HOME/.debug
-#
-if [ -z $PERF_BUILDID_DIR ]; then
- PERF_BUILDID_DIR=~/.debug/
-else
- # append / to make substitutions work
- PERF_BUILDID_DIR=$PERF_BUILDID_DIR/
-fi
-
BUILDIDS=$(mktemp /tmp/perf-archive-buildids.XXXXXX)
perf buildid-list -i $PERF_DATA --with-hits | grep -v "^ " > $BUILDIDS
--
2.25.1