Create a context-sensitive CFGNode instance for a specific block.

        :param SimSuccessors sim_successors:         The SimSuccessors object.
        :param CallStack call_stack_suffix:          The call stack.
        :param int func_addr:                        Address of the current function.
        :param BlockID block_id:                     The block ID of this CFGNode.
        :param int or None depth:                    Depth of this CFGNode.
        :return:                                     A CFGNode instance.
        :rtype:                                      CFGNode

def _create_cfgnode(self, sim_successors, call_stack, func_addr, block_id=None, depth=None, exception_info=None):
        """
        Create a context-sensitive CFGNode instance for a specific block.

        :param SimSuccessors sim_successors:         The SimSuccessors object.
        :param CallStack call_stack_suffix:          The call stack.
        :param int func_addr:                        Address of the current function.
        :param BlockID block_id:                     The block ID of this CFGNode.
        :param int or None depth:                    Depth of this CFGNode.
        :return:                                     A CFGNode instance.
        :rtype:                                      CFGNode
        """

        sa = sim_successors.artifacts  # shorthand

        # Determine if this is a SimProcedure, and further, if this is a syscall
        syscall = None
        is_syscall = False
        if sim_successors.sort == 'SimProcedure':
            is_simprocedure = True
            if sa['is_syscall'] is True:
                is_syscall = True
                syscall = sim_successors.artifacts['procedure']
        else:
            is_simprocedure = False

        if is_simprocedure:
            simproc_name = sa['name'].split('.')[-1]
            if simproc_name == "ReturnUnconstrained" and sa['resolves'] is not None:
                simproc_name = sa['resolves']

            no_ret = False
            if syscall is not None and sa['no_ret']:
                no_ret = True

            cfg_node = CFGENode(sim_successors.addr,
                                None,
                                self.model,
                                callstack_key=call_stack.stack_suffix(self.context_sensitivity_level),
                                input_state=None,
                                simprocedure_name=simproc_name,
                                syscall_name=syscall,
                                no_ret=no_ret,
                                is_syscall=is_syscall,
                                function_address=sim_successors.addr,
                                block_id=block_id,
                                depth=depth,
                                creation_failure_info=exception_info,
                                thumb=(isinstance(self.project.arch, ArchARM) and sim_successors.addr & 1),
                                )

        else:
            cfg_node = CFGENode(sim_successors.addr,
                                sa['irsb_size'],
                                self.model,
                                callstack_key=call_stack.stack_suffix(self.context_sensitivity_level),
                                input_state=None,
                                is_syscall=is_syscall,
                                function_address=func_addr,
                                block_id=block_id,
                                depth=depth,
                                irsb=sim_successors.artifacts['irsb'],
                                creation_failure_info=exception_info,
                                thumb=(isinstance(self.project.arch, ArchARM) and sim_successors.addr & 1),
                                )

        return cfg_node