(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pcprofileso) op: assign_op.Equal rhs: {(SQ <'@SLIBDIR@/libpcprofile.so'>)} spids: [49] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pcprofiledump) op: assign_op.Equal rhs: {(SQ <'@BINDIR@/pcprofiledump'>)} spids: [54] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEXTDOMAIN) op: assign_op.Equal rhs: {<libc>} spids: [59] ) ] ) (command.ShFunction name: do_usage body: (command.BraceGroup children: [ (C {<printf>} { (double_quoted left: <Id.Left_DollarDoubleQuote '$"'> parts: [ <'Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...'> <Id.Lit_Other '\\'> <n> ] ) } ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] ) ) (command.ShFunction name: help_info body: (command.BraceGroup children: [ (command.Simple words: [ {<printf>} { (double_quoted left: <Id.Left_DollarDoubleQuote '$"'> parts: [ <'Try '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ) <"%s --help' or "> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ) <"%s --usage' for more information."> <Id.Lit_Other '\\'> <n> ] ) } {<xtrace>} {<xtrace>} ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.ShFunction name: do_missing_arg body: (command.BraceGroup children: [ (command.Simple words: [ {<printf>} { (double_quoted left: <Id.Left_DollarDoubleQuote '$"'> parts: [<"%s: option '%s' requires an argument."> <Id.Lit_Other '\\'> <n>] ) } {<xtrace>} {(DQ ($ Id.VSub_Number '$1'))} ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (C {<help_info>}) ] ) ) (command.ShFunction name: do_help body: (command.BraceGroup children: [ (C {<printf>} { (double_quoted left: <Id.Left_DollarDoubleQuote '$"'> parts: [ <'Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...'> <Id.Lit_Other '\\'> <n> ] ) } ) (C {<printf>} { (double_quoted left: <Id.Left_DollarDoubleQuote '$"'> parts: [ <'Trace execution of program by printing currently executed function.\n'> <'\n'> < " --data=FILE Don't run the program, just print the data from FILE.\n" > <'\n'> <' -?,--help Print this help and exit\n'> <' --usage Give a short usage message\n'> <' -V,--version Print version information and exit\n'> <'\n'> < 'Mandatory arguments to long options are also mandatory for any corresponding\n' > <'short options.\n'> <'\n'> ] ) } ) (C {<printf>} { (double_quoted left: <Id.Left_DollarDoubleQuote '$"'> parts: [ <'For bug reporting instructions, please see:'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <'n%s.'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <n> ] ) } {(DQ <'@REPORT_BUGS_TO@'>)} ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] ) ) (command.ShFunction name: do_version body: (command.BraceGroup children: [ (C {<echo>} {(SQ <'xtrace @PKGVERSION@@VERSION@'>)}) (C {<printf>} { (double_quoted left: <Id.Left_DollarDoubleQuote '$"'> parts: [ <'Copyright (C) %s Free Software Foundation, Inc.\n'> <'This is free software; see the source for copying conditions. There is NO\n'> < 'warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n' > ] ) } {(DQ <2016>)} ) (C {<printf>} {(double_quoted left:<Id.Left_DollarDoubleQuote '$"'> parts:[<'Written by %s.\n'>])} {(DQ <'Ulrich Drepper'>)} ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] ) ) (command.ShFunction name: format_line body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:fct) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [274] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:file) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Number 2> suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{<':*'>}) ) } spids: [278] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:line) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Number 2> suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPound arg_word:{<'*:'>}) ) } spids: [286] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:width) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<expr>} {($ Id.VSub_DollarName '$COLUMNS')} {<->} {<30>})] ) ) } spids: [294] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filelen) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<expr>} {<length>} {($ Id.VSub_DollarName '$file')})] ) ) } spids: [306] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {(DQ ($ Id.VSub_DollarName '$filelen'))} {<-gt>} {(DQ ($ Id.VSub_DollarName '$width'))} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:rwidth) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<expr>} {($ Id.VSub_DollarName '$width')} {<->} {<3>}) ] ) ) } spids: [334] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:file) op: assign_op.Equal rhs: { (DQ <...> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<expr>} {<substr>} {($ Id.VSub_DollarName '$file')} { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<expr>} {<1>} {<Id.Lit_Other '+'>} {($ Id.VSub_DollarName '$filelen')} {<->} {($ Id.VSub_DollarName '$rwidth')} ) ] ) ) } {($ Id.VSub_DollarName '$rwidth')} ) ] ) ) ) } spids: [346] ) ] ) ] spids: [316 331] ) ] ) (C {<printf>} {(SQ <'%-20s %-*s %6s\\n'>)} {($ Id.VSub_DollarName '$fct')} {($ Id.VSub_DollarName '$width')} {($ Id.VSub_DollarName '$file')} {($ Id.VSub_DollarName '$line')} ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COLUMNS) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name COLUMNS> suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{<80>}) ) } spids: [399] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TERMINAL_PROG) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name TERMINAL_PROG> suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{<xterm>}) ) } spids: [410] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:data) op: assign_op.Equal rhs: (word.Empty) spids: [421] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: [ (command.Sentence child: (C {<test>} {($ Id.VSub_Pound '$#')} {<-gt>} {<0>}) terminator: <Id.Op_Semi _> ) ] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{<--d>} {<--da>} {<--dat>} {<--data>}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {($ Id.VSub_Pound '$#')} {<-eq>} {<1>}) terminator: <Id.Op_Semi _> ) ] action: [(C {<do_missing_arg>} {($ Id.VSub_Number '$1')})] spids: [466 477] ) ] ) (C {<shift>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:data) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [491] ) ] ) ] spids: [450 463 497 -1] ) (case_arm pat_list: [ {<--d> <Id.Lit_Equals '='> <Id.Lit_Star '*'>} {<--da> <Id.Lit_Equals '='> <Id.Lit_Star '*'>} {<--dat> <Id.Lit_Equals '='> <Id.Lit_Star '*'>} {<--data> <Id.Lit_Equals '='> <Id.Lit_Star '*'>} ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:data) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Number 1> suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPound arg_word:{<'*='>}) ) } spids: [524] ) ] ) ] spids: [500 521 532 -1] ) (case_arm pat_list: [ {<-> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\?'>)} {<--h>} {<--he>} {<--hel>} {<--help>} ] action: [(C {<do_help>})] spids: [535 553 559 -1] ) (case_arm pat_list: [ {<-V>} {<--v>} {<--ve>} {<--ver>} {<--vers>} {<--versi>} {<--versio>} {<--version>} ] action: [(C {<do_version>})] spids: [562 591 597 -1] ) (case_arm pat_list: [{<--u>} {<--us>} {<--usa>} {<--usag>} {<--usage>}] action: [(C {<do_usage>})] spids: [600 617 623 -1] ) (case_arm pat_list: [{<-->}] action: [(C {<shift>}) (command.ControlFlow token:<Id.ControlFlow_Break break>)] spids: [626 627 640 -1] ) (case_arm pat_list: [{<--> <Id.Lit_Star '*'>}] action: [ (command.Simple words: [ {<printf>} { (double_quoted left: <Id.Left_DollarDoubleQuote '$"'> parts: [ <'xtrace: unrecognized option '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ) ($ Id.VSub_Number '$1') <"'"> <Id.Lit_Other '\\'> <n> ] ) } ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (C {<help_info>}) ] spids: [643 645 666 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [(command.ControlFlow token:<Id.ControlFlow_Break break>)] spids: [669 670 680 -1] ) ] ) (C {<shift>}) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {($ Id.VSub_Pound '$#')} {<-eq>} {<0>}) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [ {<printf>} { (double_quoted left: <Id.Left_DollarDoubleQuote '$"'> parts: [<'No program name given'> <Id.Lit_Other '\\'> <n>] ) } ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (C {<help_info>}) ] spids: [694 705] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:program) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [728] ) ] ) (C {<shift>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {<Id.KW_Bang '!'>} {<-f>} {(DQ ($ Id.VSub_DollarName '$program'))}) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [ {<printf>} { (double_quoted left: <Id.Left_DollarDoubleQuote '$"'> parts: [ <'executable '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ) ($ Id.VSub_DollarName '$program') <"' not found"> <Id.Lit_Other '\\'> <n> ] ) } ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (C {<help_info>}) ] spids: [733 746] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {<Id.KW_Bang '!'>} {<-x>} {(DQ ($ Id.VSub_DollarName '$program'))}) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [ {<printf>} { (double_quoted left: <Id.Left_DollarDoubleQuote '$"'> parts: [ (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ) ($ Id.VSub_DollarName '$program') <"' is no executable"> <Id.Lit_Other '\\'> <n> ] ) } ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (C {<help_info>}) ] spids: [768 781] ) ] ) (C {<printf>} {(DQ <'%-20s %-*s %6s'> <Id.Lit_Other '\\'> <n>)} {<Function>} { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<expr>} {($ Id.VSub_DollarName '$COLUMNS')} {<->} {<30>})] ) ) } {<File>} {<Line>} ) (command.CommandList children: [ (command.Sentence child: (command.ForEach iter_name: i iter_words: [ { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<seq>} {<1>} {($ Id.VSub_DollarName '$COLUMNS')})] ) ) } ] do_arg_iter: F body: (command.DoGroup children: [(command.Sentence child:(C {<printf>} {<->}) terminator:<Id.Op_Semi _>)] ) ) terminator: <Id.Op_Semi _> ) (C {<printf>} {(SQ <'\\n'>)}) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$data'))}) terminator: <Id.Op_Semi _> ) ] action: [ (command.Pipeline children: [ (C {($ Id.VSub_DollarName '$pcprofiledump')} {(DQ ($ Id.VSub_DollarName '$data'))}) (C {<sed>} {(SQ <'s/this = \\([^,]*\\).*/\\1/'>)}) (C {<addr2line>} {<-fC>} {<-e>} {(DQ ($ Id.VSub_DollarName '$program'))}) (command.WhileUntil keyword: <Id.KW_While while> cond: [(command.Sentence child:(C {<read>} {<fct>}) terminator:<Id.Op_Semi _>)] body: (command.DoGroup children: [ (C {<read>} {<file>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {(DQ ($ Id.VSub_DollarName '$fct'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(SQ <'??'>)} {<-a>} {(DQ ($ Id.VSub_DollarName '$file'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(SQ <'??:0'>)} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<format_line>} {(DQ ($ Id.VSub_DollarName '$fct'))} {(DQ ($ Id.VSub_DollarName '$file'))} ) ] spids: [921 950] ) ] ) ] ) ) ] negated: F ) ] spids: [861 872] ) ] else_action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:fifo) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<mktemp>} {<-ut>} {<xtrace.XXXXXX>})] ) ) } spids: [972] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] ) (C {<trap>} {(SQ <'rm -f "$fifo"; exit 1'>)} {<HUP>} {<INT>} {<QUIT>} {<TERM>} {<PIPE>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<mkfifo>} {<-m>} {<0600>} {($ Id.VSub_DollarName '$fifo')}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) (command.Sentence child: (C {($ Id.VSub_DollarName '$TERMINAL_PROG')} {<-T>} {(DQ <'xtrace - '> ($ Id.VSub_DollarName '$program') <' '> ($ Id.VSub_Star '$*'))} {<-e>} {</bin/sh>} {<-c>} { (DQ <'LD_PRELOAD='> ($ Id.VSub_DollarName '$pcprofileso') <' PCPROFILE_OUTPUT='> ($ Id.VSub_DollarName '$fifo') <' '> ($ Id.VSub_DollarName '$program') <' '> ($ Id.VSub_Star '$*') <'; read < '> ($ Id.VSub_DollarName '$fifo') ) } ) terminator: <Id.Op_Amp _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:termpid) op: assign_op.Equal rhs: {($ Id.VSub_Bang '$!')} spids: [1056] ) ] ) (command.Pipeline children: [ (C {($ Id.VSub_DollarName '$pcprofiledump')} {<-u>} {(DQ ($ Id.VSub_DollarName '$fifo'))}) (command.WhileUntil keyword: <Id.KW_While while> cond: [(command.Sentence child:(C {<read>} {<line>}) terminator:<Id.Op_Semi _>)] body: (command.DoGroup children: [ (command.Pipeline children: [ (C {<echo>} {(DQ ($ Id.VSub_DollarName '$line'))}) (C {<sed>} {(SQ <'s/this = \\([^,]*\\).*/\\1/'>)}) (C {<addr2line>} {<-fC>} {<-e>} {(DQ ($ Id.VSub_DollarName '$program'))}) ] negated: F ) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: [(command.Sentence child:(C {<read>} {<fct>}) terminator:<Id.Op_Semi _>)] body: (command.DoGroup children: [ (C {<read>} {<file>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {(DQ ($ Id.VSub_DollarName '$fct'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(SQ <'??'>)} {<-a>} {(DQ ($ Id.VSub_DollarName '$file'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(SQ <'??:0'>)} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<format_line>} {(DQ ($ Id.VSub_DollarName '$fct'))} {(DQ ($ Id.VSub_DollarName '$file'))} ) ] spids: [1130 1159] ) ] ) ] ) ) ] negated: F ) (C {<read>} {<-p>} { (DQ <'Press return here to close '> ($ Id.VSub_DollarName '$TERMINAL_PROG') <'('> ($ Id.VSub_DollarName '$program') <').'> ) } ) (command.Simple words: [{<echo>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$fifo'))} ) ] ) (C {<rm>} {(DQ ($ Id.VSub_DollarName '$fifo'))}) ] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] )