diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | tapsets.cxx | 13 | ||||
-rw-r--r-- | testsuite/ChangeLog | 5 | ||||
-rwxr-xr-x | testsuite/semko/thirtysix.stp | 7 | ||||
-rwxr-xr-x | testsuite/transko/three.stp | 6 | ||||
-rw-r--r-- | translate.cxx | 6 |
6 files changed, 39 insertions, 7 deletions
@@ -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;"; |