VOID fn_ret(CONTEXT *ctxt, UINT32 fid) { trace_enter(); counter += 1; if (!call_stack.is_top_forgotten()) { while (is_jump_stack.top()) { FID fid = call_stack.top(); if (is_instrumented[fid]) { param_t *new_ret = (param_t *) malloc(sizeof(param_t)); new_ret->fid = fid; new_ret->counter = counter; new_ret->val = val_from_reg(ctxt, 0); new_ret->is_addr = param_addr[fid][0]; param_out->push_front(new_ret); } call_stack.pop(); is_jump_stack.pop(); } FID fid = call_stack.top(); if (is_instrumented[fid]) { param_t *new_ret = (param_t *) malloc(sizeof(param_t)); new_ret->fid = fid; new_ret->counter = counter; new_ret->val = val_from_reg(ctxt, 0); new_ret->is_addr = param_addr[fid][0]; param_out->push_front(new_ret); } call_stack.pop(); is_jump_stack.pop(); } trace_leave(); return; }
VOID fn_ret(CONTEXT *ctxt) { trace_enter(); if (!call_stack.is_top_forgotten()) { FID fid = call_stack.top(); if (has_return[fid] == 1) { add_val(fid, ctxt, 0, 0); } } call_stack.pop(); sp_stack.pop(); trace_leave(); }