'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'

def syscall(self, state, allow_unsupported=True):

    if (state.os_name in SYSCALL_CC[state.arch.name]):
        cc = SYSCALL_CC[state.arch.name][state.os_name](state.arch)
    else:
        cc = SYSCALL_CC[state.arch.name]['default'](state.arch)
    sym_num = cc.syscall_num(state)
    possible = state.se.any_n_int(sym_num, 2)
    if (len(possible) == 0):
        raise AngrUnsupportedSyscallError('The    program    state    is    not    satisfiable')
    elif (len(possible) == 1):
        num = possible[0]
    elif allow_unsupported:
        num = ((self.syscall_library.maximum_syscall_number(self.arch.name) + 1) if self.syscall_library else 0)
    else:
        raise AngrUnsupportedSyscallError('Got    a    symbolic    syscall    number')
    proc = self.syscall_from_number(num, allow_unsupported=allow_unsupported)
    proc.cc = cc
    return proc
