--- /dev/null
+/* -*- linux-c -*- */
+
+/** Create a new map.
+ * Maps must be created at module initialization time.
+ * @param max_entries The maximum number of entries allowed. Currently that
+ * will be allocated dynamically.
+ * @param type Type of values stored in this map.
+ * @return A MAP on success or NULL on failure.
+ */
+
+
+static unsigned long (*_stp_lookup_name)(char *name)=(void *)KALLSYMS_LOOKUP_NAME;
+
+void _stp_unregister_jprobes (struct jprobe *probes, int num_probes)
+{
+ int i;
+ for (i = 0; i < num_probes; i++)
+ unregister_jprobe(&probes[i]);
+ dlog ("All jprobes removed\n");
+}
+
+int _stp_register_jprobes (struct jprobe *probes, int num_probes)
+{
+ int i, ret ;
+ unsigned long addr;
+
+ for (i = 0; i < num_probes; i++) {
+ addr =_stp_lookup_name((char *)probes[i].kp.addr);
+ if (addr == 0) {
+ dlog ("ERROR: function %s not found!\n",
+ (char *)probes[i].kp.addr);
+ ret = -1; /* FIXME */
+ goto out;
+ }
+ dlog("inserting jprobe at %s (%p)\n", probes[i].kp.addr, addr);
+ probes[i].kp.addr = (kprobe_opcode_t *)addr;
+ ret = register_jprobe(&probes[i]);
+ if (ret)
+ goto out;
+ }
+ return 0;
+out:
+ dlog ("probe module initialization failed. Exiting...\n");
+ _stp_unregister_jprobes(probes, i);
+ return ret;
+}
+
+void _stp_unregister_kprobes (struct kprobe *probes, int num_probes)
+{
+ int i;
+ for (i = 0; i < num_probes; i++)
+ unregister_kprobe(&probes[i]);
+ dlog ("All kprobes removed\n");
+}
+
+int _stp_register_kprobes (struct kprobe *probes, int num_probes)
+{
+ int i, ret ;
+ unsigned long addr;
+
+ for (i = 0; i < num_probes; i++) {
+ addr =_stp_lookup_name((char *)probes[i].addr);
+ if (addr == 0) {
+ dlog ("ERROR: function %s not found!\n",
+ (char *)probes[i].addr);
+ ret = -1; /* FIXME */
+ goto out;
+ }
+ dlog("inserting kprobe at %s (%p)\n", probes[i].addr, addr);
+ probes[i].addr = (kprobe_opcode_t *)addr;
+ ret = register_kprobe(&probes[i]);
+ if (ret)
+ goto out;
+ }
+ return 0;
+out:
+ dlog ("probe module initialization failed. Exiting...\n");
+ _stp_unregister_kprobes(probes, i);
+ return ret;
+}
+