(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_Colon ':'> <'/usr/bin'> <Id.Lit_Colon ':'> <'/sbin'>} spids: [253] ) ] ) (C {<trap>} {(SQ <':'>)} {<INT>} {<QUIT>} {<TERM>} {<PIPE>} {<HUP>}) (command.ShFunction name: usage body: (BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc 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>}) ] do_fork: T ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] ) ) (command.ShFunction name: warn body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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>})] do_fork: T ) ] spids: [354 365] ) ] ) ] ) ) (command.ShFunction name: end body: (BraceGroup children: [ (command.Simple words: [{<echo>}] redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <'Ending tracing...'>)}] redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})] do_fork: T ) (C {<cd>} {($ Id.VSub_DollarName '$tracing')}) (C {<warn>} {(DQ <'echo 0 > events/uprobes/'> ($ Id.VSub_DollarName '$uname') <'/enable'>)}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen child:<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:<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:<Id.Lit_ArithVarLike wroteflock>) (C {<warn>} {(DQ <'rm '> ($ Id.VSub_DollarName '$flock'))}) ] ) ] ) ) (command.ShFunction name: die body: (BraceGroup children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_At '$@'))}] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.ShFunction name: edie body: (BraceGroup children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_At '$@'))}] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (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>}) ] do_fork: T ) (C {<end>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.ShFunction name: set_path body: (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 '$('> child: (C {<which>} {($ Id.VSub_DollarName '$name')}) ) } spids: [579] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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 '$('> child: (command.Pipeline children: [ (command.Simple words: [{<ldconfig>} {<-v>}] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (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: (condition.Shell commands: [ (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: (condition.Shell commands: [ (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: (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 '$('> child: (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: {<Id.Lit_Digits 0> <Id.Lit_ArithVarLike x> ($ Id.VSub_DollarName '$addr')} right: {<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 '$('> child: (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 '$('> child: (C {<file>} {($ Id.VSub_DollarName '$path')}) ) } spids: [883] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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 '$('> child: (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: <Id.Lit_ArithVarLike addr> right: <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: <Id.Lit_ArithVarLike addr> right: {<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 '$('> child: (C {<printf>} {(DQ <'%x'>)} {($ Id.VSub_DollarName '$addr')}) ) } spids: [1009] ) ] ) ] spids: [891 910] ) ] ) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (C {<getopts>} {<Fd> <Id.Lit_Colon ':'> <hHl> <Id.Lit_Colon ':'> <p> <Id.Lit_Colon ':'> <L> <Id.Lit_Colon ':'> <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: {($ Id.VSub_DollarName '$OPTIND')} right: {<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: (condition.Shell commands: [ (command.Sentence child: (command.DParen child:{($ 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: (condition.Shell commands: [ (command.Sentence child: (command.DParen child:<Id.Lit_ArithVarLike opt_list>) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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 '$('> child:(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 tok: <Id.VOp1_DPercent '%%'> arg_word: {<.> <Id.Lit_Other '*'>} ) ) } spids: [1317] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DAmp left: (arith_expr.Binary op_id: Id.Arith_DEqual left: <Id.Lit_ArithVarLike opt_force> right: {<Id.Lit_Digits 0>} ) right: (arith_expr.Binary op_id: Id.Arith_Less left: {($ Id.VSub_DollarName '$maj')} right: {<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.HereDoc here_begin: {<END>} here_end_span_id: 1367 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>}) ] do_fork: T ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [1325 1347] ) ] ) (command.ForEach iter_names: [cmd] iterable: (for_iter.Words words:[{<file>} {<objdump>} {<ldconfig>} {<awk>}]) 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'>})] do_fork: T ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.Binary op_id: Id.Arith_NEqual left: {($ Id.VSub_QMark '$?')} right: {<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: <Id.Lit_ArithVarLike opt_pid> right: <Id.Lit_ArithVarLike opt_filter> ) right: <Id.Lit_ArithVarLike opt_tid> ) right: {<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: <Id.Lit_ArithVarLike opt_duration> right: <Id.Lit_ArithVarLike opt_view> ) ) (C {<die>} {(DQ <'ERROR: use either -d or -v.'>)}) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen child:<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: [1523] ) ] ) (command.ForEach iter_names: [tid] iterable: (for_iter.Words words: [{<'/proc/'> ($ Id.VSub_DollarName '$pid') <'/task/'> <Id.Lit_Star '*'>}] ) 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 tok: <Id.VOp1_DPound '##'> arg_word: {<Id.Lit_Other '*'> <Id.Lit_Slash '/'>} ) ) ) } spids: [1546] ) ] ) ] ) ) (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:{<Id.Lit_Digits 3>}) ) } spids: [1562] ) ] ) ] spids: [1506 1516] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen child:<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: [1587] ) ] ) (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: [1591] ) ] ) ] spids: [1574 1584] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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_Colon ':'> <Id.Lit_Other '*'>} ) right: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {(DQ ($ Id.VSub_DollarName '$uprobe'))} right: {<r> <Id.Lit_Colon ':'> <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>})] do_fork: T ) (C {<usage>}) ] spids: [1599 1628] ) ] ) (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 tok: <Id.VOp1_DPercent '%%'> arg_word: {<':'> <Id.Lit_Other '*'>} ) ) } spids: [1696] ) ] ) (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 tok: <Id.VOp1_Pound '#'> arg_word: {<Id.Lit_Other '*'> <':'>} ) ) <' '> ) } spids: [1704] ) ] ) (C {<set>} {<-->} {($ Id.VSub_DollarName '$urest')}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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_Colon ':'> <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: [1739] ) ] ) 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: [1742] ) ] ) 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: [1749] ) ] ) ] spids: [1721 1736] ) ] 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_Colon ':'> <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: [1778] ) ] ) 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: [1782] ) ] ) 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: [1791] ) ] ) ] ) (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: [1798] ) ] ) 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 tok: <Id.VOp1_DPercent '%%'> arg_word: {<':'> <Id.Lit_Other '*'>} ) ) } spids: [1802] ) ] ) ] ) (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: [1810] ) ] ) 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 tok: <Id.VOp1_DPound '##'> arg_word: {<Id.Lit_Other '*'> <':'>} ) ) } spids: [1814] ) ] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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 tok: <Id.VOp1_DPound '##'> arg_word: {<Id.Lit_Other '*'> <Id.Lit_Slash '/'>} ) ) } spids: [1844] ) ] ) (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 tok: <Id.VOp1_DPercent '%%'> arg_word: {<.> <Id.Lit_Other '*'>} ) ) } spids: [1853] ) ] ) ] spids: [1826 1841] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:seg) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$path')} spids: [1864] ) ] ) (C {<set_path>} {($ Id.VSub_DollarName '$path')}) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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.Lit_Underscore _> ($ Id.VSub_DollarName '$addr')} spids: [1920] ) ] ) ] ) ] spids: [1882 1898] ) ] 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: [1945] ) ] ) ] ) (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: [1963] ) ] ) (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: [1989] ) ] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen child:<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: [1997 2007] ) ] ) (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: (condition.Shell commands: [ (command.Sentence child: (command.DParen child: (arith_expr.Unary op_id: Id.Arith_Bang child: <Id.Lit_ArithVarLike opt_view> ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen child:<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: [2057 2067] ) ] else_action: [ (C {<echo>} { (DQ <'Tracing uprobe '> ($ Id.VSub_DollarName '$uname') <' ('> ($ Id.VSub_DollarName '$uprobe') <'). Ctrl-C to end.'> ) } ) ] ) ] spids: [2043 2054] ) ] ) (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 '$('> child: (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')} ) ] do_fork: T ) (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: [2144] ) ] ) (command.Simple words: [{<echo>} {<nop>}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<current_tracer>})] do_fork: T ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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>} ) ] do_fork: T ) ] 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>})] do_fork: T ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen child:<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>})] do_fork: T ) (command.Pipeline children: [ (C {<dmesg>}) (C {<tail>} {<-> ($ Id.VSub_DollarName '$dmesg')}) (C {<sed>} {(SQ <'s/^/ /'>)}) ] negated: F ) ] spids: [2191 2201] ) ] ) (C {<edie>} {(DQ <Exiting.>)}) ] spids: [2159 2174] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen child:<Id.Lit_ArithVarLike opt_view>) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<cat>} {<'events/uprobes/'> ($ Id.VSub_DollarName '$uname') <'/format'>}) (C {<edie>} {(DQ )}) ] spids: [2245 2255] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen child:<Id.Lit_ArithVarLike opt_filter>) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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'> } ) ] do_fork: T ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<edie>} {(DQ <'ERROR: setting filter or -p. Exiting.'>)})] spids: [2285 2302] ) ] ) ] spids: [2272 2282] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen child:<Id.Lit_ArithVarLike opt_stack>) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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'>} ) ] do_fork: T ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<edie>} {(DQ <'ERROR: enabling stack traces (-s). Exiting'>)})] spids: [2329 2342] ) ] ) ] spids: [2316 2326] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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'>} ) ] do_fork: T ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<edie>} {(DQ <'ERROR: enabling uprobe '> ($ Id.VSub_DollarName '$uname') <'. Exiting.'>)} ) ] spids: [2356 2371] ) ] ) (C {<warn>} {(DQ <'echo > trace'>)}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen child:<Id.Lit_ArithVarLike opt_duration>) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<sleep>} {($ Id.VSub_DollarName '$duration')}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen child:<Id.Lit_ArithVarLike opt_headers>) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<cat>} {<trace>})] spids: [2412 2422] ) ] else_action: [(C {<grep>} {<-v>} {(SQ <'^#'>)} {<trace>})] ) ] spids: [2394 2404] ) ] else_action: [ (command.AndOr ops: [Id.Op_DAmp] children: [(command.DParen child:<Id.Lit_ArithVarLike opt_headers>) (C {<cat>} {<trace>})] ) (C {<cat>} {<trace_pipe>}) ] ) (C {<end>}) ] )