docs: def call(self, addr, args, continue_at, cc=None):
          """
          Add an exit representing calling another function via pointer.
  
          :param addr:        The address of the function to call
          :param args:        The list of arguments to call the function with
          :param continue_at: Later, when the called function returns, execution of the current
                              procedure will continue in the named method.
          :param cc:          Optional: use this calling convention for calling the new function.
                              Default is to use the current convention.
          """
          self.inhibit_autoret = True
  
          if cc is None:
              cc = self.cc
  
          call_state = self.state.copy()
          ret_addr = self.make_continuation(continue_at)
          saved_local_vars = list(zip(self.local_vars, map(lambda name: getattr(self, name), self.local_vars)))
          simcallstack_entry = (self.state.regs.sp if hasattr(self.state.regs, "sp") else None,
                                self.arguments,
                                saved_local_vars,
                                self.state.regs.lr if self.state.arch.lr_offset is not None else None)
          cc.setup_callsite(call_state, ret_addr, args)
          call_state.callstack.top.procedure_data = simcallstack_entry
  
          # TODO: Move this to setup_callsite?
          if isinstance(call_state.addr, SootAddressDescriptor):
              pass
          elif call_state.libc.ppc64_abiv == 'ppc64_1':
              call_state.regs.r2 = self.state.mem[addr + 8:].long.resolved
              addr = call_state.mem[addr:].long.resolved
          elif call_state.arch.name in ('MIPS32', 'MIPS64'):
              call_state.regs.t9 = addr
  
          self._exit_action(call_state, addr)
          self.successors.add_successor(call_state, addr, call_state.solver.true, 'Ijk_Call')
  
          if o.DO_RET_EMULATION in self.state.options:
              # we need to set up the call because the continuation will try to tear it down
              ret_state = self.state.copy()
              cc.setup_callsite(ret_state, ret_addr, args)
              ret_state.callstack.top.procedure_data = simcallstack_entry
              guard = ret_state.solver.true if o.TRUE_RET_EMULATION_GUARD in ret_state.options else ret_state.solver.false
              self.successors.add_successor(ret_state, ret_addr, guard, 'Ijk_FakeRet')