(command.CommandList
  children: [
    (command.ShFunction
      name: log_error_and_exit
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} {($ Id.VSub_Number '$0') (Id.Lit_Other ':')} {($ Id.VSub_At '$@')})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:44)
              arg_word: {(1)}
            )
          ]
        )
    )
    (command.ShFunction
      name: process_entry
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_Number '$1'))} 
                              {(Id.Lit_RBracket ']')}
                            )
                            (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_Number '$2'))} 
                              {(Id.Lit_RBracket ']')}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:81)
                    )
                  ]
                  action: [(C {(log_error_and_exit)} {(DQ ('bad arguments to process_entry()'))})]
                  spids: [58 83]
                )
              ]
            )
            (C {(local)} {(Id.Lit_VarLike 'root=') (DQ ($ Id.VSub_Number '$1'))})
            (C {(local)} {(Id.Lit_VarLike 'localpath=') (DQ ($ Id.VSub_Number '$2'))})
            (command.Pipeline
              children: [
                (C {(echo)} {($ Id.VSub_DollarName '$localpath')})
                (C {(grep)} {(-qs)} {(SQ (Token id:Id.Lit_Chars val:'^/' span_id:124))})
              ]
              negated: F
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-ne)} {(0)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:139)
                    )
                  ]
                  action: [
                    (C {(log_error_and_exit)} {($ Id.VSub_DollarName '$localpath')} {(does)} {(not)} 
                      {(start)} {(with)} {(/)}
                    )
                  ]
                  spids: [128 141]
                )
              ]
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'entry=') 
                (DQ ($ Id.VSub_DollarName '$root') ($ Id.VSub_DollarName '$localpath'))
              }
            )
            (C {(echo)} {(-L) ($ Id.VSub_DollarName '$entry')})
            (C {(echo)} 
              {(-Wl) (Id.Lit_Comma ',') (-rpath-link) (Id.Lit_Equals '=') 
                ($ Id.VSub_DollarName '$entry')
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: process_ld_so_conf
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_Number '$1'))} 
                              {(Id.Lit_RBracket ']')}
                            )
                            (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_Number '$2'))} 
                              {(Id.Lit_RBracket ']')}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:218)
                    )
                  ]
                  action: [(C {(log_error_and_exit)} {(DQ ('bad arguments to process_ld_so_conf()'))})]
                  spids: [195 220]
                )
              ]
            )
            (C {(local)} {(Id.Lit_VarLike 'root=') (DQ ($ Id.VSub_Number '$1'))})
            (C {(local)} {(Id.Lit_VarLike 'ld_so_conf=') (DQ ($ Id.VSub_Number '$2'))})
            (C {(local)} 
              {(Id.Lit_VarLike 'saved_pwd=') 
                (command_sub
                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:257)
                  command_list: (command.CommandList children:[(C {(pwd)})])
                )
              }
            )
            (C {(cd)} 
              {
                (command_sub
                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:264)
                  command_list: 
                    (command.CommandList
                      children: [(C {(dirname)} {(DQ ($ Id.VSub_DollarName '$ld_so_conf'))})]
                    )
                )
              }
            )
            (command.Pipeline
              children: [
                (C {(cat)} {(DQ ($ Id.VSub_DollarName '$ld_so_conf'))})
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:284)
                  cond: [
                    (command.Sentence
                      child: (C {(read)} {(ENTRY)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:289)
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.Pipeline
                          children: [
                            (C {(echo)} {(DQ ($ Id.VSub_DollarName '$ENTRY'))})
                            (C {(grep)} {(-qs)} {(Id.Lit_Other '^') (include)})
                          ]
                          negated: F
                        )
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-eq)} {(0)} 
                                      {(Id.Lit_RBracket ']')}
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:321)
                                )
                              ]
                              action: [
                                (C {(local)} 
                                  {(Id.Lit_VarLike 'included_files=') 
                                    (command_sub
                                      left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:329)
                                      command_list: 
                                        (command.CommandList
                                          children: [
                                            (command.Pipeline
                                              children: [
                                                (C {(echo)} {(DQ ($ Id.VSub_DollarName '$ENTRY'))})
                                                (C {(sed)} 
                                                  {
                                                    (SQ 
                                                      (Token
                                                        id: Id.Lit_Chars
                                                        val: 's/^include //'
                                                        span_id: 341
                                                      )
                                                    )
                                                  }
                                                )
                                              ]
                                              negated: F
                                            )
                                          ]
                                        )
                                    )
                                  }
                                )
                                (command.Pipeline
                                  children: [
                                    (C {(echo)} {(DQ ($ Id.VSub_DollarName '$included_files'))})
                                    (C {(grep)} {(-qs)} {(Id.Lit_Other '^') (/)})
                                  ]
                                  negated: F
                                )
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-eq)} 
                                              {(0)} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:373)
                                        )
                                      ]
                                      action: [
                                        (command.If
                                          arms: [
                                            (if_arm
                                              cond: [
                                                (command.Sentence
                                                  child: 
                                                    (command.Simple
                                                      words: [
                                                        {(ls)}
                                                        {($ Id.VSub_DollarName '$root') 
                                                          ($ Id.VSub_DollarName '$included_files')
                                                        }
                                                      ]
                                                      redirects: [
                                                        (redir.Redir
                                                          op: 
                                                            (Token
                                                              id: Id.Redir_Great
                                                              val: '>'
                                                              span_id: 385
                                                            )
                                                          fd: -1
                                                          arg_word: {(/dev/null)}
                                                        )
                                                        (redir.Redir
                                                          op: 
                                                            (Token
                                                              id: Id.Redir_GreatAnd
                                                              val: '2>&'
                                                              span_id: 388
                                                            )
                                                          fd: 2
                                                          arg_word: {(1)}
                                                        )
                                                      ]
                                                    )
                                                  terminator: 
                                                    (Token
                                                      id: Id.Op_Semi
                                                      val: ';'
                                                      span_id: 391
                                                    )
                                                )
                                              ]
                                              action: [
                                                (command.ForEach
                                                  iter_name: inc_file
                                                  iter_words: [
                                                    {($ Id.VSub_DollarName '$root') 
                                                      ($ Id.VSub_DollarName '$included_files')
                                                    }
                                                  ]
                                                  do_arg_iter: F
                                                  body: 
                                                    (command.DoGroup
                                                      children: [
                                                        (C {(process_ld_so_conf)} 
                                                          {(DQ ($ Id.VSub_DollarName '$root'))} {(DQ ($ Id.VSub_DollarName '$inc_file'))}
                                                        )
                                                      ]
                                                    )
                                                )
                                              ]
                                              spids: [378 393]
                                            )
                                          ]
                                        )
                                      ]
                                      spids: [362 375]
                                    )
                                  ]
                                  else_action: [
                                    (command.If
                                      arms: [
                                        (if_arm
                                          cond: [
                                            (command.Sentence
                                              child: 
                                                (command.Simple
                                                  words: [
                                                    {(ls)}
                                                    {
                                                      (command_sub
                                                        left_token: 
                                                          (Token
                                                            id: Id.Left_DollarParen
                                                            val: '$('
                                                            span_id: 433
                                                          )
                                                        command_list: 
                                                          (command.CommandList
                                                            children: [(C {(pwd)})]
                                                          )
                                                      ) (/) ($ Id.VSub_DollarName '$included_files')
                                                    }
                                                  ]
                                                  redirects: [
                                                    (redir.Redir
                                                      op: 
                                                        (Token
                                                          id: Id.Redir_Great
                                                          val: '>'
                                                          span_id: 439
                                                        )
                                                      fd: -1
                                                      arg_word: {(/dev/null)}
                                                    )
                                                    (redir.Redir
                                                      op: 
                                                        (Token
                                                          id: Id.Redir_GreatAnd
                                                          val: '2>&'
                                                          span_id: 442
                                                        )
                                                      fd: 2
                                                      arg_word: {(1)}
                                                    )
                                                  ]
                                                )
                                              terminator: (Token id:Id.Op_Semi val:';' span_id:445)
                                            )
                                          ]
                                          action: [
                                            (command.ForEach
                                              iter_name: inc_file
                                              iter_words: [
                                                {
                                                  (command_sub
                                                    left_token: 
                                                      (Token
                                                        id: Id.Left_DollarParen
                                                        val: '$('
                                                        span_id: 456
                                                      )
                                                    command_list: 
                                                      (command.CommandList
                                                        children: [(C {(pwd)})]
                                                      )
                                                  ) (/) ($ Id.VSub_DollarName '$included_files')
                                                }
                                              ]
                                              do_arg_iter: F
                                              body: 
                                                (command.DoGroup
                                                  children: [
                                                    (C {(process_ld_so_conf)} 
                                                      {(DQ ($ Id.VSub_DollarName '$root'))} {(DQ ($ Id.VSub_DollarName '$inc_file'))}
                                                    )
                                                  ]
                                                )
                                            )
                                          ]
                                          spids: [429 447]
                                        )
                                      ]
                                    )
                                  ]
                                )
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Continue val:continue span_id:486)
                                )
                              ]
                              spids: [310 323]
                            )
                          ]
                        )
                        (command.Pipeline
                          children: [
                            (C {(echo)} {(DQ ($ Id.VSub_DollarName '$ENTRY'))})
                            (C {(grep)} {(-qs)} {(Id.Lit_Other '^') (/)})
                          ]
                          negated: F
                        )
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-eq)} {(0)} 
                                      {(Id.Lit_RBracket ']')}
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:520)
                                )
                              ]
                              action: [
                                (C {(process_entry)} {(DQ ($ Id.VSub_DollarName '$root'))} 
                                  {(DQ ($ Id.VSub_DollarName '$ENTRY'))}
                                )
                              ]
                              spids: [509 522]
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
              negated: F
            )
            (C {(cd)} {(DQ ($ Id.VSub_DollarName '$saved_pwd'))})
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-ne)} {(1)} {(Id.Lit_RBracket ']')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:571)
            )
          ]
          action: [
            (C {(echo)} {(Usage)} {($ Id.VSub_Number '$0')} {(/abspath/to/sysroot)})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:585)
              arg_word: {(1)}
            )
          ]
          spids: [560 573]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {(echo)} {($ Id.VSub_Number '$1')})
        (C {(grep)} {(-qs)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:603))})
      ]
      negated: F
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-eq)} {(0)} {(Id.Lit_RBracket ']')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:617)
            )
          ]
          action: [(C {(log_error_and_exit)} {($ Id.VSub_Number '$1')} {(contains)} {(whitespace.)})]
          spids: [606 619]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LD_SO_CONF)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_Number '$1') (/etc/ld.so.conf))}
          spids: [633]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LD_SO_CONF_D)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_Number '$1') (/etc/ld.so.conf.d))}
          spids: [639]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(-e)} {(DQ ($ Id.VSub_DollarName '$LD_SO_CONF'))} 
                  {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:657)
            )
          ]
          action: [
            (command.Pipeline
              children: [
                (C {(process_ld_so_conf)} {(DQ ($ Id.VSub_Number '$1'))} 
                  {(DQ ($ Id.VSub_DollarName '$LD_SO_CONF'))}
                )
                (C {(xargs)} {(echo)})
              ]
              negated: F
            )
          ]
          spids: [646 659]
        )
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(-e)} {(DQ ($ Id.VSub_DollarName '$LD_SO_CONF_D'))} 
                  {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:689)
            )
          ]
          action: [
            (command.Simple
              words: [
                {(find)}
                {(DQ ($ Id.VSub_DollarName '$LD_SO_CONF_D'))}
                {(-maxdepth)}
                {(1)}
                {(-name)}
                {(SQ (Token id:Id.Lit_Chars val:'*.conf' span_id:707))}
                {(-print)}
                {(-quit)}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:714)
                  fd: -1
                  arg_word: {(/dev/null)}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-eq)} {(0)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:730)
                    )
                  ]
                  action: [
                    (command.Pipeline
                      children: [
                        (command.ForEach
                          iter_name: entry
                          iter_words: [
                            {($ Id.VSub_DollarName '$LD_SO_CONF_D') (/) (Id.Lit_Star '*') (.conf)}
                          ]
                          do_arg_iter: F
                          body: 
                            (command.DoGroup
                              children: [
                                (C {(process_ld_so_conf)} {(DQ ($ Id.VSub_Number '$1'))} 
                                  {(DQ ($ Id.VSub_DollarName '$entry'))}
                                )
                              ]
                            )
                        )
                        (C {(xargs)} {(echo)})
                      ]
                      negated: F
                    )
                  ]
                  spids: [719 732]
                )
              ]
            )
          ]
          spids: [678 691]
        )
      ]
    )
  ]
)