#!/bin/bash # perf archive # Arnaldo Carvalho de Melo global PERF_DATA := 'perf.data' if test $Argc -ne 0 { global PERF_DATA := $1 } # # PERF_BUILDID_DIR environment variable set by perf # path to buildid directory, default to $HOME/.debug # if test -z $PERF_BUILDID_DIR { global PERF_BUILDID_DIR := ""~/.debug/ } else { # append / to make substitutions work global PERF_BUILDID_DIR := "$PERF_BUILDID_DIR/" } global BUILDIDS := $[mktemp /tmp/perf-archive-buildids.XXXXXX] global NOBUILDID := '0000000000000000000000000000000000000000' perf buildid-list -i $PERF_DATA --with-hits | grep -v "^$NOBUILDID " > $BUILDIDS if test ! -s $BUILDIDS { echo "perf archive: no build-ids found" rm $BUILDIDS || true exit 1 } global MANIFEST := $[mktemp /tmp/perf-archive-manifest.XXXXXX] global PERF_BUILDID_LINKDIR := "$[readlink -f $PERF_BUILDID_DIR]/" cut -d ' ' -f 1 $BUILDIDS | \ while read build_id { global linkname := "$PERF_BUILDID_DIR.build-id/$(build_id:0:2)/$(build_id:2)" global filename := $[readlink -f $linkname] echo $(linkname#$PERF_BUILDID_DIR) >> $MANIFEST echo $(filename#$PERF_BUILDID_LINKDIR) >> $MANIFEST } tar cjf $PERF_DATA.tar.bz2 -C $PERF_BUILDID_DIR -T $MANIFEST rm $MANIFEST $BUILDIDS || true echo -e "Now please run:\n" echo -e "$ tar xvf $PERF_DATA.tar.bz2 -C ~/.debug\n" echo "wherever you need to run 'perf report' on." exit 0 (CommandList children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:PERF_DATA) op:Equal rhs:{(perf.data)} spids:[10])] spids: [10] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {($ VSub_Pound "$#")} {(-ne)} {(0)} {(Lit_Other "]")}) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PERF_DATA) op: Equal rhs: {($ VSub_Number "$1")} spids: [30] ) ] spids: [30] ) ] spids: [-1 27] ) ] spids: [-1 33] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(-z)} {($ VSub_Name "$PERF_BUILDID_DIR")} {(Lit_Other "]")}) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PERF_BUILDID_DIR) op: Equal rhs: {(TildeSubPart prefix:"") (/.debug/)} spids: [62] ) ] spids: [62] ) ] spids: [-1 59] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PERF_BUILDID_DIR) op: Equal rhs: {($ VSub_Name "$PERF_BUILDID_DIR") (/)} spids: [73] ) ] spids: [73] ) ] spids: [66 77] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:BUILDIDS) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(mktemp)} {(/tmp/perf-archive-buildids.XXXXXX)})] ) left_token: spids: [81 85] ) } spids: [80] ) ] spids: [80] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:NOBUILDID) op: Equal rhs: {(0000000000000000000000000000000000000000)} spids: [87] ) ] spids: [87] ) (Pipeline children: [ (C {(perf)} {(buildid-list)} {(-i)} {($ VSub_Name "$PERF_DATA")} {(--with-hits)}) (SimpleCommand words: [{(grep)} {(-v)} {(DQ ("^") ($ VSub_Name "$NOBUILDID") (" "))}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name "$BUILDIDS")} spids: [113] ) ] ) ] negated: False ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(KW_Bang "!")} {(-s)} {($ VSub_Name "$BUILDIDS")} {(Lit_Other "]")}) terminator: ) ] action: [ (C {(echo)} {(DQ ("perf archive: no build-ids found"))}) (AndOr children: [(C {(rm)} {($ VSub_Name "$BUILDIDS")}) (C {(true)})] op_id: Op_DPipe ) (C {(exit)} {(1)}) ] spids: [-1 131] ) ] spids: [-1 154] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:MANIFEST) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(mktemp)} {(/tmp/perf-archive-manifest.XXXXXX)})] ) left_token: spids: [158 162] ) } spids: [157] ) ] spids: [157] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PERF_BUILDID_LINKDIR) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(readlink)} {(-f)} {($ VSub_Name "$PERF_BUILDID_DIR")})] ) left_token: spids: [165 171] ) (/) } spids: [164] ) ] spids: [164] ) (Pipeline children: [ (C {(cut)} {(-d)} {(SQ <" ">)} {(-f)} {(1)} {($ VSub_Name "$BUILDIDS")}) (While cond: [(Sentence child:(C {(read)} {(build_id)}) terminator:)] body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:linkname) op: Equal rhs: {($ VSub_Name "$PERF_BUILDID_DIR") (.build-id/) (BracedVarSub token: suffix_op: (Slice begin: (ArithWord w:{(Lit_Digits 0)}) length: (ArithWord w:{(Lit_Digits 2)}) ) spids: [206 212] ) (/) (BracedVarSub token: suffix_op: (Slice begin:(ArithWord w:{(Lit_Digits 2)})) spids: [214 218] ) } spids: [203] ) ] spids: [203] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:filename) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(readlink)} {(-f)} {($ VSub_Name "$linkname")})] ) left_token: spids: [222 228] ) } spids: [221] ) ] spids: [221] ) (SimpleCommand words: [ {(echo)} { (BracedVarSub token: suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {($ VSub_Name "$PERF_BUILDID_DIR")} ) spids: [233 237] ) } ] redirects: [ (Redir op_id: Redir_DGreat fd: -1 arg_word: {($ VSub_Name "$MANIFEST")} spids: [239] ) ] ) (SimpleCommand words: [ {(echo)} { (BracedVarSub token: suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {($ VSub_Name "$PERF_BUILDID_LINKDIR")} ) spids: [246 250] ) } ] redirects: [ (Redir op_id: Redir_DGreat fd: -1 arg_word: {($ VSub_Name "$MANIFEST")} spids: [252] ) ] ) ] spids: [200 256] ) ) ] negated: False ) (C {(tar)} {(cjf)} {($ VSub_Name "$PERF_DATA") (.tar.bz2)} {(-C)} {($ VSub_Name "$PERF_BUILDID_DIR")} {(-T)} {($ VSub_Name "$MANIFEST")} ) (AndOr children: [(C {(rm)} {($ VSub_Name "$MANIFEST")} {($ VSub_Name "$BUILDIDS")}) (C {(true)})] op_id: Op_DPipe ) (C {(echo)} {(-e)} {(DQ ("Now please run:") (EscapedLiteralPart token:))}) (C {(echo)} {(-e)} { (DQ (Lit_Other "$") (" tar xvf ") ($ VSub_Name "$PERF_DATA") (".tar.bz2 -C ~/.debug") (EscapedLiteralPart token:) ) } ) (C {(echo)} {(DQ ("wherever you need to run 'perf report' on."))}) (C {(exit)} {(0)}) ] )