'A PendingJob is whatever will be put into our pending_exit list. A pending exit is an entry that created by the
returning of a call or syscall. It is "pending" since we cannot immediately figure out whether this entry will
be executed or not. If the corresponding call/syscall intentially doesn\'t return, then the pending exit will be
removed. If the corresponding call/syscall returns, then the pending exit will be removed as well (since a real
entry is created from the returning and will be analyzed later). If the corresponding call/syscall might
return, but for some reason (for example, an unsupported instruction is met during the analysis) our analysis
does not return properly, then the pending exit will be picked up and put into remaining_jobs list.
:param returning_source:    Address of the callee function. It might be None if address of the callee is not
resolvable.
:param state:               The state after returning from the callee function. Of course there is no way to get
a precise state without emulating the execution of the callee, but at least we can
properly adjust the stack and registers to imitate the real returned state.
:param call_stack:          A callstack.'

def __init__(self, caller_func_addr, returning_source, state, src_block_id, src_exit_stmt_idx, src_exit_ins_addr, call_stack):

    self.caller_func_addr = caller_func_addr
    self.returning_source = returning_source
    self.state = state
    self.src_block_id = src_block_id
    self.src_exit_stmt_idx = src_exit_stmt_idx
    self.src_exit_ins_addr = src_exit_ins_addr
    self.call_stack = call_stack
