(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:{(EmptyPart)} 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:{(EmptyPart)} 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:{(EmptyPart)} 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:{(EmptyPart)} 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: 16777215 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: T spids: [238] ) (Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[241]) ] ) (ControlFlow token:<ControlFlow_Exit 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:T) 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:16777215 arg_word:{(2)} spids:[299])] ) ] spids: [16777215 294] ) ] spids: [16777215 310] ) ] spids: [280] ) spids: [276 279] ) (FuncDef name: end body: (BraceGroup children: [ (SimpleCommand words: [{(echo)}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[328])] ) (SimpleCommand words: [{(echo)} {(DQ ('Ending tracing...'))}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[338])] ) (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: [16777215 366] ) ] spids: [16777215 378] ) (AndOr ops: [Op_DAmp] children: [ (DParen child:(ArithVarRef name:opt_stack)) (C {(warn)} {(DQ ('echo 0 > options/stacktrace'))}) ] ) (C {(warn)} {(DQ ('echo > trace'))}) (AndOr ops: [Op_DAmp] children: [ (DParen child:(ArithVarRef name:wroteflock)) (C {(warn)} {(DQ ('rm ') ($ VSub_Name '$flock'))}) ] ) ] spids: [319] ) spids: [315 318] ) (FuncDef name: die body: (BraceGroup children: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_At '$@'))}] redirects: [(Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[432])] ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [427] ) spids: [423 426] ) (FuncDef name: edie body: (BraceGroup children: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_At '$@'))}] redirects: [(Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[460])] ) (SimpleCommand words: [{(exec)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [470] ) (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[473]) ] ) (C {(end)}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [451] ) spids: [447 450] ) (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: [517] ) ] spids: [517] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:duration) op: Equal rhs: {($ VSub_Name '$OPTARG')} spids: [521] ) ] spids: [521] ) ] spids: [514 515 524 16777215] ) (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: [530] ) ] spids: [530] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:pid) op: Equal rhs: {($ VSub_Name '$OPTARG')} spids: [534] ) ] spids: [534] ) ] spids: [527 528 537 16777215] ) (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: [543] ) ] spids: [543] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tid) op: Equal rhs: {($ VSub_Name '$OPTARG')} spids: [547] ) ] spids: [547] ) ] spids: [540 541 550 16777215] ) (case_arm pat_list: [{(H)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_headers) op: Equal rhs: {(1)} spids: [556] ) ] spids: [556] ) ] spids: [553 554 559 16777215] ) (case_arm pat_list: [{(l)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_list) op: Equal rhs: {(1)} spids: [565] ) ] spids: [565] ) ] spids: [562 563 568 16777215] ) (case_arm pat_list: [{(s)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_stack) op: Equal rhs: {(1)} spids: [574] ) ] spids: [574] ) ] spids: [571 572 577 16777215] ) (case_arm pat_list: [{(v)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_view) op: Equal rhs: {(1)} spids: [583] ) ] spids: [583] ) ] spids: [580 581 586 16777215] ) (case_arm pat_list: [{(h)} {(Lit_Other '?')}] action: [(C {(usage)})] spids: [589 592 596 16777215] ) ] spids: [507 511 599] ) ] spids: [504 601] ) ) (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: [619 628] ) } ) (AndOr ops: [Op_DPipe] children: [(DParen child:(ArithWord w:{($ VSub_Pound '$#')})) (C {(usage)})] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tpoint) op: Equal rhs: {($ VSub_Number '$1')} spids: [643] ) ] spids: [643] ) (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: [663] ) ] spids: [663] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:filter) op: Equal rhs: {($ VSub_Number '$1')} spids: [667] ) ] spids: [667] ) ] spids: [16777215 660] ) ] spids: [16777215 671] ) ] spids: [16777215 614] ) ] spids: [16777215 673] ) (AndOr ops: [Op_DAmp] 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.'))}) ] ) (AndOr ops: [Op_DAmp] 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.'))}) ] ) (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:[744])] spids: [744] ) (ForEach iter_name: tid iter_words: [{(/proc/) ($ VSub_Name '$pid') (/task/) (Lit_Other '*')}] do_arg_iter: F 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: [771 776] ) ) } spids: [767] ) ] spids: [767] ) ] spids: [764 780] ) spids: [757 762] ) (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: [784 788] ) } spids: [783] ) ] spids: [783] ) ] spids: [16777215 737] ) ] spids: [16777215 793] ) (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:[808])] spids: [808] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:filter) op: Equal rhs: {(DQ ('common_pid == ') ($ VSub_Name '$tid'))} spids: [812] ) ] spids: [812] ) ] spids: [16777215 805] ) ] spids: [16777215 818] ) (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: [16777215 849] ) ] else_action: [ (C {(echo)} {(DQ ('Tracing ') ($ VSub_Name '$tpoint') ('. Ctrl-C to end.'))}) ] spids: [863 875] ) ] spids: [16777215 836] ) ] spids: [16777215 877] ) (AndOr ops: [Op_DPipe] 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)') ) } ) ] ) (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: F body: (DoGroup children: [ (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolUnary op_id:BoolUnary_f child:{($ VSub_Name '$tp')}) ) (ControlFlow token:<ControlFlow_Continue continue>) ] ) (C {(echo)} { (BracedVarSub token: <VSub_Name tp> suffix_op: (PatSub pat: {(EscapedLiteralPart token:<Lit_EscapedChar '\\/'>)} replace: {(':')} do_all: F do_prefix: F do_suffix: F ) spids: [951 957] ) } ) ] spids: [929 960] ) spids: [923 927] ) (ControlFlow token:<ControlFlow_Exit exit>) ] spids: [16777215 910] ) ] spids: [16777215 965] ) (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: F do_prefix: F do_suffix: F ) spids: [973 979] ) } spids: [971] ) ] spids: [971] ) (AndOr ops: [Op_DPipe] children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_e child:{($ VSub_Name '$tdir')})) (C {(die)} {(DQ ('ERROR: tracepoint ') ($ VSub_Name '$tpoint') (' not found. Exiting'))}) ] ) (If arms: [ (if_arm cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_view)) terminator:<Op_Semi ';'>)] action: [ (C {(cat)} {($ VSub_Name '$tdir') (/format)}) (ControlFlow token:<ControlFlow_Exit exit>) ] spids: [16777215 1013] ) ] spids: [16777215 1024] ) (AndOr ops: [Op_DAmp] 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: [1044 1048] ) (' ') ($ VSub_Name '$flock') ) } ) ] ) (AndOr ops: [Op_DPipe] children: [ (SimpleCommand words: [{(echo)} {($ VSub_Dollar '$$')}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$flock')} spids: [1057] ) ] ) (C {(die)} {(DQ ('ERROR: unable to write ') ($ VSub_Name '$flock') (.))}) ] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:wroteflock) op:Equal rhs:{(1)} spids:[1071])] spids: [1071] ) (SimpleCommand words: [{(echo)} {(nop)}] redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(current_tracer)} spids:[1082])] ) (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: 16777215 arg_word: {($ VSub_Name '$tdir') (/filter)} spids: [1109] ) ] ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [(C {(edie)} {(DQ ('ERROR: setting filter or -p. Exiting.'))})] spids: [16777215 1115] ) ] spids: [16777215 1125] ) ] spids: [16777215 1096] ) ] spids: [16777215 1127] ) (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: 16777215 arg_word: {(options/stacktrace)} spids: [1150] ) ] ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [(C {(edie)} {(DQ ('ERROR: enabling stack traces (-s). Exiting'))})] spids: [16777215 1155] ) ] spids: [16777215 1165] ) ] spids: [16777215 1139] ) ] spids: [16777215 1167] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(echo)} {(1)}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {($ VSub_Name '$tdir') (/enable)} spids: [1177] ) ] ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(edie)} {(DQ ('ERROR: enabling tracepoint ') ($ VSub_Name '$tprobe') ('. Exiting.'))}) ] spids: [16777215 1183] ) ] spids: [16777215 1194] ) (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: [16777215 1234] ) ] else_action: [(C {(grep)} {(-v)} {(SQ <'^#'>)} {(trace)})] spids: [1242 1256] ) ] spids: [16777215 1216] ) ] else_action: [ (AndOr ops: [Op_DAmp] children: [(DParen child:(ArithVarRef name:opt_headers)) (C {(cat)} {(trace)})] ) (C {(cat)} {(trace_pipe)}) ] spids: [1258 1283] ) (C {(end)}) ] )