(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)}) ] )