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