(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: 
        (BraceGroup
          children: [
            (command.Pipeline
              children: [
                (command.Simple
                  words: [
                    {<setarch>}
                    {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<uname>} {<-m>}))}
                    {<-R>}
                    {<sh>}
                    {<-c>}
                    {(SQ <'LD_TRACE_LOADED_OBJECTS=1 '>) (DQ ($ Id.VSub_Number '$1'))}
                  ]
                  redirects: [(redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})]
                  do_fork: T
                )
                (C {<grep>} {(SQ <'=>'>)})
                (C {<grep>} {<-v>} {(SQ <linux-vdso>)})
                (C {<grep>} {<-v>} {(SQ <'not found'>)})
                (C {<sed>} {(SQ <'s/.*=> //'>)})
                (C {<tr>} {<-d>} {(SQ <'()'>)})
                (C {<tr>} {<-s>} {(SQ <'[:blank:]'>)} {(SQ <'\\t'>)})
              ]
              negated: F
            )
            (C {<'/bin/echo'>} {<-n>} 
              {
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    child: (C {<readlink>} {<-f>} {(DQ ($ Id.VSub_Number '$1'))})
                  )
                )
              }
            )
            (C {<'/bin/echo'>} {<-e>} {(SQ <'\\t'>) (DQ (${ Id.VSub_Name exec_text_addr))})
          ]
        )
    )
    (command.ShFunction
      name: mangle_objname
      body: 
        (BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {<echo>} {(DQ ($ Id.VSub_Number '$1'))})
                (C {<tr>} {(SQ <'/ .-'>)} {(SQ <_>)})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: hex_to_dec
      body: 
        (BraceGroup
          children: [
            (C {<printf>} {(DQ <'%d'>)} 
              {
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Pipeline
                      children: [
                        (C {<echo>} {(DQ ($ Id.VSub_Number '$1'))})
                        (C {<sed>} {(SQ <'s/^[^0][^xX].*/0x&/'>)})
                      ]
                      negated: F
                    )
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: obj_load_addrs_as_cpp_macros
      body: 
        (BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {<obj_load_addrs>} {(DQ ($ Id.VSub_Number '$1'))})
                (C {<sort>})
                (command.WhileUntil
                  keyword: <Id.KW_While while>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: (C {<read>} {<obj>} {<base>})
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  body: 
                    (command.DoGroup
                      children: [
                        (C {<echo>} 
                          {
                            (DQ <-D__LOAD_ADDR_> 
                              (command_sub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Pipeline
                                    children: [
                                      (C {<mangle_objname>} {(DQ (${ Id.VSub_Name obj))})
                                      (C {<tr>} {(SQ <'[a-z]'>)} {(SQ <'[A-Z]'>)})
                                    ]
                                    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: 
                                (condition.Shell
                                  commands: [
                                    (command.Sentence
                                      child: 
                                        (command.AndOr
                                          ops: [Id.Op_DAmp]
                                          children: [
                                            (C {<Id.Lit_LBracket '['>} 
                                              {
                                                (command_sub
                                                  left_token: <Id.Left_DollarParen '$('>
                                                  child: 
                                                    (C {<hex_to_dec>} {($ Id.VSub_DollarName '$base')})
                                                )
                                              } {<-lt>} 
                                              {
                                                (command_sub
                                                  left_token: <Id.Left_DollarParen '$('>
                                                  child: 
                                                    (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: <Id.Left_DollarParen '$('>
                                                      child: 
                                                        (C {<hex_to_dec>} 
                                                          {($ Id.VSub_DollarName '$base')}
                                                        )
                                                    )
                                                  } {<-eq>} 
                                                  {
                                                    (command_sub
                                                      left_token: <Id.Left_DollarParen '$('>
                                                      child: 
                                                        (C {<hex_to_dec>} 
                                                          {(${ Id.VSub_Name exec_text_addr)}
                                                        )
                                                    )
                                                  } {<Id.Lit_RBracket ']'>}
                                                )
                                              ]
                                              negated: T
                                            )
                                          ]
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                  ]
                                )
                              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
                                      op: <Id.Redir_GreatAnd '1>&'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<2>}
                                    )
                                  ]
                                  do_fork: T
                                )
                              ]
                              spids: [352 405]
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
              negated: F
            )
          ]
        )
    )
  ]
)