00001
00002
00012 static unsigned long (*_stp_lookup_name)(char *name)=(void *)KALLSYMS_LOOKUP_NAME;
00013
00014 void _stp_unregister_jprobes (struct jprobe *probes, int num_probes)
00015 {
00016 int i;
00017 for (i = 0; i < num_probes; i++)
00018 unregister_jprobe(&probes[i]);
00019 dlog ("All jprobes removed\n");
00020 }
00021
00022 int _stp_register_jprobes (struct jprobe *probes, int num_probes)
00023 {
00024 int i, ret ;
00025 unsigned long addr;
00026
00027 for (i = 0; i < num_probes; i++) {
00028 addr =_stp_lookup_name((char *)probes[i].kp.addr);
00029 if (addr == 0) {
00030 dlog ("ERROR: function %s not found!\n",
00031 (char *)probes[i].kp.addr);
00032 ret = -1;
00033 goto out;
00034 }
00035 dlog("inserting jprobe at %s (%p)\n", probes[i].kp.addr, addr);
00036 probes[i].kp.addr = (kprobe_opcode_t *)addr;
00037 ret = register_jprobe(&probes[i]);
00038 if (ret)
00039 goto out;
00040 }
00041 return 0;
00042 out:
00043 dlog ("probe module initialization failed. Exiting...\n");
00044 _stp_unregister_jprobes(probes, i);
00045 return ret;
00046 }
00047
00048 void _stp_unregister_kprobes (struct kprobe *probes, int num_probes)
00049 {
00050 int i;
00051 for (i = 0; i < num_probes; i++)
00052 unregister_kprobe(&probes[i]);
00053 dlog ("All kprobes removed\n");
00054 }
00055
00056 int _stp_register_kprobes (struct kprobe *probes, int num_probes)
00057 {
00058 int i, ret ;
00059 unsigned long addr;
00060
00061 for (i = 0; i < num_probes; i++) {
00062 addr =_stp_lookup_name((char *)probes[i].addr);
00063 if (addr == 0) {
00064 dlog ("ERROR: function %s not found!\n",
00065 (char *)probes[i].addr);
00066 ret = -1;
00067 goto out;
00068 }
00069 dlog("inserting kprobe at %s (%p)\n", probes[i].addr, addr);
00070 probes[i].addr = (kprobe_opcode_t *)addr;
00071 ret = register_kprobe(&probes[i]);
00072 if (ret)
00073 goto out;
00074 }
00075 return 0;
00076 out:
00077 dlog ("probe module initialization failed. Exiting...\n");
00078 _stp_unregister_kprobes(probes, i);
00079 return ret;
00080 }
00081