(command.CommandList children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:tracing spids:[187]) op: Equal rhs: {(/sys/kernel/debug/tracing)} spids: [187] ) ] spids: [187] ) (command.CommandList children: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:flock spids:[190]) op: Equal rhs: {(/var/tmp/.ftrace-lock)} spids: [190] ) ] spids: [190] ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:wroteflock spids:[194]) op: Equal rhs: {(0)} spids: [194] ) ] spids: [194] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_duration spids:[197]) op: Equal rhs: {(0)} spids: [197] ) ] spids: [197] ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:duration spids:[201]) op: Equal rhs: (word.EmptyWord) spids: [201] ) ] spids: [201] ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_pid spids:[204]) op: Equal rhs: {(0)} spids: [204] ) ] spids: [204] ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:pid spids:[208]) op: Equal rhs: (word.EmptyWord) spids: [208] ) ] spids: [208] ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_tid spids:[211]) op: Equal rhs: {(0)} spids: [211] ) ] spids: [211] ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:tid spids:[215]) op: Equal rhs: (word.EmptyWord) spids: [215] ) ] spids: [215] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_filter spids:[217]) op: Equal rhs: {(0)} spids: [217] ) ] spids: [217] ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:filter spids:[221]) op: Equal rhs: (word.EmptyWord) spids: [221] ) ] spids: [221] ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_view spids:[224]) op: Equal rhs: {(0)} spids: [224] ) ] spids: [224] ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_headers spids:[228]) op: Equal rhs: {(0)} spids: [228] ) ] spids: [228] ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_stack spids:[232]) op: Equal rhs: {(0)} spids: [232] ) ] spids: [232] ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:dmesg spids:[236]) op: Equal rhs: {(2)} spids: [236] ) ] spids: [236] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:debug spids:[239]) op: Equal rhs: {(0)} spids: [239] ) ] spids: [239] ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_force spids:[243]) op: Equal rhs: {(0)} spids: [243] ) ] spids: [243] ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_list spids:[247]) op: Equal rhs: {(0)} spids: [247] ) ] spids: [247] ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:target spids:[251]) op: Equal rhs: (word.EmptyWord) spids: [251] ) ] spids: [251] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:PATH spids:[253]) op: Equal rhs: {($ VSub_DollarName '$PATH') (Lit_Other ':') (/usr/bin) (Lit_Other ':') (/sbin)} spids: [253] ) ] spids: [253] ) (C {(trap)} {(SQ <':'>)} {(INT)} {(QUIT)} {(TERM)} {(PIPE)} {(HUP)}) (command.FuncDef name: usage body: (command.BraceGroup children: [ (command.SimpleCommand words: [{(cat)}] redirects: [ (redir.HereDoc op: <Redir_DLessDash '<<-'> fd: 16777215 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 ') (Right_DoubleQuote '"') (bash) (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.EscapedLiteralPart token:<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.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ("retval' 'file == 0'\n") ('\n') ('See the man page and example file for more info.\n') ] ) (redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)}) ] ) (command.ControlFlow token:<ControlFlow_Exit exit>) ] spids: [287] ) spids: [283 286] ) (command.FuncDef name: warn body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {(eval)} {(DQ ($ VSub_At '$@'))})] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (command.SimpleCommand words: [ {(echo)} { (DQ ('WARNING: command failed ') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_At '$@') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ) } ] redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) ] spids: [16777215 365] ) ] spids: [16777215 381] ) ] spids: [351] ) spids: [347 350] ) (command.FuncDef name: end body: (command.BraceGroup children: [ (command.SimpleCommand words: [{(echo)}] redirects: [(redir.Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})] ) (command.SimpleCommand words: [{(echo)} {(DQ ('Ending tracing...'))}] redirects: [(redir.Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})] ) (C {(cd)} {($ VSub_DollarName '$tracing')}) (C {(warn)} {(DQ ('echo 0 > events/uprobes/') ($ VSub_DollarName '$uname') (/enable))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_filter>) spids: [429 434] ) terminator: <Op_Semi ';'> ) ] action: [ (C {(warn)} {(DQ ('echo 0 > events/uprobes/') ($ VSub_DollarName '$uname') (/filter))} ) ] spids: [16777215 437] ) ] spids: [16777215 449] ) (C {(warn)} {(DQ ('echo -:') ($ VSub_DollarName '$uname') (' >> uprobe_events'))}) (command.AndOr ops: [Op_DAmp] children: [ (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_stack>) spids: [461 466] ) (C {(warn)} {(DQ ('echo 0 > options/userstacktrace'))}) ] ) (C {(warn)} {(DQ ('echo > trace'))}) (command.AndOr ops: [Op_DAmp] children: [ (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike wroteflock>) spids: [484 489] ) (C {(warn)} {(DQ ('rm ') ($ VSub_DollarName '$flock'))}) ] ) ] spids: [390] ) spids: [386 389] ) (command.FuncDef name: die body: (command.BraceGroup children: [ (command.SimpleCommand words: [{(echo)} {(DQ ($ VSub_At '$@'))}] redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [507] ) spids: [503 506] ) (command.FuncDef name: edie body: (command.BraceGroup children: [ (command.SimpleCommand words: [{(echo)} {(DQ ($ VSub_At '$@'))}] redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (command.SimpleCommand words: [{(exec)}] redirects: [ (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)}) (redir.Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)}) ] ) (C {(end)}) (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [531] ) spids: [527 530] ) (command.FuncDef name: set_path body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:name spids:[574]) op: Equal rhs: {($ VSub_Number '$1')} spids: [574] ) ] spids: [574] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:path spids:[579]) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(which)} {($ VSub_DollarName '$name')})] ) left_token: <Left_CommandSub '$('> spids: [580 584] ) } spids: [579] ) ] spids: [579] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_DollarName '$path'))} right: {(DQ )} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:path spids:[606]) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.SimpleCommand words: [{(ldconfig)} {(-v)}] redirects: [ (redir.Redir op: <Redir_Great '2>'> fd: 2 arg_word: {(/dev/null)} ) ] ) (C {(awk)} {(-v)} {(Lit_VarLike 'lib=') ($ 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 ) ] ) left_token: <Left_CommandSub '$('> spids: [607 630] ) } spids: [606] ) ] spids: [606] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_DollarName '$path'))} right: {(DQ )} ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(die)} { (DQ ('ERROR: segment ') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_DollarName '$name') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ambiguous.') ) } {(DQ ('Program or library? Try a full path.'))} ) ] spids: [16777215 649] ) ] spids: [16777215 669] ) ] spids: [16777215 603] ) ] spids: [16777215 672] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.BoolUnary op_id: BoolUnary_x child: {($ VSub_DollarName '$path')} ) ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(die)} { (DQ ('ERROR: resolved ') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_DollarName '$name') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' to ') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_DollarName '$path') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (', but file missing') ) } ) ] spids: [16777215 689] ) ] spids: [16777215 707] ) ] spids: [571] ) spids: [567 570] ) (command.FuncDef name: set_addr body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:path spids:[719]) op: Equal rhs: {($ VSub_Number '$1')} spids: [719] ) ] spids: [719] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:name spids:[723]) op: Equal rhs: {($ VSub_Number '$2')} spids: [723] ) ] spids: [723] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:sym spids:[727]) op: Equal rhs: {($ VSub_Number '$3')} spids: [727] ) ] spids: [727] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_DollarName '$path'))} right: {(DQ )} ) ) (C {(die)} {(DQ ('ERROR: missing symbol path.'))}) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_DollarName '$sym'))} right: {(DQ )} ) ) (C {(die)} {(DQ ('ERROR: missing symbol for ') ($ VSub_DollarName '$path'))}) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:addr spids:[778]) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(objdump)} {(-tT)} {($ VSub_DollarName '$path')}) (C {(awk)} {(-v)} {(Lit_VarLike 'sym=') ($ VSub_DollarName '$sym')} { (SQ <'\n'> <'\t $NF == sym && $4 == ".text" { print $1; exit }'> ) } ) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [779 799] ) } spids: [778] ) ] spids: [778] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_DollarName '$addr'))} right: {(DQ )} ) ) (C {(die)} { (DQ ('ERROR: missing symbol ') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_DollarName '$sym') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' in ') ($ VSub_DollarName '$path') ) } ) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DParen child: (arith_expr.ArithBinary op_id: Arith_DEqual left: (arith_expr.ArithWord w: {(Lit_Digits 0) (Lit_ArithVarLike x) ($ VSub_DollarName '$addr')} ) right: (arith_expr.ArithWord w:{(Lit_Digits 0)}) ) spids: [829 840] ) (C {(die)} { (DQ ('ERROR: failed resolving ') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_DollarName '$sym') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' in ') ($ VSub_DollarName '$path') (.) ) } {(DQ ('Maybe it exists in a different target (eg, library)?'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:addr spids:[863]) op: Equal rhs: {(0x) (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(printf)} {(DQ ('%x'))} {(0x) ($ VSub_DollarName '$addr')})] ) left_token: <Left_CommandSub '$('> spids: [865 876] ) } spids: [863] ) ] spids: [863] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:type spids:[883]) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(file)} {($ VSub_DollarName '$path')})] ) left_token: <Left_CommandSub '$('> spids: [884 888] ) } spids: [883] ) ] spids: [883] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: {(DQ ($ VSub_DollarName '$type'))} right: {(Lit_Other '*') (shared) (Lit_Other '?') (object) (Lit_Other '*')} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:base spids:[921]) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(objdump)} {(-x)} {($ VSub_DollarName '$path')}) (C {(awk)} { (SQ <'\n'> < '\t\t $1 == "LOAD" && $3 ~ /^[0x]*$/ { print $5 }' > ) } ) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [922 937] ) } spids: [921] ) ] spids: [921] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: {(DQ ($ VSub_DollarName '$base'))} right: {(0x) (Lit_Other '*')} ) ) (C {(die)} {(DQ ('ERROR: finding base load addr'))} {(DQ ('for ') ($ VSub_DollarName '$path') (.))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:addr spids:[969]) op: Equal rhs: { (word_part.ArithSubPart anode: (arith_expr.ArithBinary op_id: Arith_Minus left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike addr>) right: (arith_expr.ArithVarRef token:<Lit_ArithVarLike base>) ) spids: [970 979] ) } spids: [969] ) ] spids: [969] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DParen child: (arith_expr.ArithBinary op_id: Arith_Less left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike addr>) right: (arith_expr.ArithWord w:{(Lit_Digits 0)}) ) spids: [982 991] ) (C {(die)} {(DQ ('ERROR: transposed address for ') ($ VSub_DollarName '$sym'))} {(DQ ('became negative: ') ($ VSub_DollarName '$addr'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:addr spids:[1009]) op: Equal rhs: {(0x) (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(printf)} {(DQ ('%x'))} {($ VSub_DollarName '$addr')}) ] ) left_token: <Left_CommandSub '$('> spids: [1011 1020] ) } spids: [1009] ) ] spids: [1009] ) ] spids: [16777215 910] ) ] spids: [16777215 1023] ) ] spids: [716] ) spids: [712 715] ) (command.WhileUntil keyword: <KW_While while> cond: [ (C {(getopts)} {(Fd) (Lit_Other ':') (hHl) (Lit_Other ':') (p) (Lit_Other ':') (L) (Lit_Other ':') (sv)} {(opt)} ) ] body: (command.DoGroup children: [ (command.Case to_match: {($ VSub_DollarName '$opt')} arms: [ (case_arm pat_list: [{(F)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_force spids:[1060]) op: Equal rhs: {(1)} spids: [1060] ) ] spids: [1060] ) ] spids: [1057 1058 1063 16777215] ) (case_arm pat_list: [{(d)}] action: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_duration spids:[1069]) op: Equal rhs: {(1)} spids: [1069] ) ] spids: [1069] ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:duration spids:[1073]) op: Equal rhs: {($ VSub_DollarName '$OPTARG')} spids: [1073] ) ] spids: [1073] ) ] spids: [1066 1067 1076 16777215] ) (case_arm pat_list: [{(p)}] action: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_pid spids:[1082]) op: Equal rhs: {(1)} spids: [1082] ) ] spids: [1082] ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:pid spids:[1086]) op: Equal rhs: {($ VSub_DollarName '$OPTARG')} spids: [1086] ) ] spids: [1086] ) ] spids: [1079 1080 1089 16777215] ) (case_arm pat_list: [{(L)}] action: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_tid spids:[1095]) op: Equal rhs: {(1)} spids: [1095] ) ] spids: [1095] ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:tid spids:[1099]) op: Equal rhs: {($ VSub_DollarName '$OPTARG')} spids: [1099] ) ] spids: [1099] ) ] spids: [1092 1093 1102 16777215] ) (case_arm pat_list: [{(l)}] action: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_list spids:[1108]) op: Equal rhs: {(1)} spids: [1108] ) ] spids: [1108] ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:target spids:[1112]) op: Equal rhs: {($ VSub_DollarName '$OPTARG')} spids: [1112] ) ] spids: [1112] ) ] spids: [1105 1106 1115 16777215] ) (case_arm pat_list: [{(H)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_headers spids:[1121]) op: Equal rhs: {(1)} spids: [1121] ) ] spids: [1121] ) ] spids: [1118 1119 1124 16777215] ) (case_arm pat_list: [{(s)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_stack spids:[1130]) op: Equal rhs: {(1)} spids: [1130] ) ] spids: [1130] ) ] spids: [1127 1128 1133 16777215] ) (case_arm pat_list: [{(v)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_view spids:[1139]) op: Equal rhs: {(1)} spids: [1139] ) ] spids: [1139] ) ] spids: [1136 1137 1142 16777215] ) (case_arm pat_list: [{(h)} {(Lit_Other '?')}] action: [(C {(usage)})] spids: [1145 1148 1152 16777215] ) ] spids: [1050 1054 1155] ) ] spids: [1047 1157] ) ) (C {(shift)} { (word_part.ArithSubPart anode: (arith_expr.ArithBinary op_id: Arith_Minus left: (arith_expr.ArithWord w:{($ VSub_DollarName '$OPTIND')}) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) spids: [1161 1170] ) } ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:uprobe spids:[1172]) op: Equal rhs: {($ VSub_Number '$1')} spids: [1172] ) ] spids: [1172] ) (C {(shift)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithWord w:{($ VSub_Pound '$#')}) spids: [1179 1184] ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_filter spids:[1190]) op: Equal rhs: {(1)} spids: [1190] ) ] spids: [1190] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:filter spids:[1194]) op: Equal rhs: {($ VSub_Number '$1')} spids: [1194] ) ] spids: [1194] ) ] spids: [16777215 1187] ) ] spids: [16777215 1197] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.LogicalAnd left: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_DollarName '$opt_list'))} right: {(1)} ) right: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: {(DQ ($ 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.ArithVarRef token:<Lit_ArithVarLike opt_list>) spids: [1236 1241] ) terminator: <Op_Semi ';'> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: {(DQ ($ VSub_DollarName '$target'))} right: {(Lit_Other '*') (/) (Lit_Other '*')} ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(set_path)} {($ VSub_DollarName '$target')}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:target spids:[1272]) op: Equal rhs: {($ VSub_DollarName '$path')} spids: [1272] ) ] spids: [1272] ) ] spids: [16777215 1264] ) ] spids: [16777215 1276] ) (command.Pipeline children: [ (C {(objdump)} {(-tT)} {($ VSub_DollarName '$target')}) (C {(awk)} {(SQ <'$4 == ".text" { print $NF }'>)}) (C {(sort)}) (C {(uniq)}) ] negated: F ) (command.ControlFlow token:<ControlFlow_Exit exit>) ] spids: [16777215 1244] ) ] spids: [16777215 1304] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:ver spids:[1310]) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(uname)} {(-r)})]) left_token: <Left_CommandSub '$('> spids: [1311 1315] ) } spids: [1310] ) ] spids: [1310] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:maj spids:[1317]) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name ver> suffix_op: (suffix_op.StringUnary op_id:VOp1_DPercent arg_word:{('.*')}) spids: [1318 1322] ) } spids: [1317] ) ] spids: [1317] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithBinary op_id: Arith_DAmp left: (arith_expr.ArithBinary op_id: Arith_DEqual left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_force>) right: (arith_expr.ArithWord w:{(Lit_Digits 0)}) ) right: (arith_expr.ArithBinary op_id: Arith_Less left: (arith_expr.ArithWord w:{($ VSub_DollarName '$maj')}) right: (arith_expr.ArithWord w:{(Lit_Digits 4)}) ) ) spids: [1326 1343] ) terminator: <Op_Semi ';'> ) ] action: [ (command.SimpleCommand words: [{(cat)}] redirects: [ (redir.HereDoc op: <Redir_DLessDash '<<-'> fd: 16777215 here_begin: {(END)} here_end_span_id: 1366 stdin_parts: [ ('ERROR: Kernel version >= 4.0 preferred (you have ') ($ 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.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)}) ] ) (command.ControlFlow token:<ControlFlow_Exit exit>) ] spids: [16777215 1346] ) ] spids: [16777215 1370] ) (command.ForEach iter_name: cmd iter_words: [{(file)} {(objdump)} {(ldconfig)} {(awk)}] do_arg_iter: F body: (command.DoGroup children: [ (command.SimpleCommand words: [{(which)} {($ VSub_DollarName '$cmd')}] redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)})] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DParen child: (arith_expr.ArithBinary op_id: Arith_NEqual left: (arith_expr.ArithWord w:{($ VSub_QMark '$?')}) right: (arith_expr.ArithWord w:{(Lit_Digits 0)}) ) spids: [1403 1412] ) (C {(die)} { (DQ ('ERROR: missing ') ($ VSub_DollarName '$cmd') (' in ') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\$'> ) ('PATH. ') ($ VSub_Number '$0') (' needs') ) } {(DQ ('to use this command. Exiting.'))} ) ] ) ] spids: [1391 1434] ) spids: [1381 1389] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_DollarName '$uprobe'))} right: {(DQ )} ) ) (C {(usage)}) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DParen child: (arith_expr.ArithBinary op_id: Arith_Great left: (arith_expr.ArithBinary op_id: Arith_Plus left: (arith_expr.ArithBinary op_id: Arith_Plus left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_pid>) right: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_filter>) ) right: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_tid>) ) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) spids: [1457 1474] ) (C {(die)} {(DQ ('ERROR: use at most one of -p, -L, or filter.'))}) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DParen child: (arith_expr.ArithBinary op_id: Arith_DAmp left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_duration>) right: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_view>) ) spids: [1486 1495] ) (C {(die)} {(DQ ('ERROR: use either -d or -v.'))}) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_pid>) spids: [1507 1512] ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_filter spids:[1522]) op: Equal rhs: {(1)} spids: [1522] ) ] spids: [1522] ) (command.ForEach iter_name: tid iter_words: [{(/proc/) ($ VSub_DollarName '$pid') (/task/) (Lit_Other '*')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:filter spids:[1545]) op: Equal rhs: { (DQ ($ VSub_DollarName '$filter') (' || common_pid == ') (word_part.BracedVarSub token: <VSub_Name tid> suffix_op: (suffix_op.StringUnary op_id: VOp1_DPound arg_word: {('*') (Lit_Slash /)} ) spids: [1549 1554] ) ) } spids: [1545] ) ] spids: [1545] ) ] spids: [1542 1558] ) spids: [1535 1540] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:filter spids:[1561]) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name filter> suffix_op: (suffix_op.Slice begin:(arith_expr.ArithWord w:{(Lit_Digits 3)})) spids: [1562 1566] ) } spids: [1561] ) ] spids: [1561] ) ] spids: [16777215 1515] ) ] spids: [16777215 1571] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_tid>) spids: [1575 1580] ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opt_filter spids:[1586]) op: Equal rhs: {(1)} spids: [1586] ) ] spids: [1586] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:filter spids:[1590]) op: Equal rhs: {(DQ ('common_pid == ') ($ VSub_DollarName '$tid'))} spids: [1590] ) ] spids: [1590] ) ] spids: [16777215 1583] ) ] spids: [16777215 1596] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalAnd left: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: {(DQ ($ VSub_DollarName '$uprobe'))} right: {(p) (Lit_Other ':') (Lit_Other '*')} ) right: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: {(DQ ($ VSub_DollarName '$uprobe'))} right: {(r) (Lit_Other ':') (Lit_Other '*')} ) ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.SimpleCommand words: [{(echo)} {(DQ ('ERROR: invalid uprobe definition (should start with p: or r:)'))}] redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (C {(usage)}) ] spids: [16777215 1627] ) ] spids: [16777215 1642] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:utype spids:[1695]) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name uprobe> suffix_op: (suffix_op.StringUnary op_id:VOp1_DPercent arg_word:{(':*')}) spids: [1696 1700] ) } spids: [1695] ) ] spids: [1695] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:urest spids:[1702]) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name uprobe> suffix_op: (suffix_op.StringUnary op_id:VOp1_Pound arg_word:{('*:')}) spids: [1704 1708] ) (' ') ) } spids: [1702] ) ] spids: [1702] ) (C {(set)} {(--)} {($ VSub_DollarName '$urest')}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {($ VSub_Number '$1')} right: {(Lit_Other '*') (Lit_Other ':') (Lit_Other '*')} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:uname spids:[1736]) op: Equal rhs: (word.EmptyWord) spids: [1736] ) ] spids: [1736] ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:probe spids:[1739]) op: Equal rhs: {($ VSub_Number '$1')} spids: [1739] ) ] spids: [1739] ) terminator: <Op_Semi ';'> ) (command.Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:uargs spids:[1746]) op: Equal rhs: {(DQ ($ VSub_At '$@'))} spids: [1746] ) ] spids: [1746] ) ] spids: [16777215 1733] ) ] else_action: [ (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: {($ VSub_Number '$2')} right: {(Lit_Other '*') (Lit_Other ':') (Lit_Other '*')} ) ) (C {(die)} {(DQ ('ERROR: invalid probe. See usage (-h).'))}) ] ) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:uname spids:[1775]) op: Equal rhs: {($ VSub_Number '$1')} spids: [1775] ) ] spids: [1775] ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:probe spids:[1779]) op: Equal rhs: {($ VSub_Number '$2')} spids: [1779] ) ] spids: [1779] ) terminator: <Op_Semi ';'> ) (command.Sentence child:(C {(shift)} {(2)}) terminator:<Op_Semi ';'>) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:uargs spids:[1788]) op: Equal rhs: {(DQ ($ VSub_At '$@'))} spids: [1788] ) ] spids: [1788] ) ] spids: [1751 1793] ) (command.CommandList children: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:path spids:[1795]) op: Equal rhs: {($ VSub_DollarName '$probe')} spids: [1795] ) ] spids: [1795] ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:path spids:[1799]) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name path> suffix_op: (suffix_op.StringUnary op_id:VOp1_DPercent arg_word:{(':*')}) spids: [1800 1804] ) } spids: [1799] ) ] spids: [1799] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:addr spids:[1806]) op: Equal rhs: {($ VSub_DollarName '$probe')} spids: [1806] ) ] spids: [1806] ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:addr spids:[1810]) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name addr> suffix_op: (suffix_op.StringUnary op_id:VOp1_DPound arg_word:{('*:')}) spids: [1811 1815] ) } spids: [1810] ) ] spids: [1810] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {($ VSub_DollarName '$path')} right: {(Lit_Other '*') (/) (Lit_Other '*')} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:seg spids:[1839]) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name path> suffix_op: (suffix_op.StringUnary op_id: VOp1_DPound arg_word: {('*') (Lit_Slash /)} ) spids: [1840 1845] ) } spids: [1839] ) ] spids: [1839] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:seg spids:[1848]) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name seg> suffix_op: (suffix_op.StringUnary op_id:VOp1_DPercent arg_word:{('.*')}) spids: [1849 1853] ) } spids: [1848] ) ] spids: [1848] ) ] spids: [16777215 1836] ) ] else_action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:seg spids:[1858]) op: Equal rhs: {($ VSub_DollarName '$path')} spids: [1858] ) ] spids: [1858] ) (C {(set_path)} {($ VSub_DollarName '$path')}) ] spids: [1855 1870] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_DollarName '$addr'))} right: {(0x) (Lit_Other '*')} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_DollarName '$uname'))} right: {(DQ )} ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:uname spids:[1914]) op: Equal rhs: {(${ VSub_Name seg) (_) ($ VSub_DollarName '$addr')} spids: [1914] ) ] spids: [1914] ) ] ) ] spids: [16777215 1892] ) ] else_action: [ (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_DollarName '$uname'))} right: {(DQ )} ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:uname spids:[1939]) op: Equal rhs: {($ VSub_DollarName '$addr')} spids: [1939] ) ] spids: [1939] ) ] ) (C {(set_addr)} {($ VSub_DollarName '$path')} {($ VSub_DollarName '$seg')} {($ VSub_DollarName '$addr')} ) ] spids: [1921 1951] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:uprobe spids:[1957]) op: Equal rhs: { (DQ ($ VSub_DollarName '$utype') (':') ($ VSub_DollarName '$uname') (' ') ($ VSub_DollarName '$path') (':') ($ VSub_DollarName '$addr') ) } spids: [1957] ) ] spids: [1957] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: {(DQ ($ VSub_DollarName '$uargs'))} right: {(DQ )} ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:uprobe spids:[1983]) op: Equal rhs: {(DQ ($ VSub_DollarName '$uprobe') (' ') ($ VSub_DollarName '$uargs'))} spids: [1983] ) ] spids: [1983] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike debug>) spids: [1993 1998] ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} { (DQ ('uname: ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ($ VSub_DollarName '$uname') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (', uprobe: ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ($ VSub_DollarName '$uprobe') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ) } ) ] spids: [16777215 2001] ) ] spids: [16777215 2017] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(cd)} {($ 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.ArithUnary op_id: Arith_Bang child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_view>) ) spids: [2039 2045] ) terminator: <Op_Semi ';'> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_duration>) spids: [2053 2058] ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} { (DQ ('Tracing uprobe ') ($ VSub_DollarName '$uname') (' for ') ($ VSub_DollarName '$duration') (' seconds (buffered)...') ) } ) ] spids: [16777215 2061] ) ] else_action: [ (C {(echo)} { (DQ ('Tracing uprobe ') ($ VSub_DollarName '$uname') (' (') ($ VSub_DollarName '$uprobe') ('). Ctrl-C to end.') ) } ) ] spids: [2075 2089] ) ] spids: [16777215 2048] ) ] spids: [16777215 2091] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.BoolUnary op_id:BoolUnary_e child:{($ VSub_DollarName '$flock')}) ) (C {(die)} { (DQ ('ERROR: ftrace may be in use by PID ') (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(cat)} {($ VSub_DollarName '$flock')})] ) left_token: <Left_CommandSub '$('> spids: [2111 2115] ) (' ') ($ VSub_DollarName '$flock') ) } ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (command.SimpleCommand words: [{(echo)} {($ VSub_Dollar '$$')}] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {($ VSub_DollarName '$flock')} ) ] ) (C {(die)} {(DQ ('ERROR: unable to write ') ($ VSub_DollarName '$flock') (.))}) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:wroteflock spids:[2138]) op: Equal rhs: {(1)} spids: [2138] ) ] spids: [2138] ) (command.SimpleCommand words: [{(echo)} {(nop)}] redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(current_tracer)})] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.SimpleCommand words: [{(echo)} {(DQ ($ VSub_DollarName '$uprobe'))}] redirects: [ (redir.Redir op: <Redir_DGreat '>>'> fd: 16777215 arg_word: {(uprobe_events)} ) ] ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (command.SimpleCommand words: [ {(echo)} { (DQ ('ERROR: adding uprobe ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ($ VSub_DollarName '$uprobe') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (.) ) } ] redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike dmesg>) spids: [2187 2192] ) terminator: <Op_Semi ';'> ) ] action: [ (command.SimpleCommand words: [ {(echo)} { (DQ ('Last ') ($ VSub_DollarName '$dmesg') (' dmesg entries (might contain reason):') ) } ] redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (command.Pipeline children: [ (C {(dmesg)}) (C {(tail)} {(-) ($ VSub_DollarName '$dmesg')}) (C {(sed)} {(SQ <'s/^/ /'>)}) ] negated: F ) ] spids: [16777215 2195] ) ] spids: [16777215 2228] ) (C {(edie)} {(DQ (Exiting.))}) ] spids: [16777215 2168] ) ] spids: [16777215 2237] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_view>) spids: [2241 2246] ) terminator: <Op_Semi ';'> ) ] action: [(C {(cat)} {(events/uprobes/) ($ VSub_DollarName '$uname') (/format)}) (C {(edie)} {(DQ )})] spids: [16777215 2249] ) ] spids: [16777215 2264] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_filter>) spids: [2268 2273] ) terminator: <Op_Semi ';'> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.SimpleCommand words: [{(echo)} {(DQ ($ VSub_DollarName '$filter'))}] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(events/uprobes/) ($ VSub_DollarName '$uname') (/filter)} ) ] ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [(C {(edie)} {(DQ ('ERROR: setting filter or -p. Exiting.'))})] spids: [16777215 2296] ) ] spids: [16777215 2306] ) ] spids: [16777215 2276] ) ] spids: [16777215 2308] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_stack>) spids: [2312 2317] ) terminator: <Op_Semi ';'> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.SimpleCommand words: [{(echo)} {(1)}] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(options/userstacktrace)} ) ] ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [(C {(edie)} {(DQ ('ERROR: enabling stack traces (-s). Exiting'))})] spids: [16777215 2336] ) ] spids: [16777215 2346] ) ] spids: [16777215 2320] ) ] spids: [16777215 2348] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.SimpleCommand words: [{(echo)} {(1)}] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(events/uprobes/) ($ VSub_DollarName '$uname') (/enable)} ) ] ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(edie)} {(DQ ('ERROR: enabling uprobe ') ($ VSub_DollarName '$uname') ('. Exiting.'))}) ] spids: [16777215 2365] ) ] spids: [16777215 2376] ) (C {(warn)} {(DQ ('echo > trace'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_duration>) spids: [2390 2395] ) terminator: <Op_Semi ';'> ) ] action: [ (C {(sleep)} {($ VSub_DollarName '$duration')}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_headers>) spids: [2408 2413] ) terminator: <Op_Semi ';'> ) ] action: [(C {(cat)} {(trace)})] spids: [16777215 2416] ) ] else_action: [(C {(grep)} {(-v)} {(SQ <'^#'>)} {(trace)})] spids: [2424 2438] ) ] spids: [16777215 2398] ) ] else_action: [ (command.AndOr ops: [Op_DAmp] children: [ (command.DParen child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike opt_headers>) spids: [2447 2452] ) (C {(cat)} {(trace)}) ] ) (C {(cat)} {(trace_pipe)}) ] spids: [2440 2465] ) (C {(end)}) ] )