(CommandList
  children: [
    (FuncDef
      name: usage
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ('Usage: embedspu [flags] symbol_name input_filename output_filename'))})
            (C {(echo)})
            (C {(echo)} {(DQ ('        input_filename:  SPU ELF executable to be embedded'))})
            (C {(echo)} {(DQ ('        output_filename: Resulting PowerPC object file'))})
            (C {(echo)} {(DQ ('        symbol_name:     Name of program handle struct to be defined'))})
            (C {(echo)} 
              {(DQ ('        flags:           GCC flags defining PowerPC object file format'))}
            )
            (C {(echo)} {(DQ ('                         (e.g. -m32 or -m64)'))})
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [69]
        )
      spids: [64 68]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:program_transform_name)
          op: Equal
          rhs: {(EmptyPart)}
          spids: [124]
        )
      ]
      spids: [124]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:mydir)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(dirname)} {(DQ ($ VSub_Number '$0'))})])
                left_token: <Left_Backtick '`'>
                spids: [127 133]
              )
            }
          spids: [126]
        )
      ]
      spids: [126]
    )
    (FuncDef
      name: find_prog
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prog)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(echo)} {($ VSub_Number '$1')})
                                  (C {(sed)} {(DQ ($ VSub_Name '$program_transform_name'))})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [145 157]
                      )
                    }
                  spids: [144]
                )
              ]
              spids: [144]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prog)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$mydir') (/) ($ VSub_Name '$prog'))}
                  spids: [160]
                )
              ]
              spids: [160]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(test)} {(-x)} {(DQ ($ VSub_Name '$prog'))})
                (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prog)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$mydir') (/) ($ VSub_Number '$1'))}
                  spids: [183]
                )
              ]
              spids: [183]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(test)} {(-x)} {(DQ ($ VSub_Name '$prog'))})
                (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prog)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(echo)} {($ VSub_Number '$1')})
                                  (C {(sed)} {(DQ ($ VSub_Name '$program_transform_name'))})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [207 219]
                      )
                    }
                  spids: [206]
                )
              ]
              spids: [206]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (SimpleCommand
                  words: [{(which)} {($ VSub_Name '$prog')}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(/dev/null)}
                      spids: [226]
                    )
                    (Redir
                      op_id: Redir_Great
                      fd: 2
                      arg_word: {(/dev/null)}
                      spids: [230]
                    )
                  ]
                )
                (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
              ]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
          spids: [141]
        )
      spids: [136 140]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:SYMBOL) op:Equal rhs:{(EmptyPart)} spids:[248])]
      spids: [248]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:INFILE) op:Equal rhs:{(EmptyPart)} spids:[250])]
      spids: [250]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:OUTFILE) op:Equal rhs:{(EmptyPart)} spids:[252])]
      spids: [252]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:FLAGS) op:Equal rhs:{(EmptyPart)} spids:[254])]
      spids: [254]
    )
    (FuncDef
      name: parse_args
      body: 
        (BraceGroup
          children: [
            (While
              cond: [
                (Sentence
                  child: (C {(test)} {(-n)} {(DQ ($ VSub_Number '$1'))})
                  terminator: <Op_Semi ';'>
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (Case
                      to_match: {(DQ ($ VSub_Number '$1'))}
                      arms: [
                        (case_arm
                          pat_list: [{(-) (Lit_Other '*')}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:FLAGS)
                                  op: Equal
                                  rhs: {(DQ (${ VSub_Name FLAGS) (' ') ($ VSub_Number '$1'))}
                                  spids: [292]
                                )
                              ]
                              spids: [292]
                            )
                          ]
                          spids: [288 290 301 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '*')}]
                          action: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: (C {(test)} {(-z)} {(DQ ($ VSub_Name '$SYMBOL'))})
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:SYMBOL)
                                          op: Equal
                                          rhs: {(DQ ($ VSub_Number '$1'))}
                                          spids: [321]
                                        )
                                      ]
                                      spids: [321]
                                    )
                                  ]
                                  spids: [16777215 318]
                                )
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: (C {(test)} {(-z)} {(DQ ($ VSub_Name '$INFILE'))})
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:INFILE)
                                          op: Equal
                                          rhs: {(DQ ($ VSub_Number '$1'))}
                                          spids: [341]
                                        )
                                      ]
                                      spids: [341]
                                    )
                                  ]
                                  spids: [327 338]
                                )
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: (C {(test)} {(-z)} {(DQ ($ VSub_Name '$OUTFILE'))})
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:OUTFILE)
                                          op: Equal
                                          rhs: {(DQ ($ VSub_Number '$1'))}
                                          spids: [361]
                                        )
                                      ]
                                      spids: [361]
                                    )
                                  ]
                                  spids: [347 358]
                                )
                              ]
                              else_action: [(C {(echo)} {(DQ ('Too many arguments!'))}) (C {(usage)})]
                              spids: [367 380]
                            )
                          ]
                          spids: [304 305 382 16777215]
                        )
                      ]
                      spids: [279 285 385]
                    )
                    (C {(shift)})
                  ]
                  spids: [276 391]
                )
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(test)} {(-z)} {(DQ ($ VSub_Name '$OUTFILE'))})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(usage)})]
                  spids: [16777215 405]
                )
              ]
              spids: [16777215 411]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(test)} {(KW_Bang '!')} {(-r)} {(DQ ($ VSub_Name '$INFILE'))})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(echo)} {(DQ (${ VSub_Name INFILE) (': File not found'))}) (C {(usage)})]
                  spids: [16777215 427]
                )
              ]
              spids: [16777215 443]
            )
          ]
          spids: [262]
        )
      spids: [257 261]
    )
    (FuncDef
      name: main
      body: 
        (BraceGroup
          children: [
            (C {(parse_args)} {(DQ ($ VSub_At '$@'))})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(test)} {(-x)} {(DQ ($ VSub_Name '$mydir') (/../gcc/xgcc))})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:CC)
                          op: Equal
                          rhs: 
                            {
                              (DQ ($ VSub_Name '$mydir') ('/../gcc/xgcc -B') ($ VSub_Name '$mydir') 
                                (/../gcc/)
                              )
                            }
                          spids: [483]
                        )
                      ]
                      spids: [483]
                    )
                  ]
                  spids: [16777215 480]
                )
              ]
              else_action: [
                (C {(find_prog)} {(gcc)})
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Sentence
                          child: (C {(test)} {($ VSub_QMark '$?')} {(-ne)} {(0)})
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [
                        (C {(echo)} {(DQ ('Cannot find ') ($ VSub_Name '$prog'))})
                        (ControlFlow
                          token: <ControlFlow_Exit exit>
                          arg_word: {(1)}
                        )
                      ]
                      spids: [16777215 511]
                    )
                  ]
                  spids: [16777215 527]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:CC)
                      op: Equal
                      rhs: {(DQ ($ VSub_Name '$prog'))}
                      spids: [530]
                    )
                  ]
                  spids: [530]
                )
              ]
              spids: [492 536]
            )
            (C {(find_prog)} {(readelf)})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(test)} {($ VSub_QMark '$?')} {(-ne)} {(0)})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (SimpleCommand
                                  words: [{(which)} {(readelf)}]
                                  redirects: [
                                    (Redir
                                      op_id: Redir_Great
                                      fd: 16777215
                                      arg_word: {(/dev/null)}
                                      spids: [569]
                                    )
                                    (Redir
                                      op_id: Redir_Great
                                      fd: 2
                                      arg_word: {(/dev/null)}
                                      spids: [573]
                                    )
                                  ]
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:prog)
                                  op: Equal
                                  rhs: {(readelf)}
                                  spids: [581]
                                )
                              ]
                              spids: [581]
                            )
                          ]
                          spids: [16777215 578]
                        )
                      ]
                      else_action: [
                        (C {(echo)} {(DQ ('Cannot find ') ($ VSub_Name '$prog'))})
                        (ControlFlow
                          token: <ControlFlow_Exit exit>
                          arg_word: {(1)}
                        )
                      ]
                      spids: [585 601]
                    )
                  ]
                  spids: [16777215 560]
                )
              ]
              spids: [16777215 604]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:READELF)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$prog'))}
                  spids: [607]
                )
              ]
              spids: [607]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      ops: [Op_DPipe Op_DPipe]
                      children: [
                        (Pipeline
                          children: [
                            (C {(${ VSub_Name READELF)} {(-h)} {(${ VSub_Name INFILE)})
                            (SimpleCommand
                              words: [{(grep)} {(SQ <'Class:.*ELF32'>)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: 16777215
                                  arg_word: {(/dev/null)}
                                  spids: [640]
                                )
                                (Redir
                                  op_id: Redir_Great
                                  fd: 2
                                  arg_word: {(/dev/null)}
                                  spids: [643]
                                )
                              ]
                            )
                          ]
                          negated: T
                        )
                        (Pipeline
                          children: [
                            (C {(${ VSub_Name READELF)} {(-h)} {(${ VSub_Name INFILE)})
                            (SimpleCommand
                              words: [{(grep)} {(SQ <'Type:.*EXEC'>)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: 16777215
                                  arg_word: {(/dev/null)}
                                  spids: [670]
                                )
                                (Redir
                                  op_id: Redir_Great
                                  fd: 2
                                  arg_word: {(/dev/null)}
                                  spids: [673]
                                )
                              ]
                            )
                          ]
                          negated: T
                        )
                        (Pipeline
                          children: [
                            (C {(${ VSub_Name READELF)} {(-h)} {(${ VSub_Name INFILE)})
                            (SimpleCommand
                              words: [{(egrep)} {(SQ <'Machine:.*(SPU|17)'>)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: 16777215
                                  arg_word: {(/dev/null)}
                                  spids: [700]
                                )
                                (Redir
                                  op_id: Redir_Great
                                  fd: 2
                                  arg_word: {(/dev/null)}
                                  spids: [703]
                                )
                              ]
                            )
                          ]
                          negated: T
                        )
                      ]
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {(DQ (${ VSub_Name INFILE) (': Does not appear to be an SPU executable'))}
                    )
                    (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
                  ]
                  spids: [16777215 707]
                )
              ]
              spids: [16777215 725]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:toe)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(${ VSub_Name READELF)} {(-S)} {(${ VSub_Name INFILE)})
                                  (C {(sed)} {(-n)} {(-e)} 
                                    {
                                      (SQ 
                                        <
's, *\\[ *\\([0-9]*\\)\\] *\\.toe *[PROGN]*BITS *\\([0-9a-f]*\\).*,\\1 \\2,p'
                                        >
                                      )
                                    }
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [730 752]
                      )
                    }
                  spids: [729]
                )
              ]
              spids: [729]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:toe_addr)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(echo)} {($ VSub_Name '$toe')})
                                  (C {(sed)} {(-n)} {(-e)} {(SQ <'s,.* ,,p'>)})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [756 772]
                      )
                    }
                  spids: [755]
                )
              ]
              spids: [755]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:toe)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(echo)} {($ VSub_Name '$toe')})
                                  (C {(sed)} {(-n)} {(-e)} {(SQ <'s, .*,,p'>)})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [776 792]
                      )
                    }
                  spids: [775]
                )
              ]
              spids: [775]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:has_ea)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(${ VSub_Name READELF)} {(-S)} {(${ VSub_Name INFILE)})
                                  (C {(sed)} {(-n)} {(-e)} 
                                    {(SQ <'s, *\\[ *\\([0-9]*\\)\\] *\\._ea *PROGBITS.*,\\1,p'>)}
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [796 818]
                      )
                    }
                  spids: [795]
                )
              ]
              spids: [795]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sections)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(${ VSub_Name READELF)} {(-S)} {(${ VSub_Name INFILE)})
                                  (C {(sed)} {(-n)} {(-e)} 
                                    {
                                      (SQ 
                                        <
's, *\\[ *\\([0-9]*\\)\\] *[^ ]* *PROGBITS *\\([0-9a-f]*\\) *\\([0-9a-f]*\\).*,\\1 \\2 \\3,p'
                                        >
                                      )
                                    }
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [826 848]
                      )
                    }
                  spids: [825]
                )
              ]
              spids: [825]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sections)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(echo)} {(${ VSub_Name sections)})])
                        left_token: <Left_Backtick '`'>
                        spids: [852 858]
                      )
                    }
                  spids: [851]
                )
              ]
              spids: [851]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:relas)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(${ VSub_Name READELF)} {(-S)} {(${ VSub_Name INFILE)})
                                  (C {(sed)} {(-n)} {(-e)} 
                                    {
                                      (SQ 
                                        <
's, *\\[ *[0-9]*\\] *[^ ]* *RELA *[0-9a-f]* *0*\\([0-9a-f][0-9a-f]*\\).* \\([0-9a-f][0-9a-f]*\\) *[0-9a-f][0-9a-f]*$,\\1 \\2,p'
                                        >
                                      )
                                    }
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [870 892]
                      )
                    }
                  spids: [869]
                )
              ]
              spids: [869]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:relas)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(echo)} {(${ VSub_Name relas)})])
                        left_token: <Left_Backtick '`'>
                        spids: [896 902]
                      )
                    }
                  spids: [895]
                )
              ]
              spids: [895]
            )
            (SimpleCommand
              words: [
                {(${ VSub_Name CC)}
                {(${ VSub_Name FLAGS)}
                {(-x)}
                {(assembler-with-cpp)}
                {(-nostartfiles)}
                {(-nostdlib)}
                {(-Wa) (Lit_Comma ',') (-mbig)}
                {(-Wa) (Lit_Comma ',') (-noexecstack)}
                {(-Wl) (Lit_Comma ',') (-r)}
                {(-Wl) (Lit_Comma ',') (-x)}
                {(-o)}
                {(${ VSub_Name OUTFILE)}
                {(-)}
              ]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ (' .section .data.spetoe,') (Right_DoubleQuote '"') (aw) 
                        (Right_DoubleQuote '"') (',@progbits\n') (' .p2align 7\n') ('__spetoe__:\n') 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(${ VSub_Name READELF)} {(-s)} {(-W)} {(${ VSub_Name INFILE)})
                                    (C {(grep)} {(SQ <' _EAR_'>)})
                                    (C {(sort)} {(-k)} {(2)})
                                    (C {(awk)} 
                                      {(SQ <'BEGIN { \\\n'> <'\taddr = strtonum ("0x" "'>) 
                                        (BracedVarSub
                                          token: <VSub_Name toe_addr>
                                          suffix_op: 
                                            (StringUnary
                                              op_id: VTest_ColonHyphen
                                              arg_word: {(0)}
                                            )
                                          spids: [1064 1068]
                                        ) (SQ <'"); \\\n'> <'\tsplit ("'>) (DQ (${ VSub_Name sections)) 
                                        (SQ <'", s, " "); \\\n'> 
                                          <'\tfor (i = 1; i in s; i += 3) { \\\n'> <'\t    sec_off[s[i]] = strtonum ("0x" s[i+2]) - strtonum ("0x" s[i+1]); \\\n'> <'\t} \\\n'> <'} \\\n'> 
                                          <'$7 == "'>
                                        ) (${ VSub_Name toe) 
                                        (SQ <'" && strtonum ("0x" $2) != addr { \\\n'> 
                                          <
'\tprint "#error Symbol " $8 " not in 16 byte element toe array!"; \\\n'
                                          > <'} \\\n'> <'$7 == "'>
                                        ) (${ VSub_Name toe) (SQ <'" { \\\n'> <'\taddr = addr + 16; \\\n'> <'} \\\n'> <'$7 == "'>) 
                                        (${ VSub_Name toe) 
                                        (SQ <'" { \\\n'> <'\tprint "#ifdef _LP64"; \\\n'> 
                                          <
'\tprint " .quad " ($8 == "_EAR_" ? "__speelf__" : substr($8, 6)) ", 0"; \\\n'
                                          > <'\tprint "#else"; \\\n'> 
                                          <
'\tprint " .int 0, " ($8 == "_EAR_" ? "__speelf__" : substr($8, 6)) ", 0, 0"; \\\n'
                                          > <'\tprint "#endif"; \\\n'> <'} \\\n'> <'$7 != "'>
                                        ) (${ VSub_Name toe) 
                                        (SQ <'" && $7 in sec_off { \\\n'> 
                                          <'\tprint "#ifdef _LP64"; \\\n'> 
                                          <
'\tprint " .reloc __speelf__+" strtonum ("0x" $2) + sec_off[$7] ", R_PPC64_ADDR64, " ($8 == "_EAR_" ? "__speelf__" : substr($8, 6)); \\\n'
                                          > <'\tprint "#else"; \\\n'> 
                                          <
'\tprint " .reloc __speelf__+" strtonum ("0x" $2) + sec_off[$7] + 4 ", R_PPC_ADDR32, " ($8 == "_EAR_" ? "__speelf__" : substr($8, 6)); \\\n'
                                          > <'\tprint "#endif"; \\\n'> <'\tif (!donedef) { print "#define HAS_RELOCS 1"; donedef = 1; }; \\\n'> 
                                          <'} \\\n'> <'$7 != "'>
                                        ) (${ VSub_Name toe) 
                                        (SQ <'" && ! $7 in sec_off { \\\n'> 
                                          <'\tprint "#error Section not found for " $8; \\\n'> <'} \\\n'>
                                        )
                                      }
                                    )
                                  ]
                                  negated: F
                                )
                              ]
                            )
                          left_token: <Left_Backtick '`'>
                          spids: [1026 1139]
                        ) ('\n') 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (AndOr
                                  ops: [Op_DPipe]
                                  children: [
                                    (C {(test)} {(-z)} {(DQ (${ VSub_Name relas))})
                                    (Pipeline
                                      children: [
                                        (C {(${ VSub_Name READELF)} {(-r)} {(-W)} {(${ VSub_Name INFILE)})
                                        (C {(awk)} 
                                          {(SQ <'BEGIN { \\\n'> <'\tsplit ("'>) 
                                            (DQ (${ VSub_Name sections)) 
                                            (SQ <'", s, " "); \\\n'> 
                                              <'\tfor (i = 1; i in s; i += 3) { \\\n'> <'\t    sec_off[s[i]] = strtonum ("0x" s[i+2]) - strtonum ("0x" s[i+1]); \\\n'> <'\t} \\\n'> 
                                              <'\tsplit ("'>
                                            ) (DQ (${ VSub_Name relas)) 
                                            (SQ <'", s, " "); \\\n'> 
                                              <'\tfor (i = 1; i in s; i += 2) { \\\n'> <'\t    rela[s[i]] = strtonum (s[i+1]); \\\n'> <'\t} \\\n'> <'} \\\n'> <'/^Relocation section/ { \\\n'> 
                                              <'\tsec = substr($6, 3); \\\n'> <'} \\\n'> <'$3 ~ /R_SPU_PPU/ { \\\n'> <'\tprint "#ifdef _LP64"; \\\n'> 
                                              <
'\tprint " .reloc __speelf__+" strtonum ("0x" $1) + sec_off[rela[sec]] ", R_PPC64_ADDR" substr($3, 10) ", " ($5 != "" ? $5 "+0x" $7 : "__speelf__ + 0x" $4); \\\n'
                                              > <'\tprint "#else"; \\\n'> 
                                              <
'\tprint " .reloc __speelf__+" strtonum ("0x" $1) + sec_off[rela[sec]] + (substr($3, 10) == "64" ? 4 : 0)", R_PPC_ADDR32, " ($5 != "" ? $5 "+0x" $7 : "__speelf__ + 0x" $4); \\\n'
                                              > <'\tprint "#endif"; \\\n'> <'\tif (!donedef) { print "#define HAS_RELOCS 1"; donedef = 1; }; \\\n'> 
                                              <'} \\\n'> <'$3 ~ /unrecognized:/ { \\\n'> <'\tprint "#ifdef _LP64"; \\\n'> 
                                              <
'\tprint " .reloc __speelf__+" strtonum ("0x" $1) + sec_off[rela[sec]] ", R_PPC64_ADDR" ($4 == "f" ? "64" : "32") ", " ($6 != "" ? $6 "+0x" $8 : "__speelf__ + 0x" $5); \\\n'
                                              > <'\tprint "#else"; \\\n'> 
                                              <
'\tprint " .reloc __speelf__+" strtonum ("0x" $1) + sec_off[rela[sec]] + ($4 == "f" ? 4 : 0)", R_PPC_ADDR32, " ($6 != "" ? $6 "+0x" $8 : "__speelf__ + 0x" $5); \\\n'
                                              > <'\tprint "#endif"; \\\n'> <'\tif (!donedef) { print "#define HAS_RELOCS 1"; donedef = 1; }; \\\n'> 
                                              <'} \\\n'>
                                            )
                                          }
                                        )
                                      ]
                                      negated: F
                                    )
                                  ]
                                )
                              ]
                            )
                          left_token: <Left_Backtick '`'>
                          spids: [1141 1218]
                        ) ('\n') ('#if ') 
                        (BracedVarSub
                          token: <VSub_Name has_ea>
                          suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(0)})
                          spids: [1221 1225]
                        ) ('\n') (' .section .data.speelf,') (Right_DoubleQuote '"') (aw) (Right_DoubleQuote '"') (',@progbits\n') 
                        (
'#elif defined (HAS_RELOCS) && (defined (__PIC__) || defined (__PIE__))\n'
                        ) (' .section .data.rel.ro.speelf,') (Right_DoubleQuote '"') (a) (Right_DoubleQuote '"') (',@progbits\n') 
                        ('#else\n') (' .section .rodata.speelf,') (Right_DoubleQuote '"') (a) (Right_DoubleQuote '"') (',@progbits\n') 
                        ('#endif\n') (' .p2align 7\n') ('__speelf__:\n') (' .incbin ') (Right_DoubleQuote '"') (${ VSub_Name INFILE) 
                        (Right_DoubleQuote '"') ('\n') ('\n') (' .section .data.spehandle,') (Right_DoubleQuote '"') (aw) (Right_DoubleQuote '"') 
                        (',@progbits\n') (' .globl ') (${ VSub_Name SYMBOL) ('\n') (' .type ') (${ VSub_Name SYMBOL) (', @object\n') 
                        ('# fill in a struct spe_program_handle\n') ('#ifdef _LP64\n') (' .p2align 3\n') (${ VSub_Name SYMBOL) (':\n') (' .int 24\n') (' .int 0\n') 
                        (' .quad __speelf__\n') (' .quad __spetoe__\n') ('#else\n') (' .p2align 2\n') (${ VSub_Name SYMBOL) (':\n') (' .int 12\n') 
                        (' .int __speelf__\n') (' .int __spetoe__\n') ('#endif\n') (' .size ') (${ VSub_Name SYMBOL) (', . - ') (${ VSub_Name SYMBOL) 
                        ('\n') ('\n') 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(${ VSub_Name READELF)} {(-s)} {(-W)} {(${ VSub_Name INFILE)})
                                    (C {(grep)} {(SQ <' _SPUEAR_'>)})
                                    (C {(sort)} {(-k)} {(2)})
                                    (C {(awk)} 
                                      {(SQ <'{ \\\n'> <'\tprint " .globl '>) (${ VSub_Name SYMBOL) 
                                        (SQ <'_" substr($8, 9); \\\n'> <'\tprint " .type '>) (${ VSub_Name SYMBOL) (SQ <'_" substr($8, 9) ", @object"; \\\n'> <'\tprint " .size '>) 
                                        (${ VSub_Name SYMBOL) (SQ <'_" substr($8, 9) ", 4"; \\\n'> <'\tprint "'>) (${ VSub_Name SYMBOL) 
                                        (SQ <'_" substr($8, 9) ":"; \\\n'> 
                                          <'\tprint " .int 0x" $2; \\\n'> <'} \\\n'>
                                        )
                                      }
                                    )
                                  ]
                                  negated: F
                                )
                              ]
                            )
                          left_token: <Left_Backtick '`'>
                          spids: [1301 1368]
                        ) ('\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1016]
                )
              ]
            )
          ]
          spids: [453]
        )
      spids: [448 452]
    )
    (C {(main)} {(DQ ($ VSub_At '$@'))})
  ]
)