(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:exec_text_addr)
          op: assign_op.Equal
          rhs: {(0x0)}
          spids: [20]
        )
      ]
    )
    (command.ShFunction
      name: obj_load_addrs
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (command.Simple
                  words: [
                    {(setarch)}
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:37)
                        command_list: (command.CommandList children:[(C {(uname)} {(-m)})])
                      )
                    }
                    {(-R)}
                    {(sh)}
                    {(-c)}
                    {(SQ (Token id:Id.Lit_Chars val:'LD_TRACE_LOADED_OBJECTS=1 ' span_id:52)) 
                      (DQ ($ Id.VSub_Number '$1'))
                    }
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:58)
                      fd: 2
                      arg_word: {(1)}
                    )
                  ]
                )
                (C {(grep)} {(SQ (Token id:Id.Lit_Chars val:'=>' span_id:68))})
                (C {(grep)} {(-v)} {(SQ (Token id:Id.Lit_Chars val:linux-vdso span_id:78))})
                (C {(grep)} {(-v)} {(SQ (Token id:Id.Lit_Chars val:'not found' span_id:88))})
                (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s/.*=> //' span_id:98))})
                (C {(tr)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'()' span_id:108))})
                (C {(tr)} {(-s)} {(SQ (Token id:Id.Lit_Chars val:'[:blank:]' span_id:120))} 
                  {(SQ (Token id:Id.Lit_Chars val:'\\t' span_id:124))}
                )
              ]
              negated: F
            )
            (C {(/bin/echo)} {(-n)} 
              {
                (DQ 
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:133)
                    command_list: 
                      (command.CommandList
                        children: [(C {(readlink)} {(-f)} {(DQ ($ Id.VSub_Number '$1'))})]
                      )
                  )
                )
              }
            )
            (C {(/bin/echo)} {(-e)} 
              {(SQ (Token id:Id.Lit_Chars val:'\\t' span_id:152)) 
                (DQ (${ Id.VSub_Name exec_text_addr))
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: mangle_objname
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(echo)} {(DQ ($ Id.VSub_Number '$1'))})
                (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'/ .-' span_id:186))} 
                  {(SQ (Token id:Id.Lit_Chars val:_ span_id:190))}
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: hex_to_dec
      body: 
        (command.BraceGroup
          children: [
            (C {(printf)} {(DQ ('%d'))} 
              {
                (command_sub
                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:213)
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.Pipeline
                          children: [
                            (C {(echo)} {(DQ ($ Id.VSub_Number '$1'))})
                            (C {(sed)} 
                              {(SQ (Token id:Id.Lit_Chars val:'s/^[^0][^xX].*/0x&/' span_id:226))}
                            )
                          ]
                          negated: F
                        )
                      ]
                    )
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: obj_load_addrs_as_cpp_macros
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(obj_load_addrs)} {(DQ ($ Id.VSub_Number '$1'))})
                (C {(sort)})
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:286)
                  cond: [
                    (command.Sentence
                      child: (C {(read)} {(obj)} {(base)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:293)
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (C {(echo)} 
                          {
                            (DQ (-D__LOAD_ADDR_) 
                              (command_sub
                                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:311)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(mangle_objname)} {(DQ (${ Id.VSub_Name obj))})
                                          (C {(tr)} 
                                            {(SQ (Token id:Id.Lit_Chars val:'[a-z]' span_id:326))} {(SQ (Token id:Id.Lit_Chars val:'[A-Z]' span_id:330))}
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            ) (Id.Lit_Equals '=') (DQ (${ Id.VSub_Name base) (ULL))
                          }
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:min_obj_load_addr)
                              op: assign_op.Equal
                              rhs: {(0x2aaa00000000)}
                              spids: [348]
                            )
                          ]
                        )
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (command.AndOr
                                      ops: [Id.Op_DAmp]
                                      children: [
                                        (C {(Id.Lit_LBracket '[')} 
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_DollarParen
                                                  val: '$('
                                                  span_id: 356
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (C {(hex_to_dec)} {($ Id.VSub_DollarName '$base')})
                                                  ]
                                                )
                                            )
                                          } {(-lt)} 
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_DollarParen
                                                  val: '$('
                                                  span_id: 366
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (C {(hex_to_dec)} 
                                                      {($ Id.VSub_DollarName '$min_obj_load_addr')}
                                                    )
                                                  ]
                                                )
                                            )
                                          } {(Id.Lit_RBracket ']')}
                                        )
                                        (command.Pipeline
                                          children: [
                                            (C {(Id.Lit_LBracket '[')} 
                                              {
                                                (command_sub
                                                  left_token: 
                                                    (Token
                                                      id: Id.Left_DollarParen
                                                      val: '$('
                                                      span_id: 382
                                                    )
                                                  command_list: 
                                                    (command.CommandList
                                                      children: [
                                                        (C {(hex_to_dec)} 
                                                          {($ Id.VSub_DollarName '$base')}
                                                        )
                                                      ]
                                                    )
                                                )
                                              } {(-eq)} 
                                              {
                                                (command_sub
                                                  left_token: 
                                                    (Token
                                                      id: Id.Left_DollarParen
                                                      val: '$('
                                                      span_id: 392
                                                    )
                                                  command_list: 
                                                    (command.CommandList
                                                      children: [
                                                        (C {(hex_to_dec)} 
                                                          {(${ Id.VSub_Name exec_text_addr)}
                                                        )
                                                      ]
                                                    )
                                                )
                                              } {(Id.Lit_RBracket ']')}
                                            )
                                          ]
                                          negated: T
                                        )
                                      ]
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:403)
                                )
                              ]
                              action: [
                                (command.Simple
                                  words: [
                                    {(echo)}
                                    {
                                      (DQ ('Warning: library ') ($ Id.VSub_DollarName '$obj') 
                                        (' has a load address ') ($ Id.VSub_DollarName '$base') (' less than the assumed minimum ') 
                                        ($ Id.VSub_DollarName '$min_obj_load_addr')
                                      )
                                    }
                                  ]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:419)
                                      fd: 1
                                      arg_word: {(2)}
                                    )
                                  ]
                                )
                              ]
                              spids: [352 405]
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
              negated: F
            )
          ]
        )
    )
  ]
)