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