summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfche <fche>2006-11-17 20:35:46 +0000
committerfche <fche>2006-11-17 20:35:46 +0000
commit9f36b77f43db9975865f01f5bda68a824d24fcfb (patch)
tree60261fe605b33632d186073155b592e36a5b9ed1
parent2566011f0b812d7b4e7cbcf8b28c1e8c05de5d94 (diff)
downloadsystemtap-steved-9f36b77f43db9975865f01f5bda68a824d24fcfb.tar.gz
systemtap-steved-9f36b77f43db9975865f01f5bda68a824d24fcfb.tar.xz
systemtap-steved-9f36b77f43db9975865f01f5bda68a824d24fcfb.zip
2006-11-17 Frank Ch. Eigler <fche@redhat.com>
* tapsets.cxx (d_v_e_c_v::visit_target_symbol): Restore lost exception-saving functionality that improves error messages for incorrect $target expressions. (translate_components): Systematize error messages somewhat. * translate.cxx (emit_function, emit_probe): Clarify "array locals" error message. 2006-11-17 Frank Ch. Eigler <fche@redhat.com> * semko/thirtysix.stp, transko/three.stp: New tests.
-rw-r--r--ChangeLog9
-rw-r--r--tapsets.cxx13
-rw-r--r--testsuite/ChangeLog5
-rwxr-xr-xtestsuite/semko/thirtysix.stp7
-rwxr-xr-xtestsuite/transko/three.stp6
-rw-r--r--translate.cxx6
6 files changed, 39 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 81eb8b53..59b190de 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-11-17 Frank Ch. Eigler <fche@redhat.com>
+
+ * tapsets.cxx (d_v_e_c_v::visit_target_symbol): Restore lost
+ exception-saving functionality that improves error messages
+ for incorrect $target expressions.
+ (translate_components): Systematize error messages somewhat.
+ * translate.cxx (emit_function, emit_probe): Clarify
+ "array locals" error message.
+
2006-11-10 David Smith <dsmith@redhat.com>
* tapsets.cxx
diff --git a/tapsets.cxx b/tapsets.cxx
index d8e068d8..c17b43c2 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -1396,7 +1396,7 @@ struct dwflpp
|| ({ const char *member = dwarf_diename_integrate (die);
member == NULL || string(member) != components[i].second; }))
if (dwarf_siblingof (die, die_mem) != 0)
- throw semantic_error ("field name " + components[i].second + " not found");
+ throw semantic_error ("field '" + components[i].second + "' not found");
if (dwarf_attr_integrate (die, DW_AT_data_member_location,
attr_mem) == NULL)
@@ -1404,9 +1404,9 @@ struct dwflpp
/* Union members don't usually have a location,
but just use the containing union's location. */
if (typetag != DW_TAG_union_type)
- throw semantic_error ("no location for field "
+ throw semantic_error ("no location for field '"
+ components[i].second
- + " :" + string(dwarf_errmsg (-1)));
+ + "' :" + string(dwarf_errmsg (-1)));
}
else
translate_location (pool, attr_mem, pc, NULL, tail);
@@ -1414,9 +1414,9 @@ struct dwflpp
break;
case DW_TAG_base_type:
- throw semantic_error ("field "
+ throw semantic_error ("field '"
+ components[i].second
- + " vs base type "
+ + "' vs. base type "
+ string(dwarf_diename_integrate (die) ?: "<anonymous type>"));
break;
case -1:
@@ -2937,6 +2937,9 @@ dwarf_var_expanding_copy_visitor::visit_target_symbol (target_symbol *e)
// up not being referenced after all, so it can be optimized out
// quietly.
provide <target_symbol*> (this, e);
+ semantic_error* saveme = new semantic_error (er); // copy it
+ saveme->tok1 = e->tok; // XXX: token not passed to q.dw code generation routines
+ e->saved_conversion_error = saveme;
delete fdecl;
delete ec;
return;
diff --git a/testsuite/ChangeLog b/testsuite/ChangeLog
index 88e77cad..550297e8 100644
--- a/testsuite/ChangeLog
+++ b/testsuite/ChangeLog
@@ -1,4 +1,9 @@
+2006-11-17 Frank Ch. Eigler <fche@redhat.com>
+
+ * semko/thirtysix.stp, transko/three.stp: New tests.
+
2006-11-16 Li Guanglei <guanglei@cn.ibm.com>
+
* buildok/lket.stp: check for all available LKET trace hooks.
2006-11-10 David Smith <dsmith@redhat.com>
diff --git a/testsuite/semko/thirtysix.stp b/testsuite/semko/thirtysix.stp
new file mode 100755
index 00000000..77ffc822
--- /dev/null
+++ b/testsuite/semko/thirtysix.stp
@@ -0,0 +1,7 @@
+#! stap -p2
+
+probe kernel.function("kmem_cache_alloc") {
+ print ($cachep->no_such_field)
+ print ($cachep->array->should_have_indexed_it)
+ print ($cachep->next)
+}
diff --git a/testsuite/transko/three.stp b/testsuite/transko/three.stp
new file mode 100755
index 00000000..ab23b9dd
--- /dev/null
+++ b/testsuite/transko/three.stp
@@ -0,0 +1,6 @@
+#! stap -p3
+
+probe end {
+ array[1,2] = 5
+ print (array[4,6])
+}
diff --git a/translate.cxx b/translate.cxx
index 1a1ae09e..d427fdba 100644
--- a/translate.cxx
+++ b/translate.cxx
@@ -1169,7 +1169,8 @@ c_unparser::emit_function (functiondecl* v)
for (unsigned i=0; i<v->locals.size(); i++)
{
if (v->locals[i]->index_types.size() > 0) // array?
- throw semantic_error ("array locals not supported", v->locals[i]->tok);
+ throw semantic_error ("array locals not supported, missing global declaration?",
+ v->locals[i]->tok);
o->newline() << getvar (v->locals[i]).init();
}
@@ -1274,7 +1275,8 @@ c_unparser::emit_probe (derived_probe* v)
for (unsigned j=0; j<v->locals.size(); j++)
{
if (v->locals[j]->index_types.size() > 0) // array?
- throw semantic_error ("array locals not supported", v->tok);
+ throw semantic_error ("array locals not supported, missing global declaration?",
+ v->locals[j]->tok);
else if (v->locals[j]->type == pe_long)
o->newline() << "l->" << c_varname (v->locals[j]->name)
<< " = 0;";