Exemplo n.º 1
0
void kdb_show_sampling(void)
{
	int i;
	int symid;
	int *hitcount, *symid_list;
	static int init = 0;
	static struct kprobe k;

	if (init == 0) {
		dbg_printf(DL_KDB, "Init sampling...\n");
		sampling_init();
		sampling_enable();
		init++;

		k.addr = ktimer_handler;
		k.pre_handler = sampling_handler;
		k.post_handler = NULL;
		kprobe_register(&k);
		return;
	}

	sampling_disable();
	sampling_stats(&hitcount, &symid_list);

	for (i = 0; i < ksym_total(); i++) {
		symid = symid_list[i];
		if (hitcount[symid] == 0)
			break;
		dbg_printf(DL_KDB, "%5d [ %24s ]\n", hitcount[symid], 
				ksym_id2name(symid));
	}

	sampling_enable();
}
Exemplo n.º 2
0
static int __kretprobe_pre_handler(struct kprobe *kp, uint32_t *stack,
			   uint32_t *kp_regs)
{
	struct kretprobe * rp = (struct kretprobe *) kp;

	kprobe_unregister(kp);

	rp->backup_addr = kp->addr;
	kp->addr = (void *) stack[REG_LR];
	kp->pre_handler = rp->handler;
	kp->post_handler = __kretprobe_post_handler;

	kprobe_register(kp);
	return 0;
}
Exemplo n.º 3
0
int kretprobe_register(struct kretprobe *rp)
{
	rp->kp.pre_handler = __kretprobe_pre_handler;
	rp->kp.post_handler = NULL;
	return kprobe_register((struct kprobe *) rp);
}