(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tracing) op: assign_op.Equal rhs: {</sys/kernel/debug/tracing>} spids: [187] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:flock) op: assign_op.Equal rhs: {</var/tmp/.ftrace-lock>} spids: [190] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:wroteflock) op: assign_op.Equal rhs: {<0>} spids: [194] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_duration) op: assign_op.Equal rhs: {<0>} spids: [197] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:duration) op: assign_op.Equal rhs: (word.Empty) spids: [201] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_pid) op: assign_op.Equal rhs: {<0>} spids: [204] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pid) op: assign_op.Equal rhs: (word.Empty) spids: [208] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_tid) op: assign_op.Equal rhs: {<0>} spids: [211] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tid) op: assign_op.Equal rhs: (word.Empty) spids: [215] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_filter) op: assign_op.Equal rhs: {<0>} spids: [217] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: (word.Empty) spids: [221] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_view) op: assign_op.Equal rhs: {<0>} spids: [224] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_headers) op: assign_op.Equal rhs: {<0>} spids: [228] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_stack) op: assign_op.Equal rhs: {<0>} spids: [232] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dmesg) op: assign_op.Equal rhs: {<2>} spids: [236] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:debug) op: assign_op.Equal rhs: {<0>} spids: [239] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_force) op: assign_op.Equal rhs: {<0>} spids: [243] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_list) op: assign_op.Equal rhs: {<0>} spids: [247] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:target) op: assign_op.Equal rhs: (word.Empty) spids: [251] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PATH) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$PATH') <Id.Lit_Other ':'> </usr/bin> <Id.Lit_Other ':'> </sbin>} spids: [253] ) ] ) (C {<trap>} {(SQ <':'>)} {<INT>} {<QUIT>} {<TERM>} {<PIPE>} {<HUP>}) (command.ShFunction name: usage body: (command.BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<END>} here_end_span_id: 340 stdin_parts: [ <'USAGE: uprobe [-FhHsv] [-d secs] [-p PID] [-L TID] {-l target |\n'> <' uprobe_definition [filter]}\n'> <' -F # force. trace despite warnings.\n'> <' -d seconds # trace duration, and use buffers\n'> <' -l target # list functions from this executable\n'> <' -p PID # PID to match on events\n'> <' -L TID # thread id to match on events\n'> <" -v # view format file (don't trace)\n"> <' -H # include column headers\n'> <' -s # show user stack traces\n'> <' -h # this usage message\n'> <'\n'> <'Note that these examples may need modification to match your kernel\n'> <"version's function names and platform's register usage.\n"> <' eg,\n'> <' # trace readline() calls in all running '> <Id.Right_DoubleQuote '"'> <bash> <Id.Right_DoubleQuote '"'> <' executables:\n'> <' uprobe p:bash:readline\n'> <' # trace readline() with explicit executable path:\n'> <' uprobe p:/bin/bash:readline\n'> <' # trace the return of readline() with return value as a string:\n'> <" uprobe 'r:bash:readline +0("> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <"retval):string'\n"> <' # trace sleep() calls in all running libc shared libraries:\n'> <' uprobe p:libc:sleep\n'> <' # trace sleep() with register %di (x86):\n'> <" uprobe 'p:libc:sleep %di'\n"> < ' # trace this address (use caution: must be instruction aligned):\n' > <' uprobe p:libc:0xbf130\n'> <' # trace gettimeofday() for PID 1182 only:\n'> <' uprobe -p 1182 p:libc:gettimeofday\n'> <' # trace the return of fopen() only when it returns NULL:\n'> <" uprobe 'r:libc:fopen file="> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <"retval' 'file == 0'\n"> <'\n'> <'See the man page and example file for more info.\n'> ] ) ) (redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>}) ] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] ) ) (command.ShFunction name: warn body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {<eval>} {(DQ ($ Id.VSub_At '$@'))})] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [ {<echo>} { (DQ <'WARNING: command failed '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) ($ Id.VSub_At '$@') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ) } ] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] ) ] spids: [354 365] ) ] ) ] ) ) (command.ShFunction name: end body: (command.BraceGroup children: [ (command.Simple words: [{<echo>}] redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{</dev/null>})] ) (command.Simple words: [{<echo>} {(DQ <'Ending tracing...'>)}] redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{</dev/null>})] ) (C {<cd>} {($ Id.VSub_DollarName '$tracing')}) (C {<warn>} {(DQ <'echo 0 > events/uprobes/'> ($ Id.VSub_DollarName '$uname') </enable>)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_filter>) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<warn>} {(DQ <'echo 0 > events/uprobes/'> ($ Id.VSub_DollarName '$uname') </filter>)} ) ] spids: [427 437] ) ] ) (C {<warn>} {(DQ <'echo -:'> ($ Id.VSub_DollarName '$uname') <' >> uprobe_events'>)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_stack>) ) (C {<warn>} {(DQ <'echo 0 > options/userstacktrace'>)}) ] ) (C {<warn>} {(DQ <'echo > trace'>)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike wroteflock>) ) (C {<warn>} {(DQ <'rm '> ($ Id.VSub_DollarName '$flock'))}) ] ) ] ) ) (command.ShFunction name: die body: (command.BraceGroup children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_At '$@'))}] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.ShFunction name: edie body: (command.BraceGroup children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_At '$@'))}] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] ) (command.Simple words: [{<exec>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {</dev/null>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] ) (C {<end>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.ShFunction name: set_path body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [574] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:path) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<which>} {($ Id.VSub_DollarName '$name')})] ) ) } spids: [579] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$path'))} right: {(DQ )} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:path) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [{<ldconfig>} {<-v>}] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {</dev/null>} ) ] ) (C {<awk>} {<-v>} {<Id.Lit_VarLike 'lib='> ($ Id.VSub_DollarName '$name')} { (SQ <'\n'> < '\t\t $1 ~ /:/ { sub(/:/, "", $1); path = $1 }\n' > <'\t\t { sub(/\\..*/, "", $1); }\n'> <'\t\t $1 == lib { print path "/" $3 }'> ) } ) ] negated: F ) ] ) ) } spids: [606] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$path'))} right: {(DQ )} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<die>} { (DQ <'ERROR: segment '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) ($ Id.VSub_DollarName '$name') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' ambiguous.'> ) } {(DQ <'Program or library? Try a full path.'>)} ) ] spids: [633 649] ) ] ) ] spids: [587 603] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Unary op_id: Id.BoolUnary_x child: {($ Id.VSub_DollarName '$path')} ) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<die>} { (DQ <'ERROR: resolved '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) ($ Id.VSub_DollarName '$name') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' to '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) ($ Id.VSub_DollarName '$path') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <', but file missing'> ) } ) ] spids: [676 689] ) ] ) ] ) ) (command.ShFunction name: set_addr body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:path) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [719] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [723] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:sym) op: assign_op.Equal rhs: {($ Id.VSub_Number '$3')} spids: [727] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$path'))} right: {(DQ )} ) ) (C {<die>} {(DQ <'ERROR: missing symbol path.'>)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$sym'))} right: {(DQ )} ) ) (C {<die>} {(DQ <'ERROR: missing symbol for '> ($ Id.VSub_DollarName '$path'))}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:addr) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<objdump>} {<-tT>} {($ Id.VSub_DollarName '$path')}) (C {<awk>} {<-v>} {<Id.Lit_VarLike 'sym='> ($ Id.VSub_DollarName '$sym')} {(SQ <'\n'> <'\t $NF == sym && $4 == ".text" { print $1; exit }'>)} ) ] negated: F ) ] ) ) } spids: [778] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$addr'))} right: {(DQ )} ) ) (C {<die>} { (DQ <'ERROR: missing symbol '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) ($ Id.VSub_DollarName '$sym') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' in '> ($ Id.VSub_DollarName '$path') ) } ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DEqual left: (arith_expr.ArithWord w: {<Id.Lit_Digits 0> <Id.Lit_ArithVarLike x> ($ Id.VSub_DollarName '$addr')} ) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) (C {<die>} { (DQ <'ERROR: failed resolving '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) ($ Id.VSub_DollarName '$sym') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' in '> ($ Id.VSub_DollarName '$path') <.> ) } {(DQ <'Maybe it exists in a different target (eg, library)?'>)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:addr) op: assign_op.Equal rhs: {<0x> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<printf>} {(DQ <'%x'>)} {<0x> ($ Id.VSub_DollarName '$addr')}) ] ) ) } spids: [863] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:type) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<file>} {($ Id.VSub_DollarName '$path')})] ) ) } spids: [883] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {(DQ ($ Id.VSub_DollarName '$type'))} right: {<Id.Lit_Other '*'> <shared> <Id.Lit_Other '?'> <object> <Id.Lit_Other '*'> } ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:base) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<objdump>} {<-x>} {($ Id.VSub_DollarName '$path')}) (C {<awk>} { (SQ <'\n'> < '\t\t $1 == "LOAD" && $3 ~ /^[0x]*$/ { print $5 }' > ) } ) ] negated: F ) ] ) ) } spids: [921] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {(DQ ($ Id.VSub_DollarName '$base'))} right: {<0x> <Id.Lit_Other '*'>} ) ) (C {<die>} {(DQ <'ERROR: finding base load addr'>)} {(DQ <'for '> ($ Id.VSub_DollarName '$path') <.>)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:addr) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike addr>) right: (arith_expr.VarRef token:<Id.Lit_ArithVarLike base>) ) ) } spids: [969] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.Binary op_id: Id.Arith_Less left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike addr>) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) (C {<die>} {(DQ <'ERROR: transposed address for '> ($ Id.VSub_DollarName '$sym'))} {(DQ <'became negative: '> ($ Id.VSub_DollarName '$addr'))} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:addr) op: assign_op.Equal rhs: {<0x> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<printf>} {(DQ <'%x'>)} {($ Id.VSub_DollarName '$addr')}) ] ) ) } spids: [1009] ) ] ) ] spids: [891 910] ) ] ) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: [ (C {<getopts>} {<Fd> <Id.Lit_Other ':'> <hHl> <Id.Lit_Other ':'> <p> <Id.Lit_Other ':'> <L> <Id.Lit_Other ':'> <sv> } {<opt>} ) ] body: (command.DoGroup children: [ (command.Case to_match: {($ Id.VSub_DollarName '$opt')} arms: [ (case_arm pat_list: [{<F>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_force) op: assign_op.Equal rhs: {<1>} spids: [1060] ) ] ) ] spids: [1057 1058 1063 -1] ) (case_arm pat_list: [{<d>}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_duration) op: assign_op.Equal rhs: {<1>} spids: [1069] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:duration) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTARG')} spids: [1073] ) ] ) ] spids: [1066 1067 1076 -1] ) (case_arm pat_list: [{<p>}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_pid) op: assign_op.Equal rhs: {<1>} spids: [1082] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pid) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTARG')} spids: [1086] ) ] ) ] spids: [1079 1080 1089 -1] ) (case_arm pat_list: [{<L>}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_tid) op: assign_op.Equal rhs: {<1>} spids: [1095] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tid) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTARG')} spids: [1099] ) ] ) ] spids: [1092 1093 1102 -1] ) (case_arm pat_list: [{<l>}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_list) op: assign_op.Equal rhs: {<1>} spids: [1108] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:target) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTARG')} spids: [1112] ) ] ) ] spids: [1105 1106 1115 -1] ) (case_arm pat_list: [{<H>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_headers) op: assign_op.Equal rhs: {<1>} spids: [1121] ) ] ) ] spids: [1118 1119 1124 -1] ) (case_arm pat_list: [{<s>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_stack) op: assign_op.Equal rhs: {<1>} spids: [1130] ) ] ) ] spids: [1127 1128 1133 -1] ) (case_arm pat_list: [{<v>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_view) op: assign_op.Equal rhs: {<1>} spids: [1139] ) ] ) ] spids: [1136 1137 1142 -1] ) (case_arm pat_list: [{<h>} {<Id.Lit_QMark '?'>}] action: [(C {<usage>})] spids: [1145 1148 1152 -1] ) ] ) ] ) ) (C {<shift>} { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$OPTIND')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uprobe) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [1172] ) ] ) (C {<shift>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.ArithWord w:{($ Id.VSub_Pound '$#')})) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_filter) op: assign_op.Equal rhs: {<1>} spids: [1190] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [1194] ) ] ) ] spids: [1177 1187] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.LogicalAnd left: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$opt_list'))} right: {<1>} ) right: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {(DQ ($ Id.VSub_DollarName '$uprobe'))} right: {(DQ )} ) ) ) (C {<die>} {(DQ <'ERROR: -l takes a target only'>)}) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_list>)) terminator: <Id.Op_Semi _> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {(DQ ($ Id.VSub_DollarName '$target'))} right: {<Id.Lit_Other '*'> </> <Id.Lit_Other '*'>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<set_path>} {($ Id.VSub_DollarName '$target')}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:target) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$path')} spids: [1272] ) ] ) ] spids: [1247 1264] ) ] ) (command.Pipeline children: [ (C {<objdump>} {<-tT>} {($ Id.VSub_DollarName '$target')}) (C {<awk>} {(SQ <'$4 == ".text" { print $NF }'>)}) (C {<sort>}) (C {<uniq>}) ] negated: F ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [1234 1244] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ver) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children:[(C {<uname>} {<-r>})]) ) } spids: [1310] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:maj) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name ver> suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{<'.*'>}) ) } spids: [1317] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DAmp left: (arith_expr.Binary op_id: Id.Arith_DEqual left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_force>) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) right: (arith_expr.Binary op_id: Id.Arith_Less left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$maj')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 4>}) ) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<END>} here_end_span_id: 1366 stdin_parts: [ <'ERROR: Kernel version >= 4.0 preferred (you have '> ($ Id.VSub_DollarName '$ver') <'). Aborting.\n'> <'\n'> <"Background: uprobes were first added in 3.5. I've tested them on 3.13,\n"> < 'and found them unsafe, as they can crash or lock up processes, which can\n' > <'effectively lock up the system. On 4.0, uprobes seem much safer. You\n'> <"can use -F to force tracing, but you've been warned.\n"> ] ) ) (redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>}) ] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [1324 1346] ) ] ) (command.ForEach iter_name: cmd iter_words: [{<file>} {<objdump>} {<ldconfig>} {<awk>}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [{<which>} {($ Id.VSub_DollarName '$cmd')}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{</dev/null>})] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.Binary op_id: Id.Arith_NEqual left: (arith_expr.ArithWord w:{($ Id.VSub_QMark '$?')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) (C {<die>} { (DQ <'ERROR: missing '> ($ Id.VSub_DollarName '$cmd') <' in '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <'PATH. '> ($ Id.VSub_Number '$0') <' needs'> ) } {(DQ <'to use this command. Exiting.'>)} ) ] ) ] ) ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$uprobe'))} right: {(DQ )} ) ) (C {<usage>}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.Binary op_id: Id.Arith_Great left: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_pid>) right: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_filter>) ) right: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_tid>) ) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) (C {<die>} {(DQ <'ERROR: use at most one of -p, -L, or filter.'>)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DAmp left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_duration>) right: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_view>) ) ) (C {<die>} {(DQ <'ERROR: use either -d or -v.'>)}) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_pid>)) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_filter) op: assign_op.Equal rhs: {<1>} spids: [1522] ) ] ) (command.ForEach iter_name: tid iter_words: [{</proc/> ($ Id.VSub_DollarName '$pid') </task/> <Id.Lit_Star '*'>}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$filter') <' || common_pid == '> (braced_var_sub token: <Id.VSub_Name tid> suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPound arg_word: {<'*'> <Id.Lit_Slash />} ) ) ) } spids: [1545] ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name filter> suffix_op: (suffix_op.Slice begin:(arith_expr.ArithWord w:{<Id.Lit_Digits 3>})) ) } spids: [1561] ) ] ) ] spids: [1505 1515] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_tid>)) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_filter) op: assign_op.Equal rhs: {<1>} spids: [1586] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: {(DQ <'common_pid == '> ($ Id.VSub_DollarName '$tid'))} spids: [1590] ) ] ) ] spids: [1573 1583] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalAnd left: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {(DQ ($ Id.VSub_DollarName '$uprobe'))} right: {<p> <Id.Lit_Other ':'> <Id.Lit_Other '*'>} ) right: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {(DQ ($ Id.VSub_DollarName '$uprobe'))} right: {<r> <Id.Lit_Other ':'> <Id.Lit_Other '*'>} ) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [{<echo>} {(DQ <'ERROR: invalid uprobe definition (should start with p: or r:)'>)}] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] ) (C {<usage>}) ] spids: [1598 1627] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:utype) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name uprobe> suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{<':*'>}) ) } spids: [1695] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:urest) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: <Id.VSub_Name uprobe> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{<'*:'>}) ) <' '> ) } spids: [1702] ) ] ) (C {<Id.KW_Set set>} {<-->} {($ Id.VSub_DollarName '$urest')}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_Number '$1')} right: {<Id.Lit_Other '*'> <Id.Lit_Other ':'> <Id.Lit_Other '*'>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uname) op: assign_op.Equal rhs: (word.Empty) spids: [1736] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:probe) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [1739] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child:(C {<shift>}) terminator:<Id.Op_Semi _>) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uargs) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_At '$@'))} spids: [1746] ) ] ) ] spids: [1718 1733] ) ] else_action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {($ Id.VSub_Number '$2')} right: {<Id.Lit_Other '*'> <Id.Lit_Other ':'> <Id.Lit_Other '*'>} ) ) (C {<die>} {(DQ <'ERROR: invalid probe. See usage (-h).'>)}) ] ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uname) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [1775] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:probe) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [1779] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child:(C {<shift>} {<2>}) terminator:<Id.Op_Semi _>) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uargs) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_At '$@'))} spids: [1788] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:path) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$probe')} spids: [1795] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:path) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name path> suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{<':*'>}) ) } spids: [1799] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:addr) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$probe')} spids: [1806] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:addr) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name addr> suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPound arg_word:{<'*:'>}) ) } spids: [1810] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$path')} right: {<Id.Lit_Other '*'> </> <Id.Lit_Other '*'>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:seg) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name path> suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPound arg_word: {<'*'> <Id.Lit_Slash />} ) ) } spids: [1839] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:seg) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name seg> suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{<'.*'>}) ) } spids: [1848] ) ] ) ] spids: [1821 1836] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:seg) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$path')} spids: [1858] ) ] ) (C {<set_path>} {($ Id.VSub_DollarName '$path')}) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$addr'))} right: {<0x> <Id.Lit_Other '*'>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$uname'))} right: {(DQ )} ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uname) op: assign_op.Equal rhs: {(${ Id.VSub_Name seg) <_> ($ Id.VSub_DollarName '$addr')} spids: [1914] ) ] ) ] ) ] spids: [1876 1892] ) ] else_action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$uname'))} right: {(DQ )} ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uname) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$addr')} spids: [1939] ) ] ) ] ) (C {<set_addr>} {($ Id.VSub_DollarName '$path')} {($ Id.VSub_DollarName '$seg')} {($ Id.VSub_DollarName '$addr')} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uprobe) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$utype') <':'> ($ Id.VSub_DollarName '$uname') <' '> ($ Id.VSub_DollarName '$path') <':'> ($ Id.VSub_DollarName '$addr') ) } spids: [1957] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {(DQ ($ Id.VSub_DollarName '$uargs'))} right: {(DQ )} ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uprobe) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$uprobe') <' '> ($ Id.VSub_DollarName '$uargs'))} spids: [1983] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.VarRef token:<Id.Lit_ArithVarLike debug>)) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} { (DQ <'uname: '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ($ Id.VSub_DollarName '$uname') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <', uprobe: '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ($ Id.VSub_DollarName '$uprobe') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ) } ) ] spids: [1991 2001] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cd>} {($ Id.VSub_DollarName '$tracing')}) (C {<die>} { (DQ <'ERROR: accessing tracing. Root user? Kernel has FTRACE?\n'> <' debugfs mounted? (mount -t debugfs debugfs /sys/kernel/debug)'> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Unary op_id: Id.Arith_Bang child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_view>) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_duration>) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} { (DQ <'Tracing uprobe '> ($ Id.VSub_DollarName '$uname') <' for '> ($ Id.VSub_DollarName '$duration') <' seconds (buffered)...'> ) } ) ] spids: [2051 2061] ) ] else_action: [ (C {<echo>} { (DQ <'Tracing uprobe '> ($ Id.VSub_DollarName '$uname') <' ('> ($ Id.VSub_DollarName '$uprobe') <'). Ctrl-C to end.'> ) } ) ] ) ] spids: [2037 2048] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Unary op_id:Id.BoolUnary_e child:{($ Id.VSub_DollarName '$flock')}) ) (C {<die>} { (DQ <'ERROR: ftrace may be in use by PID '> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<cat>} {($ Id.VSub_DollarName '$flock')})] ) ) <' '> ($ Id.VSub_DollarName '$flock') ) } ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{<echo>} {($ Id.VSub_Dollar '$$')}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$flock')} ) ] ) (C {<die>} {(DQ <'ERROR: unable to write '> ($ Id.VSub_DollarName '$flock') <.>)}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:wroteflock) op: assign_op.Equal rhs: {<1>} spids: [2138] ) ] ) (command.Simple words: [{<echo>} {<nop>}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<current_tracer>})] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_DollarName '$uprobe'))}] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {<uprobe_events>} ) ] ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [ {<echo>} { (DQ <'ERROR: adding uprobe '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ($ Id.VSub_DollarName '$uprobe') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <.> ) } ] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike dmesg>) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [ {<echo>} { (DQ <'Last '> ($ Id.VSub_DollarName '$dmesg') <' dmesg entries (might contain reason):'> ) } ] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] ) (command.Pipeline children: [ (C {<dmesg>}) (C {<tail>} {<-> ($ Id.VSub_DollarName '$dmesg')}) (C {<sed>} {(SQ <'s/^/ /'>)}) ] negated: F ) ] spids: [2185 2195] ) ] ) (C {<edie>} {(DQ <Exiting.>)}) ] spids: [2153 2168] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_view>)) terminator: <Id.Op_Semi _> ) ] action: [ (C {<cat>} {<events/uprobes/> ($ Id.VSub_DollarName '$uname') </format>}) (C {<edie>} {(DQ )}) ] spids: [2239 2249] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_filter>)) terminator: <Id.Op_Semi _> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_DollarName '$filter'))}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<events/uprobes/> ($ Id.VSub_DollarName '$uname') </filter>} ) ] ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [(C {<edie>} {(DQ <'ERROR: setting filter or -p. Exiting.'>)})] spids: [2279 2296] ) ] ) ] spids: [2266 2276] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_stack>)) terminator: <Id.Op_Semi _> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{<echo>} {<1>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<options/userstacktrace>} ) ] ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [(C {<edie>} {(DQ <'ERROR: enabling stack traces (-s). Exiting'>)})] spids: [2323 2336] ) ] ) ] spids: [2310 2320] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{<echo>} {<1>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<events/uprobes/> ($ Id.VSub_DollarName '$uname') </enable>} ) ] ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<edie>} {(DQ <'ERROR: enabling uprobe '> ($ Id.VSub_DollarName '$uname') <'. Exiting.'>)} ) ] spids: [2350 2365] ) ] ) (C {<warn>} {(DQ <'echo > trace'>)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_duration>) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<sleep>} {($ Id.VSub_DollarName '$duration')}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_headers>) ) terminator: <Id.Op_Semi _> ) ] action: [(C {<cat>} {<trace>})] spids: [2406 2416] ) ] else_action: [(C {<grep>} {<-v>} {(SQ <'^#'>)} {<trace>})] ) ] spids: [2388 2398] ) ] else_action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_headers>) ) (C {<cat>} {<trace>}) ] ) (C {<cat>} {<trace_pipe>}) ] ) (C {<end>}) ] )