summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfche <fche>2008-03-26 21:22:26 +0000
committerfche <fche>2008-03-26 21:22:26 +0000
commit0301cfe75d47bc8e26607ef8372c76239a487113 (patch)
tree2a2d3cd225cce5689347f8fbff61a67e3aad2c15
parent9b9d592ebd99522606996202a22e6382e7945752 (diff)
downloadsystemtap-steved-0301cfe75d47bc8e26607ef8372c76239a487113.tar.gz
systemtap-steved-0301cfe75d47bc8e26607ef8372c76239a487113.tar.xz
systemtap-steved-0301cfe75d47bc8e26607ef8372c76239a487113.zip
2008-03-26 Frank Ch. Eigler <fche@elastic.org>
* translate.cxx (emit_function): Set context last_stmt, in case an error occurs during the function.
-rw-r--r--ChangeLog5
-rw-r--r--tapsets.cxx9
-rw-r--r--translate.cxx3
3 files changed, 17 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 046804c7..832ebaeb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-03-26 Frank Ch. Eigler <fche@elastic.org>
+
+ * translate.cxx (emit_function): Set context last_stmt, in case
+ an error occurs during the function.
+
2008-03-25 Frank Ch. Eigler <fche@elastic.org>
* stap.1.in: Clarify utility of epilogue type probe aliases.
diff --git a/tapsets.cxx b/tapsets.cxx
index a9db3717..39aa60ad 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -1587,6 +1587,15 @@ struct dwflpp
unsigned i = 0;
while (i < components.size())
{
+ /* XXX: This would be desirable, but we don't get the target_symbol token,
+ and printing that gives us the file:line number too early anyway. */
+#if 0
+ // Emit a marker to note which field is being access-attempted, to give
+ // better error messages if deref() fails.
+ string piece = string(...target_symbol token...) + string ("#") + stringify(components[i].second);
+ obstack_printf (pool, "c->last_stmt = %s;", lex_cast_qstring(piece).c_str());
+#endif
+
die = dwarf_formref_die (attr_mem, die_mem);
const int typetag = dwarf_tag (die);
switch (typetag)
diff --git a/translate.cxx b/translate.cxx
index 2bfacefc..f30fca7b 100644
--- a/translate.cxx
+++ b/translate.cxx
@@ -1360,6 +1360,9 @@ c_unparser::emit_function (functiondecl* v)
o->newline() << "#define THIS l";
o->newline() << "if (0) goto out;"; // make sure out: is marked used
+ // set this, in case embedded-c code sets last_error but doesn't otherwise identify itself
+ o->newline() << "c->last_stmt = " << lex_cast_qstring(*v->tok) << ";";
+
// check/increment nesting level
o->newline() << "if (unlikely (c->nesting+2 >= MAXNESTING)) {";
o->newline(1) << "c->last_error = \"MAXNESTING exceeded\";";