diff options
author | Dave Brolley <brolley@redhat.com> | 2009-04-08 12:03:08 -0400 |
---|---|---|
committer | Dave Brolley <brolley@redhat.com> | 2009-04-08 12:03:08 -0400 |
commit | 2f7ba4b8416eae26971da68fdc14aa8560a7939c (patch) | |
tree | d5b4383e43bc108d9f76d30addfd857b6bf8dc62 /translate.cxx | |
parent | 83d18bfb001f334309163e54d6c5bd28a1829035 (diff) | |
parent | 3dd58c2ac312fc16aa38124987081adbd6697629 (diff) | |
download | systemtap-steved-2f7ba4b8416eae26971da68fdc14aa8560a7939c.tar.gz systemtap-steved-2f7ba4b8416eae26971da68fdc14aa8560a7939c.tar.xz systemtap-steved-2f7ba4b8416eae26971da68fdc14aa8560a7939c.zip |
Merge branch 'master' of git://sources.redhat.com/git/systemtap
Diffstat (limited to 'translate.cxx')
-rw-r--r-- | translate.cxx | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/translate.cxx b/translate.cxx index 9e1c2519..1a86dcd2 100644 --- a/translate.cxx +++ b/translate.cxx @@ -919,6 +919,7 @@ c_unparser::emit_common_header () ostringstream oss; oss << "c->statp = & time_" << dp->basest()->name << ";" << endl; // -t anti-dupe oss << "# needs_global_locks: " << dp->needs_global_locks () << endl; + dp->print_dupe_stamp (oss); dp->body->print(oss); // NB: dependent probe conditions *could* be listed here, but don't need to be. // That's because they're only dependent on the probe body, which is already @@ -1546,6 +1547,7 @@ c_unparser::emit_probe (derived_probe* v) // be very different with or without -t. oss << "c->statp = & time_" << v->basest()->name << ";" << endl; + v->print_dupe_stamp (oss); v->body->print(oss); // Since the generated C changes based on whether or not the probe @@ -3527,7 +3529,10 @@ c_unparser_assignment::visit_symbol (symbol *e) void c_unparser::visit_target_symbol (target_symbol* e) { - throw semantic_error("cannot translate general target-symbol expression", e->tok); + if (!e->probe_context_var.empty()) + o->line() << "l->" << e->probe_context_var; + else + throw semantic_error("cannot translate general cast expression", e->tok); } @@ -4610,10 +4615,13 @@ dump_unwindsyms (Dwfl_Module *m, // PC's, so we omit undefined or "fake" absolute addresses. // These fake absolute addresses occur in some older i386 // kernels to indicate they are vDSO symbols, not real - // functions in the kernel. + // functions in the kernel. We also omit symbols that have + // suspicious addresses (before base). if ((GELF_ST_TYPE (sym.st_info) == STT_FUNC || GELF_ST_TYPE (sym.st_info) == STT_OBJECT) // PR10000: also need .data - && !(sym.st_shndx == SHN_UNDEF || sym.st_shndx == SHN_ABS)) + && !(sym.st_shndx == SHN_UNDEF + || sym.st_shndx == SHN_ABS + || sym.st_value < base)) { Dwarf_Addr sym_addr = sym.st_value; const char *secname = NULL; |