(command.CommandList children: [ (command.ShFunction name: echo_then_sudo body: (command.BraceGroup children: [ (command.Simple words: [{(echo)} {(DQ ('About to execute privileged command: ') ($ Id.VSub_At '$@'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:19) fd: 1 arg_word: {(2)} ) ] ) (C {(sudo)} {(-k)} {(DQ ($ Id.VSub_At '$@'))}) ] ) ) (command.ShFunction name: fixup_debuglink body: (command.BraceGroup children: [ (command.Simple words: [{(echo)} {(DQ ('begin fixup_debuglink'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:54) fd: 1 arg_word: {(2)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:obj) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [58] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:debuglink) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [64] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:current_debuglink) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:72) command_list: (command.CommandList children: [(C {(read_debuglink)} {(DQ ($ Id.VSub_DollarName '$obj'))})] ) ) ) } spids: [70] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:has_debuglink) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [84] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_eq left: {($ Id.VSub_DollarName '$has_debuglink')} right: {(0)} ) ) (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$current_debuglink'))} right: {(DQ ($ Id.VSub_DollarName '$debuglink'))} ) ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:117) ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('detected that debuglink ') ($ Id.VSub_DollarName '$debuglink_value') (' is already valid') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:130) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:134) arg_word: {(0)} ) ] spids: [90 119] ) ] else_action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_eq left: {($ Id.VSub_DollarName '$has_debuglink')} right: {(0)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:153) ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('detected that debuglink ') ($ Id.VSub_DollarName '$current_debuglink') (' needs fixing up to ') ($ Id.VSub_DollarName '$debuglink') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:168) fd: 1 arg_word: {(2)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tmpfile) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:178) command_list: (command.CommandList children:[(C {(mktemp)})]) ) ) } spids: [176] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:saved_ug) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:186) command_list: (command.CommandList children: [ (C {(stat)} {(-c)} {(DQ ('%u:%g'))} { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 197 ) command_list: (command.CommandList children: [ (C {(readlink)} {(-f)} {(DQ ($ Id.VSub_DollarName '$obj'))} ) ] ) ) ) } ) ] ) ) ) } spids: [184] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:saved_mode) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:216) command_list: (command.CommandList children: [ (C {(stat)} {(-c)} {(DQ ('%a'))} { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 227 ) command_list: (command.CommandList children: [ (C {(readlink)} {(-f)} {(DQ ($ Id.VSub_DollarName '$obj'))} ) ] ) ) ) } ) ] ) ) ) } spids: [214] ) ] ) (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Subshell command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {(echo_then_sudo)} {(objcopy)} {(--remove-section)} {(.gnu_debuglink)} {(DQ ($ Id.VSub_DollarName '$obj'))} {(DQ ($ Id.VSub_DollarName '$tmpfile'))} ) (C {(echo_then_sudo)} {(chown)} {(DQ ($ Id.VSub_DollarName '$saved_ug'))} {(DQ ($ Id.VSub_DollarName '$tmpfile'))} ) (C {(echo_then_sudo)} {(chmod)} {(DQ ($ Id.VSub_DollarName '$saved_mode'))} {(DQ ($ Id.VSub_DollarName '$tmpfile'))} ) (C {(echo_then_sudo)} {(mv)} {(DQ ($ Id.VSub_DollarName '$tmpfile'))} {(DQ ($ Id.VSub_DollarName '$obj'))} ) ] ) ] ) ) (command.Simple words: [{(echo)} {(DQ ('objcopy failed'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:321) fd: 1 arg_word: {(2)} ) ] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:323) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:325) arg_word: {(1)} ) ] spids: [142 155] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tmpfile) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:343) command_list: (command.CommandList children:[(C {(mktemp)})]) ) ) } spids: [341] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:saved_ug) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:351) command_list: (command.CommandList children: [ (C {(stat)} {(-c)} {(DQ ('%u:%g'))} { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 362 ) command_list: (command.CommandList children: [ (C {(readlink)} {(-f)} {(DQ ($ Id.VSub_DollarName '$obj'))} ) ] ) ) ) } ) ] ) ) ) } spids: [349] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:saved_mode) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:381) command_list: (command.CommandList children: [ (C {(stat)} {(-c)} {(DQ ('%a'))} { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 392 ) command_list: (command.CommandList children: [ (C {(readlink)} {(-f)} {(DQ ($ Id.VSub_DollarName '$obj'))} ) ] ) ) ) } ) ] ) ) ) } spids: [379] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (C {(echo_then_sudo)} {(objcopy)} {(--add-gnu-debuglink) (Id.Lit_Equals '=') (DQ ($ Id.VSub_DollarName '$debuglink')) } {(DQ ($ Id.VSub_DollarName '$obj'))} {(DQ ($ Id.VSub_DollarName '$tmpfile'))} ) (C {(echo_then_sudo)} {(chown)} {(DQ ($ Id.VSub_DollarName '$saved_ug'))} {(DQ ($ Id.VSub_DollarName '$tmpfile'))} ) (C {(echo_then_sudo)} {(chmod)} {(DQ ($ Id.VSub_DollarName '$saved_mode'))} {(DQ ($ Id.VSub_DollarName '$tmpfile'))} ) (C {(echo_then_sudo)} {(mv)} {(DQ ($ Id.VSub_DollarName '$tmpfile'))} {(DQ ($ Id.VSub_DollarName '$obj'))} ) (command.Simple words: [{(echo)} {(DQ (success))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:485) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:490) arg_word: {(0)} ) (command.Subshell command_list: (command.CommandList children: [ (command.Sentence child: (command.Simple words: [{(echo)} {(DQ ('objcopy failed'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:505) fd: 1 arg_word: {(2)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:507) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:509) arg_word: {(1)} ) ] ) ) ] ) ] ) ] ) ) (command.ShFunction name: contains_debug_symbols body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(objdump)} {(-h)} {(DQ ($ Id.VSub_Number '$1'))}) (command.Simple words: [{(grep)} {(SQ (Token id:Id.Lit_Chars val:'\\.debug_info' span_id:541))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'1>' span_id:544) fd: 1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:547) fd: 2 arg_word: {(/dev/null)} ) ] ) ] negated: F ) ] ) ) (command.ShFunction name: read_debuglink body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:debuglink_info) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:563) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(objdump)} {(-h)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(grep)} { (SQ (Token id: Id.Lit_Chars val: '\\.gnu_debuglink' span_id: 578 ) ) } ) ] negated: F ) ] ) ) ) } spids: [561] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$debuglink_info'))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:596) ) ] action: [ (command.Simple words: [{(echo)} {(DQ ('no debuglink in ') ($ Id.VSub_Number '$1'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:608) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:612) arg_word: {(1)} ) ] spids: [585 598] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:debuglink_off) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:622) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$debuglink_info'))}) (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's/^[[:blank:]]*//' span_id: 635 ) ) } ) (C {(tr)} {(-s)} {(SQ (Token id:Id.Lit_Chars val:'[:blank:]' span_id:645))} {(SQ (Token id:Id.Lit_Chars val:'\\t' span_id:649))} ) (C {(cut)} {(-f6)}) ] negated: F ) ] ) ) ) } spids: [620] ) ] ) (command.Simple words: [{(echo)} {(DQ ('read debuglink_off: ') ($ Id.VSub_DollarName '$debuglink_off'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:669) fd: 1 arg_word: {(2)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ ($ Id.VSub_DollarName '$debuglink_off'))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:684) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:debuglink_off_bytes) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w: {(Id.Lit_Digits 0) (Id.Lit_ArithVarLike x) ($ Id.VSub_DollarName '$debuglink_off') } ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)}) ) ) } spids: [689] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$debuglink_off_bytes'))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:715) ) ] action: [ (command.Simple words: [{(echo)} {(DQ ('bad debuglink header'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:726) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:731) arg_word: {(1)} ) ] spids: [704 717] ) ] else_action: [ (command.Pipeline children: [ (C {(od)} {(--skip-bytes) (Id.Lit_Equals '=') (${ Id.VSub_Name debuglink_off_bytes) } {(--string)} {(DQ ($ Id.VSub_Number '$1'))} ) (C {(head)} {(-n1)}) (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s/^[0-9a-f]* //' span_id:764))}) ] negated: F ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:768) arg_word: {(0)} ) ] ) ] spids: [673 686] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:779) arg_word: {(1)} ) ] ) ) (command.ShFunction name: find_debug_file_for body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:file) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [794] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(readelf)} {(-wi)} {(DQ ($ Id.VSub_DollarName '$file'))}) (command.Simple words: [{(grep)} {(-m1)} {(.)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:824) fd: -1 arg_word: {(/dev/null)} ) ] ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:826) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:debuglink_val) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:833) command_list: (command.CommandList children: [ (C {(read_debuglink)} {(DQ ($ Id.VSub_DollarName '$file'))}) ] ) ) ) } spids: [831] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ ($ Id.VSub_DollarName '$debuglink_val'))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:856) ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('Read debuglink val: ') ($ Id.VSub_DollarName '$debuglink_val')) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:868) fd: 1 arg_word: {(2)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:resolved_debuglink) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 874 ) command_list: (command.CommandList children: [ (C {(resolve_debuglink)} {(DQ ($ Id.VSub_DollarName '$file'))} {(DQ ($ Id.VSub_DollarName '$debuglink_val'))} ) ] ) ) ) } spids: [872] ) ] ) (command.Simple words: [ {(echo)} { (DQ ('Resolved debuglink to: ') ($ Id.VSub_DollarName '$resolved_debuglink') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:897) fd: 1 arg_word: {(2)} ) ] ) (C {(echo)} {(DQ ($ Id.VSub_DollarName '$resolved_debuglink'))}) ] spids: [845 858] ) ] else_action: [ (command.Simple words: [{(echo)} {(DQ ('No debuglink found'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:917) fd: 1 arg_word: {(2)} ) ] ) (C {(echo)} {(DQ ($ Id.VSub_DollarName '$file'))}) ] ) ] spids: [804 828] ) ] else_action: [(C {(echo)} {(DQ ($ Id.VSub_DollarName '$file'))})] ) ] ) ) (command.ShFunction name: readelf_debug body: (command.BraceGroup children: [ (C {(declare)} {(-a)} {(args)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ctr) op: assign_op.Equal rhs: {(1)} spids: [961] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:965) cond: [ (command.Sentence child: (C {(true)}) terminator: (Token id:Id.Op_Semi val:';' span_id:968) ) ] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: args index: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$ctr')}) ) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [973] ) ] ) (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(shift)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:985) ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:986) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ctr) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$ctr')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [989] ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:file) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:args span_id:1007) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$ctr')} ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } ) ) ) } spids: [1005] ) ] ) (command.Simple words: [ {(echo)} { (DQ ('Slurped args: ') (braced_var_sub token: (Token id:Id.VSub_Name val:args span_id:1028) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1035) fd: 1 arg_word: {(2)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('Guessed file arg: ') ($ Id.VSub_DollarName '$file'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1046) fd: 1 arg_word: {(2)} ) ] ) (C {(unset)} {(Id.Lit_ArrayLhsOpen 'args[') (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$ctr')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) (Id.Lit_RBracket ']') } ) (C {(readelf)} { (braced_var_sub token: (Token id:Id.VSub_Name val:args span_id:1069) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1076) command_list: (command.CommandList children: [(C {(find_debug_file_for)} {(DQ ($ Id.VSub_DollarName '$file'))})] ) ) ) } ) ] ) ) (command.ShFunction name: get_cu_info body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(readelf_debug)} {(-wi)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(grep)} {(-A7)} {(SQ (Token id:Id.Lit_Chars val:DW_TAG_compile_unit span_id:1113))}) (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'\\n' span_id:1121))} {(SQ (Token id:Id.Lit_Chars val:'\\f' span_id:1125))} ) (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s/\\f--\\f/\\n/g' span_id:1133))}) ] negated: F ) ] ) ) (command.ShFunction name: read_cu_info body: (command.BraceGroup children: [ (C {(read)} {(cu_info)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ret) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1152] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ ($ Id.VSub_DollarName '$cu_info'))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1167) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cu_fname) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1174) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$cu_info'))}) (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'\\f' span_id:1187))} {(SQ (Token id:Id.Lit_Chars val:'\\n' span_id:1191))} ) (C {(grep)} {(DW_AT_name)}) (C {(head)} {(-n1)}) (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's/.*DW_AT_name[[:blank:]]*:[[:blank:]]*\\((.*, offset: 0x[0-9a-f]*): \\)\\?\\(.*\\)/\\2/' span_id: 1211 ) ) } ) (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's/[[:blank:]]*$//' span_id: 1219 ) ) } ) ] negated: F ) ] ) ) ) } spids: [1172] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cu_language_fullstr) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1227) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$cu_info'))}) (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'\\f' span_id:1240))} {(SQ (Token id:Id.Lit_Chars val:'\\n' span_id:1244))} ) (C {(grep)} {(DW_AT_language)}) (C {(head)} {(-n1)}) (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's/.*DW_AT_language[[:blank:]]*:[[:blank:]]*//' span_id: 1264 ) ) } ) (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's/[[:blank:]]*$//' span_id: 1272 ) ) } ) ] negated: F ) ] ) ) ) } spids: [1225] ) ] ) (command.Simple words: [{(echo)} {(DQ ('Note: found CU ') ($ Id.VSub_DollarName '$cu_fname'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1285) fd: 1 arg_word: {(2)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('CU info is: ') ($ Id.VSub_DollarName '$cu_info'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1296) fd: 1 arg_word: {(2)} ) ] ) (command.Simple words: [ {(echo)} { (DQ ('language field of CU info is ') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1304) command_list: (command.CommandList children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$cu_language_fullstr'))}) ] ) ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1315) fd: 1 arg_word: {(2)} ) ] ) (command.Simple words: [ {(echo)} { (DQ ('comp_dir line of CU info is ') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1323) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$cu_info'))}) (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'\\f' span_id:1336))} {(SQ (Token id:Id.Lit_Chars val:'\\n' span_id:1340))} ) (C {(grep)} {(DW_AT_comp_dir)}) ] negated: F ) ] ) ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1352) fd: 1 arg_word: {(2)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cu_compdir) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1358) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$cu_info'))}) (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'\\f' span_id:1371))} {(SQ (Token id:Id.Lit_Chars val:'\\n' span_id:1375))} ) (C {(grep)} {(DW_AT_comp_dir)}) (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's/.*DW_AT_comp_dir[[:blank:]]*:[[:blank:]]*\\((.*, offset: 0x[0-9a-f]*): \\)\\?\\(.*\\)/\\2/' span_id: 1389 ) ) } ) (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's/[[:blank:]]*$//' span_id: 1397 ) ) } ) ] negated: F ) ] ) ) ) } spids: [1356] ) ] ) (command.Simple words: [ {(echo)} {(DQ ('Note: found comp_dir ') ($ Id.VSub_DollarName '$cu_compdir'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1411) fd: 1 arg_word: {(2)} ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$cu_fname'))} arms: [ (case_arm pat_list: [{(/) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cu_sourcepath) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name cu_fname))} spids: [1434] ) ] ) ] spids: [1428 1431 1442 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cu_sourcepath) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name cu_compdir) (/) (${ Id.VSub_Name cu_fname))} spids: [1450] ) ] ) ] spids: [1445 1447 1462 -1] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cu_language_num) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1470) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$cu_language_fullstr'))} ) (C {(tr)} {(-s)} { (SQ (Token id: Id.Lit_Chars val: '[[:blank:]]' span_id: 1485 ) ) } {(SQ (Token id:Id.Lit_Chars val:'\\t' span_id:1489))} ) (C {(cut)} {(-f1)}) ] negated: F ) ] ) ) ) } spids: [1468] ) ] ) ] spids: [1156 1169] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cu_fname) op: assign_op.Equal rhs: {(DQ )} spids: [1505] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cu_language_fullstr) op: assign_op.Equal rhs: {(DQ )} spids: [1510] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cu_compdir) op: assign_op.Equal rhs: {(DQ )} spids: [1515] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cu_sourcepath) op: assign_op.Equal rhs: {(DQ )} spids: [1520] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cu_language_num) op: assign_op.Equal rhs: {(DQ )} spids: [1525] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_eq left: {($ Id.VSub_DollarName '$ret')} right: {(0)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1545) ) ] action: [ (command.Sentence child: (C {(true)}) terminator: (Token id:Id.Op_Semi val:';' span_id:1550) ) ] spids: [1534 1547] ) ] else_action: [ (command.Sentence child: (C {(false)}) terminator: (Token id:Id.Op_Semi val:';' span_id:1555) ) ] ) ] ) ) (command.ShFunction name: resolve_debuglink body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:obj) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [1570] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:debuglink_value) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [1576] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:canon_obj_path) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1586) command_list: (command.CommandList children: [(C {(readlink)} {(-f)} {(DQ ($ Id.VSub_DollarName '$obj'))})] ) ) ) } spids: [1584] ) ] ) (command.ForEach iter_name: candidate iter_words: [ { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1608) command_list: (command.CommandList children: [(C {(dirname)} {(DQ ($ Id.VSub_DollarName '$canon_obj_path'))})] ) ) (/.debug/) ($ Id.VSub_DollarName '$debuglink_value') ) } {(/usr/lib/debug) (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1625) command_list: (command.CommandList children: [(C {(dirname)} {(${ Id.VSub_Name canon_obj_path)})] ) ) ) (/) ($ Id.VSub_DollarName '$debuglink_value') } {(/usr/lib/debug/.build-id/) (Id.Lit_Star '*') (/) ($ Id.VSub_DollarName '$debuglink_value') } ] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(contains_debug_symbols)} {(DQ ($ Id.VSub_DollarName '$candidate'))}) terminator: (Token id:Id.Op_Semi val:';' span_id:1656) ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('detected debug info within debuglink ') ($ Id.VSub_DollarName '$debuglink_value') (' resolved at ') ($ Id.VSub_DollarName '$candidate') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1670) fd: 1 arg_word: {(2)} ) ] ) (C {(echo)} {(DQ ($ Id.VSub_DollarName '$candidate'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1681) arg_word: {(0)} ) ] spids: [1649 1658] ) ] ) ] ) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1694) arg_word: {(1)} ) ] ) ) (command.ShFunction name: ensure_debug_symbols body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:obj) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [1709] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(contains_debug_symbols)} {(DQ ($ Id.VSub_DollarName '$obj'))}) terminator: (Token id:Id.Op_Semi val:';' span_id:1726) ) ] action: [ (command.Simple words: [ {(echo)} {(DQ ('detected debug info within file ') ($ Id.VSub_DollarName '$obj'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1739) fd: 1 arg_word: {(2)} ) ] ) (C {(echo)} {(DQ ($ Id.VSub_Number '$1'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1750) arg_word: {(0)} ) ] spids: [1719 1728] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:debuglink_value) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 1768 ) command_list: (command.CommandList children: [ (C {(read_debuglink)} {(DQ ($ Id.VSub_DollarName '$obj'))}) ] ) ) ) } spids: [1766] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1778) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:resolved_debuglink) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1785) command_list: (command.CommandList children: [ (C {(resolve_debuglink)} {(DQ ($ Id.VSub_DollarName '$obj'))} {(DQ ($ Id.VSub_DollarName '$debuglink_value'))} ) ] ) ) ) } spids: [1783] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ ($ Id.VSub_DollarName '$resolved_debuglink'))} ) ) (C {(contains_debug_symbols)} {(DQ ($ Id.VSub_DollarName '$resolved_debuglink'))} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1820) ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('detected debug info within debuglink ') ($ Id.VSub_DollarName '$debuglink_value') (' resolved at ') ($ Id.VSub_DollarName '$candidate') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1834) fd: 1 arg_word: {(2)} ) ] ) (C {(echo)} {(DQ ($ Id.VSub_DollarName '$candidate'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1845) arg_word: {(0)} ) ] spids: [1801 1822] ) ] ) ] spids: [1764 1780] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:success_attempt) op: assign_op.Equal rhs: {(DQ )} spids: [2011] ) ] ) (command.ForEach iter_name: attempt iter_words: [ {(/usr/lib/debug) (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2030) command_list: (command.CommandList children: [(C {(readlink)} {(-f)} {(DQ ($ Id.VSub_DollarName '$obj'))})] ) ) ) } {(/usr/lib/debug) (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2047) command_list: (command.CommandList children: [ (C {(dirname)} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2052) command_list: (command.CommandList children: [ (C {(readlink)} {(-f)} {(DQ ($ Id.VSub_DollarName '$obj'))}) ] ) ) ) } ) ] ) ) (/) (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2067) command_list: (command.CommandList children: [(C {(basename)} {(DQ ($ Id.VSub_DollarName '$obj'))})] ) ) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [ {(echo)} {(DQ ('looking for a package containing ') ($ Id.VSub_DollarName '$attempt'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2091) fd: 1 arg_word: {(2)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:apt_found) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2097) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo_then_sudo)} {(apt-file)} {(-F)} {(find)} {(DQ ($ Id.VSub_DollarName '$attempt'))} ) (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's^: /.*^^' span_id: 2116 ) ) } ) ] negated: F ) ] ) ) ) } spids: [2095] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ ($ Id.VSub_DollarName '$apt_found'))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:2134) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pkg) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2141 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$apt_found'))} ) (C {(cut)} {(-f1)}) ] negated: F ) ] ) ) ) } spids: [2139] ) ] ) (command.Simple words: [{(echo)} {(DQ ('found ') ($ Id.VSub_DollarName '$pkg'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2166) fd: 1 arg_word: {(2)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ ($ Id.VSub_DollarName '$pkg'))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:2181) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Simple words: [ {(dpkg)} {(-p)} {(DQ ($ Id.VSub_DollarName '$pkg'))} ] redirects: [ (redir.Redir op: (Token id: Id.Redir_Great val: '>' span_id: 2196 ) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id: Id.Redir_Great val: '2>' span_id: 2199 ) fd: 2 arg_word: {(/dev/null)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2201) ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ($ Id.VSub_DollarName '$pkg') (' is already installed') ) } ] redirects: [ (redir.Redir op: (Token id: Id.Redir_GreatAnd val: '1>&' span_id: 2213 ) fd: 1 arg_word: {(2)} ) ] ) ] spids: [2186 2203] ) ] else_action: [ (command.Simple words: [ {(echo)} { (DQ ('Attempting install of ') ($ Id.VSub_DollarName '$pkg') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2227) fd: 1 arg_word: {(2)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(echo_then_sudo)} {(apt-get)} {(install)} {(DQ ($ Id.VSub_DollarName '$pkg'))} ) ] negated: T ) terminator: (Token id: Id.Op_Semi val: ';' span_id: 2244 ) ) ] action: [ (command.Simple words: [{(echo)} {(DQ ('install failed'))}] redirects: [ (redir.Redir op: (Token id: Id.Redir_GreatAnd val: '1>&' span_id: 2255 ) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 2259 ) arg_word: {(1)} ) ] spids: [2231 2246] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(contains_debug_symbols)} {(DQ ($ Id.VSub_DollarName '$attempt'))} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2281) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:correct_debuglink) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2292 ) command_list: (command.CommandList children: [ (C {(basename)} { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2297 ) command_list: (command.CommandList children: [ (C {(readlink)} {(-f)} { (DQ ($ Id.VSub_DollarName '$attempt' ) ) } ) ] ) ) ) } ) ] ) ) ) } spids: [2290] ) ] ) (command.Simple words: [ {(echo)} { (DQ ('debuglink should say ') ($ Id.VSub_DollarName '$correct_debuglink') ) } ] redirects: [ (redir.Redir op: (Token id: Id.Redir_GreatAnd val: '1>&' span_id: 2321 ) fd: 1 arg_word: {(2)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(fixup_debuglink)} {(DQ ($ Id.VSub_DollarName '$obj'))} {(DQ ($ Id.VSub_DollarName '$attempt'))} ) ] negated: T ) terminator: (Token id: Id.Op_Semi val: ';' span_id: 2338 ) ) ] action: [ (command.Simple words: [{(echo)} {(DQ (failed))}] redirects: [ (redir.Redir op: (Token id: Id.Redir_GreatAnd val: '1>&' span_id: 2349 ) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 2353 ) arg_word: {(1)} ) ] spids: [2325 2340] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:verify_debuglink) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2368 ) command_list: (command.CommandList children: [ (C {(read_debuglink)} {(DQ ($ Id.VSub_DollarName '$obj'))} ) ] ) ) ) } spids: [2366] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ ($ Id.VSub_DollarName '$verify_debuglink' ) ) } right: { (DQ ($ Id.VSub_DollarName '$correct_debuglink' ) ) } ) ) terminator: (Token id: Id.Op_Semi val: ';' span_id: 2395 ) ) ] action: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$attempt'))}) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 2408 ) arg_word: {(0)} ) ] spids: [2380 2397] ) ] else_action: [ (command.Simple words: [ {(echo)} {(DQ ('debuglink not fixed up properly'))} ] redirects: [ (redir.Redir op: (Token id: Id.Redir_GreatAnd val: '1>&' span_id: 2422 ) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 2426 ) arg_word: {(1)} ) ] ) ] spids: [2274 2283] ) ] else_action: [ (command.Simple words: [ {(echo)} { (DQ ('installed package unexpectedly lacked debug info') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2444) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 2448 ) arg_word: {(1)} ) ] ) ] spids: [2170 2183] ) ] else_action: [ (command.Simple words: [{(echo)} {(DQ ('apt-file printed something strange'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2468) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:2472) ) ] ) ] spids: [2123 2136] ) ] else_action: [ (command.Simple words: [{(echo)} {(DQ ('package not found'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2491) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:2495) ) ] ) ] ) ) (command.Simple words: [{(echo)} {(DQ ('giving up'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2516) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2520) arg_word: {(1)} ) ] ) ) (command.ShFunction name: ensure_debug_source body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:obj) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [2535] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:first_compile_unit_context) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2547) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(readelf)} {(-wi)} {(DQ ($ Id.VSub_DollarName '$obj'))}) (C {(grep)} {(-m1)} {(-A5)} {(compile_unit)}) ] negated: F ) ] ) ) ) } spids: [2545] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:compile_unit_name) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2576) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$first_compile_unit_context'))} ) (C {(grep)} {(DW_AT_name)}) (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's/.*DW_AT_name.*indirect string, offset: 0x[0-9a-f]\\+): //' span_id: 2597 ) ) } ) (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's/[[:blank:]]*$//' span_id: 2605 ) ) } ) ] negated: F ) ] ) ) ) } spids: [2574] ) ] ) (command.Simple words: [ {(echo)} {(DQ ('extracted CU name: ') ($ Id.VSub_DollarName '$compile_unit_name'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2632) fd: 1 arg_word: {(2)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:comp_dir) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2638) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$first_compile_unit_context'))} ) (C {(grep)} {(comp_dir)}) (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's/.*DW_AT_comp_dir.*(indirect string, offset: 0x[0-9a-f]\\+): //' span_id: 2659 ) ) } ) (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's/[[:blank:]]*$//' span_id: 2667 ) ) } ) ] negated: F ) ] ) ) ) } spids: [2636] ) ] ) (command.Simple words: [ {(echo)} {(DQ ('extracted compilation directory: ') ($ Id.VSub_DollarName '$comp_dir'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2684) fd: 1 arg_word: {(2)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_r child: { (DQ (${ Id.VSub_Name comp_dir) (/) (${ Id.VSub_Name compile_unit_name) ) } ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:2711) ) ] action: [ (command.Simple words: [{(echo)} {(DQ ('guessing that source does exist already'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2722) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2726) arg_word: {(0)} ) ] spids: [2694 2713] ) ] else_action: [ (command.Simple words: [{(echo)} {(DQ ('source does not exist already'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2740) fd: 1 arg_word: {(2)} ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$DPKG_SOURCE_ROOT'))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:2764) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DPKG_SOURCE_ROOT) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2771) command_list: (command.CommandList children: [(C {(mktemp)} {(-d)})] ) ) ) } spids: [2769] ) ] ) ] spids: [2753 2766] ) ] ) (command.Simple words: [ {(echo)} {(DQ ('downloading source to ') ($ Id.VSub_DollarName '$DPKG_SOURCE_ROOT'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2791) fd: 1 arg_word: {(2)} ) ] ) (command.Subshell command_list: (command.CommandList children: [ (C {(cd)} {(DQ ($ Id.VSub_DollarName '$DPKG_SOURCE_ROOT'))}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:owning_package) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2810 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(dpkg)} {(-S)} {(DQ ($ Id.VSub_DollarName '$obj'))}) (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's^: /.*^^' span_id: 2825 ) ) } ) ] negated: F ) ] ) ) ) } spids: [2808] ) ] ) (command.Subshell command_list: (command.CommandList children: [ (command.Sentence child: (command.Simple words: [{(echo)} {(DQ ('failed to identify owning package'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2840) fd: 1 arg_word: {(2)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2842) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2844) arg_word: {(1)} ) ] ) ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(apt-get)} {(source)} {(DQ ($ Id.VSub_DollarName '$owning_package'))}) (command.Subshell command_list: (command.CommandList children: [ (command.Sentence child: (command.Simple words: [{(echo)} {(DQ ('failed to download source'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2867) fd: 1 arg_word: {(2)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2869) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2871) arg_word: {(1)} ) ] ) ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:source_dirname) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2879) command_list: (command.CommandList children: [ (command.Pipeline children: [(C {(ls)} {(-t)}) (C {(head)} {(-n1)})] negated: F ) ] ) ) ) } spids: [2877] ) ] ) (command.Simple words: [ {(echo)} { (DQ ('guessing source was extracted in ') ($ Id.VSub_DollarName '$source_dirname') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2902) fd: 1 arg_word: {(2)} ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$comp_dir'))} arms: [ (case_arm pat_list: [{(/build/buildd/) (Id.Lit_Star '*')}] action: [ (command.Simple words: [{(echo)} {(DQ ('found a buildd build'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2932) fd: 1 arg_word: {(2)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:source_dirname_escaped) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2938 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$source_dirname'))} ) (C {(escape_regexp_floating)}) ] negated: F ) ] ) ) ) } spids: [2936] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:prefix) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2959 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$comp_dir'))} ) (C {(sed)} { (DQ ('s^') (Id.Lit_Other '\\') ('(.*/') (${ Id.VSub_Name source_dirname_escaped) (/) (Id.Lit_Other '\\') (').*^') (Id.Lit_Other '\\') ('1^') ) } ) ] negated: F ) ] ) ) ) } spids: [2957] ) ] ) (command.Simple words: [ {(echo)} { (DQ ('calculated source path prefix ') ($ Id.VSub_DollarName '$prefix') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2996) fd: 1 arg_word: {(2)} ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {(echo_then_sudo)} {(mkdir)} {(-p)} { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 3011 ) command_list: (command.CommandList children: [ (C {(dirname)} {(DQ ($ Id.VSub_DollarName '$prefix'))}) ] ) ) ) } ) (C {(echo_then_sudo)} {(ln)} {(-s)} {(DQ ($ Id.VSub_DollarName '$source_dirname'))} {(DQ ($ Id.VSub_DollarName '$prefix'))} ) (command.Subshell command_list: (command.CommandList children: [ (command.Sentence child: (command.Simple words: [{(echo)} {(DQ ('failed to mkdir or symlink'))}] redirects: [ (redir.Redir op: (Token id: Id.Redir_GreatAnd val: '1>&' span_id: 3052 ) fd: 1 arg_word: {(2)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:3054) ) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 3056 ) arg_word: {(1)} ) ] ) ) ] ) (command.Simple words: [{(echo)} {(DQ (success))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:3068) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:3072) arg_word: {(0)} ) ] spids: [2920 2923 3077 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.Simple words: [{(echo)} {(DQ ('package was built at bad source directory'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:3091) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:3096) arg_word: {(1)} ) ] spids: [3080 3082 3101 -1] ) ] ) ] ) ) ] ) ) ] )