]> sourceware.org Git - systemtap.git/commitdiff
Really old kprobes didn't have a symbol_name field, autoconf it.
authorMark Wielaard <mjw@redhat.com>
Wed, 17 Aug 2011 17:13:24 +0000 (19:13 +0200)
committerMark Wielaard <mjw@redhat.com>
Wed, 17 Aug 2011 17:16:30 +0000 (19:16 +0200)
kprobes on addresses do just work and can now be build.
symbol_named kprobes now get a registration warning if the
symbol_name field isn't available.

buildrun.cxx
runtime/autoconf-kprobe-symbol-name.c [new file with mode: 0644]
tapsets.cxx

index bcb3949bdfe707d4d3d79c7010b077dfd41e3819..60c7741290df97942abdebe7eb85d62d0d7566f9 100644 (file)
@@ -207,6 +207,7 @@ compile_pass (systemtap_session& s)
   output_autoconf(s, o, "autoconf-x86-uniregs.c", "STAPCONF_X86_UNIREGS", NULL);
   output_autoconf(s, o, "autoconf-nameidata.c", "STAPCONF_NAMEIDATA_CLEANUP", NULL);
   output_autoconf(s, o, "autoconf-unregister-kprobes.c", "STAPCONF_UNREGISTER_KPROBES", NULL);
+  output_autoconf(s, o, "autoconf-kprobe-symbol-name.c", "STAPCONF_KPROBE_SYMBOL_NAME", NULL);
   output_autoconf(s, o, "autoconf-real-parent.c", "STAPCONF_REAL_PARENT", NULL);
   output_autoconf(s, o, "autoconf-uaccess.c", "STAPCONF_LINUX_UACCESS_H", NULL);
   output_autoconf(s, o, "autoconf-oneachcpu-retry.c", "STAPCONF_ONEACHCPU_RETRY", NULL);
diff --git a/runtime/autoconf-kprobe-symbol-name.c b/runtime/autoconf-kprobe-symbol-name.c
new file mode 100644 (file)
index 0000000..eeb3f84
--- /dev/null
@@ -0,0 +1,6 @@
+#include <linux/kprobes.h>
+
+void func(struct kprobe *kp)
+{
+  kp->symbol_name = "dummy";
+}
index 094aca12834525b7883023249865fdd7b642f75f..cfb8fa1f436598db7b590ac12217994adf8f42d7 100644 (file)
@@ -7428,7 +7428,9 @@ kprobe_derived_probe_group::emit_module_init (systemtap_session& s)
   s.op->newline() << "probe_point = sdp->probe->pp;"; // for error messages
   s.op->newline() << "if (sdp->return_p) {";
   s.op->newline(1) << "kp->u.krp.kp.addr = addr;";
+  s.op->newline() << "#ifdef STAPCONF_KPROBE_SYMBOL_NAME";
   s.op->newline() << "kp->u.krp.kp.symbol_name = (char *) symbol_name;";
+  s.op->newline() << "#endif";
   s.op->newline() << "if (sdp->maxactive_p) {";
   s.op->newline(1) << "kp->u.krp.maxactive = sdp->maxactive_val;";
   s.op->newline(-1) << "} else {";
@@ -7438,7 +7440,9 @@ kprobe_derived_probe_group::emit_module_init (systemtap_session& s)
   // to ensure safeness of bspcache, always use aggr_kprobe on ia64
   s.op->newline() << "#ifdef __ia64__";
   s.op->newline() << "kp->dummy.addr = kp->u.krp.kp.addr;";
+  s.op->newline() << "#ifdef STAPCONF_KPROBE_SYMBOL_NAME";
   s.op->newline() << "kp->dummy.symbol_name = kp->u.krp.kp.symbol_name;";
+  s.op->newline() << "#endif";
   s.op->newline() << "kp->dummy.pre_handler = NULL;";
   s.op->newline() << "rc = register_kprobe (& kp->dummy);";
   s.op->newline() << "if (rc == 0) {";
@@ -7452,12 +7456,16 @@ kprobe_derived_probe_group::emit_module_init (systemtap_session& s)
   s.op->newline(-1) << "} else {";
   // to ensure safeness of bspcache, always use aggr_kprobe on ia64
   s.op->newline(1) << "kp->u.kp.addr = addr;";
+  s.op->newline() << "#ifdef STAPCONF_KPROBE_SYMBOL_NAME";
   s.op->newline() << "kp->u.kp.symbol_name = (char *) symbol_name;";
+  s.op->newline() << "#endif";
   s.op->newline() << "kp->u.kp.pre_handler = &enter_kprobe2_probe;";
   s.op->newline() << "#ifdef __ia64__";
   s.op->newline() << "kp->dummy.pre_handler = NULL;";
   s.op->newline() << "kp->dummy.addr = kp->u.kp.addr;";
+  s.op->newline() << "#ifdef STAPCONF_KPROBE_SYMBOL_NAME";
   s.op->newline() << "kp->dummy.symbol_name = kp->u.kp.symbol_name;";
+  s.op->newline() << "#endif";
   s.op->newline() << "rc = register_kprobe (& kp->dummy);";
   s.op->newline() << "if (rc == 0) {";
   s.op->newline(1) << "rc = register_kprobe (& kp->u.kp);";
This page took 0.043093 seconds and 5 git commands to generate.