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; }