(CommandList children: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id:Redir_Less left:{($ VSub_Pound "$#")} right:{(2)}) ) terminator: <Op_Semi ";"> ) ] action: [ (C {(echo)} {(DQ ("Usage:"))}) (C {(echo)} {(DQ ("\t") ($ VSub_Number "$0") (" [vmlinux] [base path] [modules path]"))}) (C {(exit)} {(1)}) ] spids: [-1 23] ) ] spids: [-1 46] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:vmlinux) op:Equal rhs:{($ VSub_Number "$1")} spids:[49])] spids: [49] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:basepath) op: Equal rhs: {($ VSub_Number "$2")} spids: [52] ) ] spids: [52] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:modpath) op:Equal rhs:{($ VSub_Number "$3")} spids:[55])] spids: [55] ) (Assignment keyword: Assign_Declare flags: ["'-A'"] pairs: [(assign_pair lhs:(LhsName name:cache) op:Equal spids:[62])] spids: [58] ) (Assignment keyword: Assign_Declare flags: ["'-A'"] pairs: [(assign_pair lhs:(LhsName name:modcache) op:Equal spids:[68])] spids: [64] ) (FuncDef name: parse_symbol body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{($ VSub_Name "$module")} right:{(DQ )}) ) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:objfile) op: Equal rhs: {($ VSub_Name "$vmlinux")} spids: [119] ) ] spids: [117] ) ] spids: [-1 114] ) (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: { (DQ (BracedVarSub token: <VSub_Name modcache> bracket_op: (ArrayIndex expr: (ArithWord w:{($ VSub_Name "$module")}) ) suffix_op: (StringUnary op_id:VTest_Plus arg_word:{(isset)}) spids: [128 135] ) ) } right: {(DQ (isset))} ) ) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:objfile) op: Equal rhs: { (BracedVarSub token: <VSub_Name modcache> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$module")})) spids: [153 158] ) } spids: [152] ) ] spids: [150] ) ] spids: [123 147] ) ] else_action: [ (AndOr children: [ (DBracket expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{($ VSub_Name "$modpath")} right:{(DQ )}) ) (ControlFlow token:<ControlFlow_Return return>) ] op_id: Op_DAmp ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:objfile) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(find)} {(DQ ($ VSub_Name "$modpath"))} {(-name)} {($ VSub_Name "$module") (.ko)} {(-print)} {(-quit)} ) ] ) left_token: <Left_CommandSub "$("> spids: [183 198] ) } spids: [182] ) ] spids: [180] ) (AndOr children: [ (DBracket expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{($ VSub_Name "$objfile")} right:{(DQ )}) ) (ControlFlow token:<ControlFlow_Return return>) ] op_id: Op_DAmp ) (C {(modcache) (Lit_Other "[") ($ VSub_Name "$module") (Lit_Other "]") (Lit_Other "=") ($ VSub_Name "$objfile") } ) ] spids: [161 225] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:symbol) op: Equal rhs: { (BracedVarSub token: <VSub_Name symbol> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {(EscapedLiteralPart token:<Lit_EscapedChar "\\(">)} ) spids: [234 238] ) } spids: [233] ) ] spids: [233] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:symbol) op: Equal rhs: { (BracedVarSub token: <VSub_Name symbol> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {(EscapedLiteralPart token:<Lit_EscapedChar "\\)">)} ) spids: [242 246] ) } spids: [241] ) ] spids: [241] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:name) op: Equal rhs: { (BracedVarSub token: <VSub_Name symbol> suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{("+*")}) spids: [257 261] ) } spids: [256] ) ] spids: [254] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: { (DQ (BracedVarSub token: <VSub_Name cache> bracket_op: (ArrayIndex expr: (ArithBinary op_id: Arith_Comma left: (ArithWord w:{($ VSub_Name "$module")}) right: (ArithWord w:{($ VSub_Name "$name")}) ) ) suffix_op: (StringUnary op_id:VTest_Plus arg_word:{(isset)}) spids: [282 291] ) ) } right: {(DQ (isset))} ) ) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:base_addr) op: Equal rhs: { (BracedVarSub token: <VSub_Name cache> bracket_op: (ArrayIndex expr: (ArithBinary op_id: Arith_Comma left: (ArithWord w:{($ VSub_Name "$module")}) right: (ArithWord w:{($ VSub_Name "$name")}) ) ) spids: [309 316] ) } spids: [308] ) ] spids: [306] ) ] spids: [-1 303] ) ] else_action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:base_addr) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(nm)} {(DQ ($ VSub_Name "$objfile"))}) (C {(grep)} {(-i)} {(SQ <" t ">)}) (C {(awk)} { (DQ ("/ ") ($ VSub_Name "$name") (EscapedLiteralPart token: <Lit_EscapedChar "\\$"> ) ("/ {print ") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("1}") ) } ) (C {(head)} {(-n1)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [325 360] ) } spids: [324] ) ] spids: [322] ) (C {(cache) (Lit_Other "[") ($ VSub_Name "$module") (Lit_Comma ",") ($ VSub_Name "$name") (Lit_Other "]") (Lit_Other "=") (DQ ($ VSub_Name "$base_addr")) } ) ] spids: [319 375] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:expr) op: Equal rhs: { (BracedVarSub token: <VSub_Name symbol> suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ("*")}) spids: [389 394] ) } spids: [388] ) ] spids: [386] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:expr) op: Equal rhs: { (BracedVarSub token: <VSub_Name expr> suffix_op: (PatSub pat: {($ VSub_Name "$name")} replace: {(0x) ($ VSub_Name "$base_addr")} do_all: False do_prefix: False do_suffix: False ) spids: [407 414] ) } spids: [406] ) ] spids: [406] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:expr) op: Equal rhs: {(ArithSubPart anode:(ArithVarRef name:expr) spids:[423426])} spids: [422] ) ] spids: [422] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:address) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(printf)} {(DQ ("%x") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))} {(DQ ($ VSub_Name "$expr"))} ) ] ) left_token: <Left_CommandSub "$("> spids: [432 443] ) } spids: [431] ) ] spids: [429] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: { (DQ (BracedVarSub token: <VSub_Name cache> bracket_op: (ArrayIndex expr: (ArithBinary op_id: Arith_Comma left: (ArithWord w:{($ VSub_Name "$module")}) right: (ArithWord w:{($ VSub_Name "$address")}) ) ) suffix_op: (StringUnary op_id:VTest_Plus arg_word:{(isset)}) spids: [460 469] ) ) } right: {(DQ (isset))} ) ) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:code) op: Equal rhs: { (BracedVarSub token: <VSub_Name cache> bracket_op: (ArrayIndex expr: (ArithBinary op_id: Arith_Comma left: (ArithWord w:{($ VSub_Name "$module")}) right: (ArithWord w:{($ VSub_Name "$address")}) ) ) spids: [487 494] ) } spids: [486] ) ] spids: [484] ) ] spids: [-1 481] ) ] else_action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:code) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(addr2line)} {(-i)} {(-e)} {(DQ ($ VSub_Name "$objfile"))} {(DQ ($ VSub_Name "$address"))} ) ] ) left_token: <Left_CommandSub "$("> spids: [503 517] ) } spids: [502] ) ] spids: [500] ) (C {(cache) (Lit_Other "[") ($ VSub_Name "$module") (Lit_Comma ",") ($ VSub_Name "$address") (Lit_Other "]") (Lit_Other "=") ($ VSub_Name "$code") } ) ] spids: [497 530] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: {($ VSub_Name "$code")} right: {(DQ ("??:0"))} ) ) terminator: <Op_Semi ";"> ) ] action: [(ControlFlow token:<ControlFlow_Return return>)] spids: [-1 561] ) ] spids: [-1 567] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:code) op: Equal rhs: { (BracedVarSub token: <VSub_Name code> suffix_op: (PatSub pat: {($ VSub_Name "$basepath")} replace: {(DQ )} do_all: True do_prefix: False do_suffix: False ) spids: [576 584] ) } spids: [575] ) ] spids: [575] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:code) op: Equal rhs: { (BracedVarSub token: <VSub_Name code> suffix_op: (PatSub pat: {(SQ <Lit_EscapedChar "\\n">)} replace: {(SQ <" ">)} do_all: True do_prefix: False do_suffix: False ) spids: [593 604] ) } spids: [592] ) ] spids: [592] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:symbol) op: Equal rhs: {(DQ ($ VSub_Name "$name") (" (") ($ VSub_Name "$code") (")"))} spids: [612] ) ] spids: [612] ) ] spids: [75] ) spids: [71 74] ) (FuncDef name: decode_code body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:scripts) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(dirname)} { (DQ (BracedVarSub token: <VSub_Name BASH_SOURCE> bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)})) spids: [637 642] ) ) } ) ] ) left_token: <Left_Backtick "`"> spids: [633 644] ) } spids: [632] ) ] spids: [630] ) (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Number "$1"))}) (C {($ VSub_Name "$scripts") (/decodecode)}) ] negated: False ) ] spids: [627] ) spids: [623 626] ) (FuncDef name: handle_line body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:words) op:Equal spids:[671])] spids: [669] ) (SimpleCommand words: [{(read)} {(-a)} {(words)}] redirects: [ (Redir op_id: Redir_TLess fd: -1 arg_word: {(DQ ($ VSub_Number "$1"))} spids: [685] ) ] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:last) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Minus left: (ArithWord w: { (BracedVarSub token: <VSub_Name words> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [714 720] ) } ) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [712 727] ) } spids: [711] ) ] spids: [709] ) (ForEach iter_name: i iter_words: [ { (DQ (BracedVarSub token: <VSub_Name words> prefix_op: VSub_Bang bracket_op: (WholeArray op_id:Lit_At) spids: [738 744] ) ) } ] do_arg_iter: False body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_EqualTilde left: { (BracedVarSub token: <VSub_Name words> bracket_op: (ArrayIndex expr: (ArithWord w:{($ VSub_Name "$i")}) ) spids: [759 764] ) } right: {(EscapedLiteralPart token:<Lit_EscapedChar "\\[">) (EscapedLiteralPart token: <Lit_EscapedChar "\\<"> ) ("(") (Lit_Other "[") (Lit_Other "^") (Lit_Other "]") (Lit_Other "]") (Lit_Other "+") (")") (EscapedLiteralPart token: <Lit_EscapedChar "\\>"> ) (EscapedLiteralPart token:<Lit_EscapedChar "\\]">) } ) ) terminator: <Op_Semi ";"> ) ] action: [ (C {(unset)} {(words) (Lit_Other "[") ($ VSub_Name "$i") (Lit_Other "]")}) ] spids: [-1 783] ) ] spids: [-1 794] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalAnd left: (BoolBinary op_id: BoolBinary_GlobDEqual left: { (BracedVarSub token: <VSub_Name words> bracket_op: (ArrayIndex expr: (ArithWord w:{($ VSub_Name "$i")}) ) spids: [806 811] ) } right: {(EscapedLiteralPart token:<Lit_EscapedChar "\\[">)} ) right: (BoolBinary op_id: BoolBinary_GlobDEqual left: { (BracedVarSub token: <VSub_Name words> bracket_op: (ArrayIndex expr: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{($ VSub_Name "$i")}) right: (ArithWord w:{(Lit_Digits 1)}) ) ) spids: [819 826] ) } right: {(Lit_Other "*") (EscapedLiteralPart token: <Lit_EscapedChar "\\]"> ) } ) ) ) terminator: <Op_Semi ";"> ) ] action: [ (C {(unset)} {(words) (Lit_Other "[") ($ VSub_Name "$i") (Lit_Other "]")}) (C {(words) (Lit_Other "[") ($ VSub_Name "$i") (Lit_Other "+") (1) (Lit_Other "]") (Lit_Other "=") (CommandSubPart command_list: (CommandList children: [ (C {(printf)} { (DQ ("[%13s") (EscapedLiteralPart token: <Lit_EscapedChar "\\n"> ) ) } { (DQ (BracedVarSub token: <VSub_Name words> bracket_op: (ArrayIndex expr: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{($ VSub_Name "$i")}) right: (ArithWord w:{(Lit_Digits 1)}) ) ) spids: [863 870] ) ) } ) ] ) left_token: <Left_CommandSub "$("> spids: [854 872] ) } ) ] spids: [-1 836] ) ] spids: [-1 875] ) ] spids: [748 878] ) spids: [736 746] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_EqualTilde left: { (BracedVarSub token: <VSub_Name words> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$last")})) spids: [886 891] ) } right: {(EscapedLiteralPart token:<Lit_EscapedChar "\\[">) ("(") (Lit_Other "[") (Lit_Other "^") (Lit_Other "]") (Lit_Other "]") (Lit_Other "+") (")") (EscapedLiteralPart token: <Lit_EscapedChar "\\]"> ) } ) ) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:module) op: Equal rhs: { (BracedVarSub token: <VSub_Name words> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$last")})) spids: [912 917] ) } spids: [911] ) ] spids: [911] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:module) op: Equal rhs: { (BracedVarSub token: <VSub_Name module> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {(EscapedLiteralPart token:<Lit_EscapedChar "\\[">)} ) spids: [921 925] ) } spids: [920] ) ] spids: [920] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:module) op: Equal rhs: { (BracedVarSub token: <VSub_Name module> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {(EscapedLiteralPart token:<Lit_EscapedChar "\\]">)} ) spids: [929 933] ) } spids: [928] ) ] spids: [928] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:symbol) op: Equal rhs: { (BracedVarSub token: <VSub_Name words> bracket_op: (ArrayIndex expr: (ArithBinary op_id: Arith_Minus left: (ArithWord w:{($ VSub_Name "$last")}) right: (ArithWord w:{(Lit_Digits 1)}) ) ) spids: [937 944] ) } spids: [936] ) ] spids: [936] ) (C {(unset)} {(words) (Lit_Other "[") ($ VSub_Name "$last") (-1) (Lit_Other "]")}) ] spids: [-1 908] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:symbol) op: Equal rhs: { (BracedVarSub token: <VSub_Name words> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$last")})) spids: [964 969] ) } spids: [963] ) ] spids: [963] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:module) op:Equal rhs:{(SQ )} spids:[972])] spids: [972] ) ] spids: [956 975] ) (C {(unset)} {(words) (Lit_Other "[") ($ VSub_Name "$last") (Lit_Other "]")}) (C {(parse_symbol)}) (C {(echo)} { (DQ (BracedVarSub token: <VSub_Name words> bracket_op: (WholeArray op_id:Lit_At) spids: [1001 1006] ) ) } {(DQ ($ VSub_Name "$symbol") (" ") ($ VSub_Name "$module"))} ) ] spids: [666] ) spids: [662 665] ) (While cond: [(Sentence child:(C {(read)} {(line)}) terminator:<Op_Semi ";">)] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_EqualTilde left: {($ VSub_Name "$line")} right: {(EscapedLiteralPart token:<Lit_EscapedChar "\\[">) (EscapedLiteralPart token: <Lit_EscapedChar "\\<"> ) ("(") (Lit_Other "[") (Lit_Other "^") (Lit_Other "]") (Lit_Other "]") (Lit_Other "+") (")") (EscapedLiteralPart token: <Lit_EscapedChar "\\>"> ) (EscapedLiteralPart token:<Lit_EscapedChar "\\]">) } ) ) terminator: <Op_Semi ";"> ) ] action: [(C {(handle_line)} {(DQ ($ VSub_Name "$line"))})] spids: [-1 1055] ) (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: {($ VSub_Name "$line")} right: {(Lit_Other "*") (Code) (Lit_Other ":") (Lit_Other "*")} ) ) terminator: <Op_Semi ";"> ) ] action: [(C {(decode_code)} {(DQ ($ VSub_Name "$line"))})] spids: [1073 1089] ) ] else_action: [(C {(echo)} {(DQ ($ VSub_Name "$line"))})] spids: [1099 1113] ) ] spids: [1025 1115] ) ) ] )