summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--tapsets.cxx22
-rw-r--r--translate.cxx2
3 files changed, 22 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index c573720f..01b6525d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,16 @@
+2007-11-15 David Smith <dsmith@redhat.com>
+
+ * tapsets.cxx (mark_derived_probe::initialize_probe_context_vars):
+ Updated to work with latest LTTNG patch
+ patch-2.6.24-rc2-lttng-0.10-pre23.tar.bz2.
+ (mark_derived_probe_group::emit_module_decls): Ditto.
+ (mark_derived_probe_group::emit_module_init): Ditto.
+ (mark_derived_probe_group::emit_module_exit): Ditto.
+
+ * translate.cxx (c_unparser::emit_common_header): Ditto.
+
2007-11-15 Mike Mason <mmlnx@us.ibm.com>
+
* systemtap.spec.in: Removed "make check" from rpm build steps
2007-11-15 David Smith <dsmith@redhat.com>
diff --git a/tapsets.cxx b/tapsets.cxx
index bc22883e..6a145715 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -5291,7 +5291,7 @@ mark_derived_probe::initialize_probe_context_vars (translator_output* o)
switch (mark_args[i]->stp_type)
{
case pe_long:
- o->newline() << localname << " = va_arg(c->mark_va_list, "
+ o->newline() << localname << " = va_arg(*c->mark_va_list, "
<< mark_args[i]->c_type << ");";
break;
@@ -5299,7 +5299,7 @@ mark_derived_probe::initialize_probe_context_vars (translator_output* o)
// We're assuming that this is a kernel string (this code is
// basically the guts of kernel_string), not a user string.
o->newline() << "{ " << mark_args[i]->c_type
- << " tmp_str = va_arg(c->mark_va_list, "
+ << " tmp_str = va_arg(*c->mark_va_list, "
<< mark_args[i]->c_type << ");";
o->newline() << "deref_string (" << localname
<< ", tmp_str, MAXSTRINGLEN);";
@@ -5355,14 +5355,14 @@ mark_derived_probe_group::emit_module_decls (systemtap_session& s)
// Emit the marker callback function
s.op->newline();
- s.op->newline() << "static void enter_marker_probe (const struct marker *mdata, void *private_data, const char *fmt, ...) {";
- s.op->newline(1) << "struct stap_marker_probe *smp = (struct stap_marker_probe *)mdata->private;";
+ s.op->newline() << "static void enter_marker_probe (void *probe_data, void *call_data, const char *fmt, va_list *args) {";
+ s.op->newline(1) << "struct stap_marker_probe *smp = (struct stap_marker_probe *)probe_data;";
common_probe_entryfn_prologue (s.op, "STAP_SESSION_RUNNING");
s.op->newline() << "c->probe_point = smp->pp;";
- s.op->newline() << "va_start(c->mark_va_list, fmt);";
+ s.op->newline() << "c->mark_va_list = args;";
s.op->newline() << "(*smp->ph) (c);";
- s.op->newline() << "va_end(c->mark_va_list);";
+ s.op->newline() << "c->mark_va_list = NULL;";
common_probe_entryfn_epilogue (s.op);
s.op->newline(-1) << "}";
@@ -5381,14 +5381,10 @@ mark_derived_probe_group::emit_module_init (systemtap_session &s)
s.op->newline(1) << "struct stap_marker_probe *smp = &stap_marker_probes[i];";
s.op->newline() << "probe_point = smp->pp;";
s.op->newline() << "rc = marker_probe_register(smp->name, smp->format, enter_marker_probe, smp);";
- s.op->newline() << "if (! rc)";
-
- s.op->newline(1) << "rc = marker_arm(smp->name);";
-
- s.op->newline(-1) << "if (rc) {";
+ s.op->newline() << "if (rc) {";
s.op->newline(1) << "for (j=i-1; j>=0; j--) {"; // partial rollback
s.op->newline(1) << "struct stap_marker_probe *smp2 = &stap_marker_probes[j];";
- s.op->newline() << "marker_probe_unregister(smp2->name);";
+ s.op->newline() << "marker_probe_unregister(smp2->name, enter_marker_probe, smp2);";
s.op->newline(-1) << "}";
s.op->newline() << "break;"; // don't attempt to register any more probes
s.op->newline(-1) << "}";
@@ -5405,7 +5401,7 @@ mark_derived_probe_group::emit_module_exit (systemtap_session& s)
s.op->newline() << "/* deregister marker probes */";
s.op->newline() << "for (i=0; i<" << probes.size() << "; i++) {";
s.op->newline(1) << "struct stap_marker_probe *smp = &stap_marker_probes[i];";
- s.op->newline() << "marker_probe_unregister(smp->name);";
+ s.op->newline() << "marker_probe_unregister(smp->name, enter_marker_probe, smp);";
s.op->newline(-1) << "}"; // for loop
}
diff --git a/translate.cxx b/translate.cxx
index d3e76108..27b28d5f 100644
--- a/translate.cxx
+++ b/translate.cxx
@@ -860,7 +860,7 @@ c_unparser::emit_common_header ()
o->newline() << "const char *last_stmt;";
o->newline() << "struct pt_regs *regs;";
o->newline() << "struct kretprobe_instance *pi;";
- o->newline() << "va_list mark_va_list;";
+ o->newline() << "va_list *mark_va_list;";
o->newline() << "void *data;";
o->newline() << "#ifdef STP_TIMING";
o->newline() << "Stat *statp;";