/* * Save the return address when the return probe hits * the first time, and use it to populate the (krprobe * instance)->ret_addr for subsequent return probes at * the same addrress since stack address would have * the kretprobe_trampoline by then. */ if (((void*) *sara) != kretprobe_trampoline) orig_ret_addr = (void*) *sara; 
if ((ri = get_free_rp_inst(rp)) != NULL) { ri->rp = rp; ri->task = current; ri->ret_addr = (kprobe_opcode_t *) *sara; 
void arch_prepare_kretprobe(struct kretprobe *rp, struct pt_regs *regs){	unsigned long *sara = (unsigned long *)regs->rsp;	struct kretprobe_instance *ri;	static void *orig_ret_addr;	/*	 * Save the return address when the return probe hits	 * the first time, and use it to populate the (krprobe	 * instance)->ret_addr for subsequent return probes at	 * the same addrress since stack address would have	 * the kretprobe_trampoline by then.	 */	if (((void*) *sara) != kretprobe_trampoline)		orig_ret_addr = (void*) *sara;	if ((ri = get_free_rp_inst(rp)) != NULL) {		ri->rp = rp;		ri->stack_addr = sara;		ri->ret_addr = orig_ret_addr;		add_rp_inst(ri);		/* Replace the return addr with trampoline addr */		*sara = (unsigned long) &kretprobe_trampoline;	} else {		rp->nmissed++;	}}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/ba8af12f432c4f00ddb0bc1068b57b20aac93ecf/kprobes.c/clean/arch/x86_64/kernel/kprobes.c