(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tracing) op: Equal rhs: {(/sys/kernel/debug/tracing)} spids: [157] ) ] spids: [157] ) (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:flock) op: Equal rhs: {(/var/tmp/.ftrace-lock)} spids: [160] ) ] spids: [160] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:wroteflock) op:Equal rhs:{(0)} spids:[164])] spids: [164] ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_duration) op:Equal rhs:{(0)} spids:[167])] spids: [167] ) terminator: <Op_Semi ';'> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:duration) op:Equal rhs:{(SQ )} spids:[171])] spids: [171] ) terminator: <Op_Semi ';'> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_pid) op:Equal rhs:{(0)} spids:[174])] spids: [174] ) terminator: <Op_Semi ';'> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:pid) op:Equal rhs:{(SQ )} spids:[178])] spids: [178] ) terminator: <Op_Semi ';'> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_tid) op:Equal rhs:{(0)} spids:[181])] spids: [181] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:tid) op:Equal rhs:{(SQ )} spids:[185])] spids: [185] ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_filter) op:Equal rhs:{(0)} spids:[187])] spids: [187] ) terminator: <Op_Semi ';'> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:filter) op:Equal rhs:{(SQ )} spids:[191])] spids: [191] ) terminator: <Op_Semi ';'> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_view) op:Equal rhs:{(0)} spids:[194])] spids: [194] ) terminator: <Op_Semi ';'> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_headers) op:Equal rhs:{(0)} spids:[198])] spids: [198] ) terminator: <Op_Semi ';'> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_stack) op:Equal rhs:{(0)} spids:[202])] spids: [202] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:dmesg) op:Equal rhs:{(2)} spids:[206])] spids: [206] ) (C {(trap)} {(SQ <':'>)} {(INT)} {(QUIT)} {(TERM)} {(PIPE)} {(HUP)}) (FuncDef name: usage body: (BraceGroup children: [ (SimpleCommand words: [{(cat)}] redirects: [ (HereDoc op_id: Redir_DLessDash fd: -1 body: { (DQ ('USAGE: tpoint [-hHsv] [-d secs] [-p PID] [-L TID] tracepoint [filter]\n') (' tpoint -l\n') (' -d seconds # trace duration, and use buffers\n') (' -p PID # PID to match on event\n') (' -L TID # thread id to match on event\n') (" -v # view format file (don't trace)\n") (' -H # include column headers\n') (' -l # list all tracepoints\n') (' -s # show kernel stack traces\n') (' -h # this usage message\n') (' eg,\n') (' tpoint -l | grep open\n') (' # find tracepoints containing ') (Right_DoubleQuote '"') (open) (Right_DoubleQuote '"') ('\n') (' tpoint syscalls:sys_enter_open\n') (' # trace open() syscall entry\n') (' tpoint block:block_rq_issue\n') (' # trace block I/O issue\n') (' tpoint -s block:block_rq_issue\n') (' # show kernel stacks\n') ('\n') ('See the man page and example file for more info.\n') ) } do_expansion: True here_end: END was_filled: True spids: [238] ) (Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[241]) ] ) (C {(exit)}) ] spids: [233] ) spids: [229 232] ) (FuncDef name: warn body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children:[(C {(eval)} {(DQ ($ VSub_At '$@'))})] negated:True) terminator: <Op_Semi ';'> ) ] action: [ (SimpleCommand words: [ {(echo)} { (DQ ('WARNING: command failed ') (EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_At '$@') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ) } ] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[298])] ) ] spids: [-1 293] ) ] spids: [-1 309] ) ] spids: [279] ) spids: [275 278] ) (FuncDef name: end body: (BraceGroup children: [ (SimpleCommand words: [{(echo)}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[327])] ) (SimpleCommand words: [{(echo)} {(DQ ('Ending tracing...'))}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[337])] ) (C {(cd)} {($ VSub_Name '$tracing')}) (C {(warn)} {(DQ ('echo 0 > ') ($ VSub_Name '$tdir') (/enable))}) (If arms: [ (if_arm cond: [ (Sentence child: (DParen child:(ArithVarRef name:opt_filter)) terminator: <Op_Semi ';'> ) ] action: [(C {(warn)} {(DQ ('echo 0 > ') ($ VSub_Name '$tdir') (/filter))})] spids: [-1 365] ) ] spids: [-1 377] ) (AndOr children: [ (DParen child:(ArithVarRef name:opt_stack)) (C {(warn)} {(DQ ('echo 0 > options/stacktrace'))}) ] op_id: Op_DAmp ) (C {(warn)} {(DQ ('echo > trace'))}) (AndOr children: [ (DParen child:(ArithVarRef name:wroteflock)) (C {(warn)} {(DQ ('rm ') ($ VSub_Name '$flock'))}) ] op_id: Op_DAmp ) ] spids: [318] ) spids: [314 317] ) (FuncDef name: die body: (BraceGroup children: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_At '$@'))}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[431])] ) (C {(exit)} {(1)}) ] spids: [426] ) spids: [422 425] ) (FuncDef name: edie body: (BraceGroup children: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_At '$@'))}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[459])] ) (SimpleCommand words: [{(exec)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[469]) (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[472]) ] ) (C {(end)}) (C {(exit)} {(1)}) ] spids: [450] ) spids: [446 449] ) (While cond: [ (C {(getopts)} {(d) (Lit_Other ':') (hHlp) (Lit_Other ':') (L) (Lit_Other ':') (sv)} {(opt)}) ] body: (DoGroup children: [ (Case to_match: {($ VSub_Name '$opt')} arms: [ (case_arm pat_list: [{(d)}] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_duration) op: Equal rhs: {(1)} spids: [516] ) ] spids: [516] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:duration) op: Equal rhs: {($ VSub_Name '$OPTARG')} spids: [520] ) ] spids: [520] ) ] spids: [513 514 523 -1] ) (case_arm pat_list: [{(p)}] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_pid) op: Equal rhs: {(1)} spids: [529] ) ] spids: [529] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:pid) op: Equal rhs: {($ VSub_Name '$OPTARG')} spids: [533] ) ] spids: [533] ) ] spids: [526 527 536 -1] ) (case_arm pat_list: [{(L)}] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_tid) op: Equal rhs: {(1)} spids: [542] ) ] spids: [542] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tid) op: Equal rhs: {($ VSub_Name '$OPTARG')} spids: [546] ) ] spids: [546] ) ] spids: [539 540 549 -1] ) (case_arm pat_list: [{(H)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_headers) op: Equal rhs: {(1)} spids: [555] ) ] spids: [555] ) ] spids: [552 553 558 -1] ) (case_arm pat_list: [{(l)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_list) op: Equal rhs: {(1)} spids: [564] ) ] spids: [564] ) ] spids: [561 562 567 -1] ) (case_arm pat_list: [{(s)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_stack) op: Equal rhs: {(1)} spids: [573] ) ] spids: [573] ) ] spids: [570 571 576 -1] ) (case_arm pat_list: [{(v)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_view) op: Equal rhs: {(1)} spids: [582] ) ] spids: [582] ) ] spids: [579 580 585 -1] ) (case_arm pat_list: [{(h)} {(Lit_Other '?')}] action: [(C {(usage)})] spids: [588 591 595 -1] ) ] spids: [506 510 598] ) ] spids: [503 600] ) ) (If arms: [ (if_arm cond: [ (Sentence child: (DParen child:(ArithUnary op_id:Arith_Bang child:(ArithVarRef name:opt_list))) terminator: <Op_Semi ';'> ) ] action: [ (C {(shift)} { (ArithSubPart anode: (ArithBinary op_id: Arith_Minus left: (ArithWord w:{($ VSub_Name '$OPTIND')}) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [618 627] ) } ) (AndOr children: [(DParen child:(ArithWord w:{($ VSub_Pound '$#')})) (C {(usage)})] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tpoint) op: Equal rhs: {($ VSub_Number '$1')} spids: [642] ) ] spids: [642] ) (C {(shift)}) (If arms: [ (if_arm cond: [ (Sentence child: (DParen child:(ArithWord w:{($ VSub_Pound '$#')})) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_filter) op: Equal rhs: {(1)} spids: [662] ) ] spids: [662] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:filter) op: Equal rhs: {($ VSub_Number '$1')} spids: [666] ) ] spids: [666] ) ] spids: [-1 659] ) ] spids: [-1 670] ) ] spids: [-1 613] ) ] spids: [-1 672] ) (AndOr children: [ (DParen child: (ArithBinary op_id: Arith_Great left: (ArithBinary op_id: Arith_Plus left: (ArithBinary op_id: Arith_Plus left: (ArithVarRef name:opt_pid) right: (ArithVarRef name:opt_filter) ) right: (ArithVarRef name:opt_tid) ) right: (ArithWord w:{(Lit_Digits 1)}) ) ) (C {(die)} {(DQ ('ERROR: use at most one of -p, -L, or filter.'))}) ] op_id: Op_DAmp ) (AndOr children: [ (DParen child: (ArithBinary op_id: Arith_DAmp left: (ArithVarRef name:opt_duration) right: (ArithVarRef name:opt_view) ) ) (C {(die)} {(DQ ('ERROR: use either -d or -v.'))}) ] op_id: Op_DAmp ) (If arms: [ (if_arm cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_pid)) terminator:<Op_Semi ';'>)] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_filter) op:Equal rhs:{(1)} spids:[743])] spids: [743] ) (ForEach iter_name: tid iter_words: [{(/proc/) ($ VSub_Name '$pid') (/task/) (Lit_Other '*')}] do_arg_iter: False body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:filter) op: Equal rhs: { (DQ ($ VSub_Name '$filter') (' || common_pid == ') (BracedVarSub token: <VSub_Name tid> suffix_op: (StringUnary op_id: VOp1_DPound arg_word: {('*') (Lit_Slash /)} ) spids: [770 775] ) ) } spids: [766] ) ] spids: [766] ) ] spids: [763 779] ) spids: [756 761] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:filter) op: Equal rhs: { (BracedVarSub token: <VSub_Name filter> suffix_op: (Slice begin:(ArithWord w:{(Lit_Digits 3)})) spids: [783 787] ) } spids: [782] ) ] spids: [782] ) ] spids: [-1 736] ) ] spids: [-1 792] ) (If arms: [ (if_arm cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_tid)) terminator:<Op_Semi ';'>)] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_filter) op:Equal rhs:{(1)} spids:[807])] spids: [807] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:filter) op: Equal rhs: {(DQ ('common_pid == ') ($ VSub_Name '$tid'))} spids: [811] ) ] spids: [811] ) ] spids: [-1 804] ) ] spids: [-1 817] ) (If arms: [ (if_arm cond: [ (Sentence child: (DParen child: (ArithBinary op_id: Arith_DAmp left: (ArithUnary op_id:Arith_Bang child:(ArithVarRef name:opt_view)) right: (ArithUnary op_id:Arith_Bang child:(ArithVarRef name:opt_list)) ) ) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (DParen child:(ArithVarRef name:opt_duration)) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} { (DQ ('Tracing ') ($ VSub_Name '$tpoint') (' for ') ($ VSub_Name '$duration') (' seconds (buffered)...') ) } ) ] spids: [-1 848] ) ] else_action: [ (C {(echo)} {(DQ ('Tracing ') ($ VSub_Name '$tpoint') ('. Ctrl-C to end.'))}) ] spids: [862 874] ) ] spids: [-1 835] ) ] spids: [-1 876] ) (AndOr children: [ (C {(cd)} {($ VSub_Name '$tracing')}) (C {(die)} { (DQ ('ERROR: accessing tracing. Root user? Kernel has FTRACE?\n') (' debugfs mounted? (mount -t debugfs debugfs /sys/kernel/debug)') ) } ) ] op_id: Op_DPipe ) (If arms: [ (if_arm cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_list)) terminator:<Op_Semi ';'>)] action: [ (C {(cd)} {(events)}) (ForEach iter_name: tp iter_words: [{(Lit_Other '*') (/) (Lit_Other '*')}] do_arg_iter: False body: (DoGroup children: [ (AndOr children: [ (DBracket expr: (BoolUnary op_id:BoolUnary_f child:{($ VSub_Name '$tp')}) ) (ControlFlow token:<ControlFlow_Continue continue>) ] op_id: Op_DAmp ) (C {(echo)} { (BracedVarSub token: <VSub_Name tp> suffix_op: (PatSub pat: {(EscapedLiteralPart token:<Lit_EscapedChar '\\/'>)} replace: {(':')} do_all: False do_prefix: False do_suffix: False ) spids: [950 956] ) } ) ] spids: [928 959] ) spids: [922 926] ) (C {(exit)}) ] spids: [-1 909] ) ] spids: [-1 964] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tdir) op: Equal rhs: {(events/) (BracedVarSub token: <VSub_Name tpoint> suffix_op: (PatSub pat: {(':')} replace: {(EscapedLiteralPart token:<Lit_EscapedChar '\\/'>)} do_all: False do_prefix: False do_suffix: False ) spids: [972 978] ) } spids: [970] ) ] spids: [970] ) (AndOr children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_e child:{($ VSub_Name '$tdir')})) (C {(die)} {(DQ ('ERROR: tracepoint ') ($ VSub_Name '$tpoint') (' not found. Exiting'))}) ] op_id: Op_DPipe ) (If arms: [ (if_arm cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_view)) terminator:<Op_Semi ';'>)] action: [(C {(cat)} {($ VSub_Name '$tdir') (/format)}) (C {(exit)})] spids: [-1 1012] ) ] spids: [-1 1023] ) (AndOr children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_e child:{($ VSub_Name '$flock')})) (C {(die)} { (DQ ('ERROR: ftrace may be in use by PID ') (CommandSubPart command_list: (CommandList children:[(C {(cat)} {($ VSub_Name '$flock')})]) left_token: <Left_CommandSub '$('> spids: [1043 1047] ) (' ') ($ VSub_Name '$flock') ) } ) ] op_id: Op_DAmp ) (AndOr children: [ (SimpleCommand words: [{(echo)} {($ VSub_Dollar '$$')}] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{($ VSub_Name '$flock')} spids:[1056])] ) (C {(die)} {(DQ ('ERROR: unable to write ') ($ VSub_Name '$flock') (.))}) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:wroteflock) op:Equal rhs:{(1)} spids:[1070])] spids: [1070] ) (SimpleCommand words: [{(echo)} {(nop)}] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(current_tracer)} spids:[1081])] ) (If arms: [ (if_arm cond: [ (Sentence child: (DParen child:(ArithVarRef name:opt_filter)) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_Name '$filter'))}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$tdir') (/filter)} spids: [1108] ) ] ) ] negated: True ) terminator: <Op_Semi ';'> ) ] action: [(C {(edie)} {(DQ ('ERROR: setting filter or -p. Exiting.'))})] spids: [-1 1114] ) ] spids: [-1 1124] ) ] spids: [-1 1095] ) ] spids: [-1 1126] ) (If arms: [ (if_arm cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_stack)) terminator:<Op_Semi ';'>)] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(echo)} {(1)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(options/stacktrace)} spids: [1149] ) ] ) ] negated: True ) terminator: <Op_Semi ';'> ) ] action: [(C {(edie)} {(DQ ('ERROR: enabling stack traces (-s). Exiting'))})] spids: [-1 1154] ) ] spids: [-1 1164] ) ] spids: [-1 1138] ) ] spids: [-1 1166] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(echo)} {(1)}] redirects: [ (Redir op_id: Redir_DGreat fd: -1 arg_word: {($ VSub_Name '$tdir') (/enable)} spids: [1176] ) ] ) ] negated: True ) terminator: <Op_Semi ';'> ) ] action: [ (C {(edie)} {(DQ ('ERROR: enabling tracepoint ') ($ VSub_Name '$tprobe') ('. Exiting.'))}) ] spids: [-1 1182] ) ] spids: [-1 1193] ) (C {(warn)} {(DQ ('echo > trace'))}) (If arms: [ (if_arm cond: [ (Sentence child: (DParen child:(ArithVarRef name:opt_duration)) terminator: <Op_Semi ';'> ) ] action: [ (C {(sleep)} {($ VSub_Name '$duration')}) (If arms: [ (if_arm cond: [ (Sentence child: (DParen child:(ArithVarRef name:opt_headers)) terminator: <Op_Semi ';'> ) ] action: [(C {(cat)} {(trace)})] spids: [-1 1233] ) ] else_action: [(C {(grep)} {(-v)} {(SQ <'^#'>)} {(trace)})] spids: [1241 1255] ) ] spids: [-1 1215] ) ] else_action: [ (AndOr children: [(DParen child:(ArithVarRef name:opt_headers)) (C {(cat)} {(trace)})] op_id: Op_DAmp ) (C {(cat)} {(trace_pipe)}) ] spids: [1257 1282] ) (C {(end)}) ] )