(command.CommandList children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id:Id.Op_Less left:{($ Id.VSub_Pound '$#')} right:{<2>}) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} {(DQ <'Usage:'>)}) (C {<echo>} {(DQ <'\t'> ($ Id.VSub_Number '$0') <' [vmlinux] [base path] [modules path]'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [10 23] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:vmlinux) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [49] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:basepath) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [52] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:modpath) op: assign_op.Equal rhs: {($ Id.VSub_Number '$3')} spids: [55] ) ] ) (C {<declare>} {<-A>} {<cache>}) (C {<declare>} {<-A>} {<modcache>}) (command.ShFunction name: parse_symbol body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$module')} right: {(DQ )} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<local>} {<Id.Lit_VarLike 'objfile='> ($ Id.VSub_DollarName '$vmlinux')}) ] spids: [99 114] ) (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (braced_var_sub token: <Id.VSub_Name modcache> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$module')} ) ) suffix_op: (suffix_op.Unary op_id: Id.VTest_Plus arg_word: {<isset>} ) ) ) } right: {(DQ <isset>)} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<local>} {<Id.Lit_VarLike 'objfile='> (braced_var_sub token: <Id.VSub_Name modcache> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$module')}) ) ) } ) ] spids: [123 147] ) ] else_action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$modpath')} right: {(DQ )} ) ) (command.ControlFlow token:<Id.ControlFlow_Return return>) ] ) (C {<local>} {<Id.Lit_VarLike 'objfile='> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<find>} {(DQ ($ Id.VSub_DollarName '$modpath'))} {<-name>} {($ Id.VSub_DollarName '$module') <.ko>} {<-print>} {<-quit>} ) ] ) ) } ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$objfile')} right: {(DQ )} ) ) (command.ControlFlow token:<Id.ControlFlow_Return return>) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: modcache index: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$module')}) ) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$objfile')} spids: [217] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:symbol) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name symbol> suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\('>)} ) ) } spids: [233] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:symbol) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name symbol> suffix_op: (suffix_op.Unary op_id: Id.VOp1_Percent arg_word: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\)'>)} ) ) } spids: [241] ) ] ) (C {<local>} {<Id.Lit_VarLike 'name='> (braced_var_sub token: <Id.VSub_Name symbol> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<'+*'>}) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (braced_var_sub token: <Id.VSub_Name cache> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$module')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$name')} ) ) ) suffix_op: (suffix_op.Unary op_id: Id.VTest_Plus arg_word: {<isset>} ) ) ) } right: {(DQ <isset>)} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<local>} {<Id.Lit_VarLike 'base_addr='> (braced_var_sub token: <Id.VSub_Name cache> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$module')}) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$name')}) ) ) ) } ) ] spids: [277 303] ) ] else_action: [ (C {<local>} {<Id.Lit_VarLike 'base_addr='> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<nm>} {(DQ ($ Id.VSub_DollarName '$objfile'))}) (C {<grep>} {<-i>} {(SQ <' t '>)}) (C {<awk>} { (DQ <'/ '> ($ Id.VSub_DollarName '$name') (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <'/ {print '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'1}'> ) } ) (C {<head>} {<-n1>}) ] negated: F ) ] ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: cache index: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$module')}) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$name')}) ) ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$base_addr'))} spids: [363] ) ] ) ] ) (C {<local>} {<Id.Lit_VarLike 'expr='> (braced_var_sub token: <Id.VSub_Name symbol> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash /> <'*'>}) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expr) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name expr> suffix_op: (suffix_op.PatSub pat: {($ Id.VSub_DollarName '$name')} replace: {<0x> ($ Id.VSub_DollarName '$base_addr')} replace_mode: Id.Undefined_Tok ) ) } spids: [408] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expr) op: assign_op.Equal rhs: {(word_part.ArithSub anode:(arith_expr.VarRef token:<Id.Lit_ArithVarLike expr>))} spids: [424] ) ] ) (C {<local>} {<Id.Lit_VarLike 'address='> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<printf>} {(DQ <'%x'> <Id.Lit_Other '\\'> <n>)} {(DQ ($ Id.VSub_DollarName '$expr'))} ) ] ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (braced_var_sub token: <Id.VSub_Name cache> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$module')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$address')} ) ) ) suffix_op: (suffix_op.Unary op_id: Id.VTest_Plus arg_word: {<isset>} ) ) ) } right: {(DQ <isset>)} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<local>} {<Id.Lit_VarLike 'code='> (braced_var_sub token: <Id.VSub_Name cache> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$module')}) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$address')}) ) ) ) } ) ] spids: [458 484] ) ] else_action: [ (C {<local>} {<Id.Lit_VarLike 'code='> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<addr2line>} {<-i>} {<-e>} {(DQ ($ Id.VSub_DollarName '$objfile'))} {(DQ ($ Id.VSub_DollarName '$address'))} ) ] ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: cache index: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$module')}) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$address')}) ) ) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$code')} spids: [523] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$code')} right: {(DQ <'??:0'>)} ) ) terminator: <Id.Op_Semi _> ) ] action: [(command.ControlFlow token:<Id.ControlFlow_Return return>)] spids: [551 566] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:code) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name code> suffix_op: (suffix_op.PatSub pat: {($ Id.VSub_DollarName '$basepath')} replace: {(DQ )} replace_mode: Id.Lit_Slash ) ) } spids: [580] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:code) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name code> suffix_op: (suffix_op.PatSub pat: { (single_quoted left: <Id.Left_SingleQuoteC "$'"> tokens: [<Id.Char_OneChar '\\n'>] ) } replace: {(SQ <' '>)} replace_mode: Id.Lit_Slash ) ) } spids: [597] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:symbol) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$name') <' ('> ($ Id.VSub_DollarName '$code') <')'>)} spids: [617] ) ] ) ] ) ) (command.ShFunction name: decode_code body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'scripts='> (command_sub left_token: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [ (C {<dirname>} { (DQ (braced_var_sub token: <Id.VSub_Name BASH_SOURCE> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) ) } ) ] ) ) } ) (command.Pipeline children: [ (C {<echo>} {(DQ ($ Id.VSub_Number '$1'))}) (C {($ Id.VSub_DollarName '$scripts') </decodecode>}) ] negated: F ) ] ) ) (command.ShFunction name: handle_line body: (command.BraceGroup children: [ (C {<local>} {<words>}) (command.Simple words: [{<read>} {<-a>} {<words>}] redirects: [ (redir.Redir op: <Id.Redir_TLess '<<<'> fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$1'))} ) ] ) (C {<local>} {<Id.Lit_VarLike 'last='> (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w: { (braced_var_sub token: <Id.VSub_Name words> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } ) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) } ) (command.ForEach iter_name: i iter_words: [ { (DQ (braced_var_sub token: <Id.VSub_Name words> prefix_op: (Id.VSub_Bang) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: { (braced_var_sub token: <Id.VSub_Name words> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$i')} ) ) ) } right: {<Id.Lit_RegexMeta '\\['> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\<'> ) <Id.Lit_Other '('> <Id.Lit_Other '['> <Id.Lit_Other '^'> <Id.Lit_Other ']'> <Id.Lit_Other ']'> <Id.Lit_Other '+'> <Id.Lit_Other ')'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\>'>) <Id.Lit_RegexMeta '\\]'> } ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<unset>} {<Id.Lit_ArrayLhsOpen 'words['> ($ Id.VSub_DollarName '$i') <Id.Lit_RBracket ']'> } ) ] spids: [762 790] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalAnd left: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (braced_var_sub token: <Id.VSub_Name words> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$i')} ) ) ) } right: { (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\['> ) } ) right: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (braced_var_sub token: <Id.VSub_Name words> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$i')} ) right: (arith_expr.ArithWord w: {<Id.Lit_Digits 1>} ) ) ) ) } right: {<Id.Lit_Other '*'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\]'> ) } ) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<unset>} {<Id.Lit_ArrayLhsOpen 'words['> ($ Id.VSub_DollarName '$i') <Id.Lit_RBracket ']'> } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: words index: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$i')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<printf>} {(DQ <'[%13s'> <Id.Lit_Other '\\'> <n>)} { (DQ (braced_var_sub token: <Id.VSub_Name words> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$i')} ) right: (arith_expr.ArithWord w: {<Id.Lit_Digits 1>} ) ) ) ) ) } ) ] ) ) } spids: [852] ) ] ) ] spids: [808 842] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: { (braced_var_sub token: <Id.VSub_Name words> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$last')}) ) ) } right: {<Id.Lit_RegexMeta '\\['> <Id.Lit_Other '('> <Id.Lit_Other '['> <Id.Lit_Other '^'> <Id.Lit_Other ']'> <Id.Lit_Other ']'> <Id.Lit_Other '+'> <Id.Lit_Other ')'> <Id.Lit_RegexMeta '\\]'> } ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:module) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name words> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$last')}) ) ) } spids: [919] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:module) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name module> suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} ) ) } spids: [928] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:module) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name module> suffix_op: (suffix_op.Unary op_id: Id.VOp1_Percent arg_word: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\]'>)} ) ) } spids: [936] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:symbol) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name words> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$last')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) } spids: [944] ) ] ) (C {<unset>} {<Id.Lit_ArrayLhsOpen 'words['> ($ Id.VSub_DollarName '$last') <-1> <Id.Lit_RBracket ']'> } ) ] spids: [890 916] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:symbol) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name words> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$last')}) ) ) } spids: [970] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:module) op: assign_op.Equal rhs: (word.Empty) spids: [979] ) ] ) ] ) (C {<unset>} {<Id.Lit_ArrayLhsOpen 'words['> ($ Id.VSub_DollarName '$last') <Id.Lit_RBracket ']'>} ) (C {<parse_symbol>}) (C {<echo>} { (DQ (braced_var_sub token: <Id.VSub_Name words> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } {(DQ ($ Id.VSub_DollarName '$symbol') <' '> ($ Id.VSub_DollarName '$module'))} ) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: [(command.Sentence child:(C {<read>} {<line>}) terminator:<Id.Op_Semi _>)] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {($ Id.VSub_DollarName '$line')} right: {<Id.Lit_RegexMeta '\\['> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\<'> ) <Id.Lit_Other '('> <Id.Lit_Other '['> <Id.Lit_Other '^'> <Id.Lit_Other ']'> <Id.Lit_Other ']'> <Id.Lit_Other '+'> <Id.Lit_Other ')'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\>'>) <Id.Lit_RegexMeta '\\]'> } ) ) terminator: <Id.Op_Semi _> ) ] action: [(C {<handle_line>} {(DQ ($ Id.VSub_DollarName '$line'))})] spids: [1038 1061] ) (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$line')} right: {<Id.Lit_Other '*'> <Code> <Id.Lit_Other ':'> <Id.Lit_Other '*'>} ) ) terminator: <Id.Op_Semi _> ) ] action: [(C {<decode_code>} {(DQ ($ Id.VSub_DollarName '$line'))})] spids: [1079 1095] ) ] else_action: [(C {<echo>} {(DQ ($ Id.VSub_DollarName '$line'))})] ) ] ) ) ] )