From: Mark Wielaard Date: Wed, 17 Aug 2011 17:13:24 +0000 (+0200) Subject: Really old kprobes didn't have a symbol_name field, autoconf it. X-Git-Tag: release-1.7~153^2~90 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=766cee5f52531d2599134b889c6e258a70026b42;p=systemtap.git Really old kprobes didn't have a symbol_name field, autoconf it. 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. --- diff --git a/buildrun.cxx b/buildrun.cxx index bcb3949bd..60c774129 100644 --- a/buildrun.cxx +++ b/buildrun.cxx @@ -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 index 000000000..eeb3f840e --- /dev/null +++ b/runtime/autoconf-kprobe-symbol-name.c @@ -0,0 +1,6 @@ +#include + +void func(struct kprobe *kp) +{ + kp->symbol_name = "dummy"; +} diff --git a/tapsets.cxx b/tapsets.cxx index 094aca128..cfb8fa1f4 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -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);";