code: def syscall(self, state, allow_unsupported=True):
          
          abi = self.syscall_abi(state)
  
          if state.os_name in SYSCALL_CC[state.arch.name]:
              cc = SYSCALL_CC[state.arch.name][state.os_name](state.arch)
          else:
              # Use the default syscall calling convention - it may bring problems
              _l.warning("No syscall calling convention available for %s/%s", state.arch.name, state.os_name)
              cc = SYSCALL_CC[state.arch.name]['default'](state.arch)
  
          sym_num = cc.syscall_num(state)
          try:
              num = state.solver.eval_one(sym_num)
          except SimSolverError:
              if allow_unsupported:
                  num = self.unknown_syscall_number
              else:
                  if not state.solver.satisfiable():
                      raise AngrUnsupportedSyscallError("The program state is not satisfiable")
                  else:
                      raise AngrUnsupportedSyscallError("Got a symbolic syscall number")
  
          proc = self.syscall_from_number(num, allow_unsupported=allow_unsupported, abi=abi)
          proc.cc = cc
          return proc
docs: Given a state, return the procedure corresponding to the current syscall.
          This procedure will have .syscall_number, .display_name, and .addr set.
  
          :param state:               The state to get the syscall number from
          :param allow_unsupported:   Whether to return a "dummy" sycall instead of raising an unsupported exception