summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--elaborate.cxx71
-rw-r--r--tapsets.cxx2
3 files changed, 49 insertions, 29 deletions
diff --git a/ChangeLog b/ChangeLog
index 4831e8d2..40694859 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2005-10-10 Frank Ch. Eigler <fche@elastic.org>
+ * elaborate.cxx (match_node::bind): Improve error message.
+ (register_library_aliases): Catch and verbosify error message.
+ (semantic_pass): Provide a back-up exception catcher.
+
+2005-10-10 Frank Ch. Eigler <fche@elastic.org>
PR 1456.
* translate.cxx (c_unparser_assignment): Rename "pre" field to "post",
add blurb to clarify polarity.
diff --git a/elaborate.cxx b/elaborate.cxx
index d9f83939..de10f7f2 100644
--- a/elaborate.cxx
+++ b/elaborate.cxx
@@ -171,7 +171,7 @@ void
match_node::bind(derived_probe_builder * e)
{
if (end)
- throw semantic_error("already have a pattern ending");
+ throw semantic_error("duplicate probe point pattern");
end = e;
}
@@ -337,29 +337,32 @@ systemtap_session::register_library_aliases()
for (unsigned a = 0; a < file->aliases.size(); ++a)
{
probe_alias * alias = file->aliases[a];
- for (unsigned n = 0; n < alias->alias_names.size(); ++n)
- {
- probe_point * name = alias->alias_names[n];
- if (false && verbose)
- {
- clog << "registering probe alias ";
- for (unsigned c = 0; c < name->components.size(); ++c)
- clog << (c > 0 ? "." : "") << name->components[c]->functor;
- clog << endl;
- }
- match_node * n = pattern_root;
- for (unsigned c = 0; c < name->components.size(); ++c)
- {
- probe_point::component * comp = name->components[c];
- // XXX: alias parameters
- if (comp->arg)
- throw semantic_error("alias component "
- + comp->functor
- + " contains illegal parameter");
- n = n->bind(comp->functor);
- }
- n->bind(new alias_expansion_builder(alias));
- }
+ try
+ {
+ for (unsigned n = 0; n < alias->alias_names.size(); ++n)
+ {
+ probe_point * name = alias->alias_names[n];
+ match_node * n = pattern_root;
+ for (unsigned c = 0; c < name->components.size(); ++c)
+ {
+ probe_point::component * comp = name->components[c];
+ // XXX: alias parameters
+ if (comp->arg)
+ throw semantic_error("alias component "
+ + comp->functor
+ + " contains illegal parameter");
+ n = n->bind(comp->functor);
+ }
+ n->bind(new alias_expansion_builder(alias));
+ }
+ }
+ catch (const semantic_error& e)
+ {
+ print_error (e);
+ cerr << " while: registering probe alias ";
+ alias->printsig(cerr);
+ cerr << endl;
+ }
}
}
}
@@ -648,12 +651,22 @@ semantic_pass_symbols (systemtap_session& s)
int
semantic_pass (systemtap_session& s)
{
- s.register_library_aliases();
- register_standard_tapsets(s);
+ int rc = 0;
- int rc = semantic_pass_symbols (s);
- if (rc == 0) rc = semantic_pass_types (s);
- if (rc == 0) rc = semantic_pass_maps (s);
+ try
+ {
+ s.register_library_aliases();
+ register_standard_tapsets(s);
+
+ rc = semantic_pass_symbols (s);
+ if (rc == 0) rc = semantic_pass_types (s);
+ if (rc == 0) rc = semantic_pass_maps (s);
+ }
+ catch (const semantic_error& e)
+ {
+ s.print_error (e);
+ }
+
return rc;
}
diff --git a/tapsets.cxx b/tapsets.cxx
index 5a7a0726..b079ec59 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -1241,6 +1241,8 @@ dwflpp
fprintf(memstream, "if (0) goto deref_fault;\n");
// XXX: deref flag not reliable; emit fault label unconditionally
+ // XXX: print the faulting address, like the user_string/kernel_string
+ // tapset functions do
if (deref) ;
fprintf(memstream,
"deref_fault:\n"