summaryrefslogtreecommitdiffstats
path: root/translate.cxx
diff options
context:
space:
mode:
authorDave Brolley <brolley@redhat.com>2009-04-08 12:03:08 -0400
committerDave Brolley <brolley@redhat.com>2009-04-08 12:03:08 -0400
commit2f7ba4b8416eae26971da68fdc14aa8560a7939c (patch)
treed5b4383e43bc108d9f76d30addfd857b6bf8dc62 /translate.cxx
parent83d18bfb001f334309163e54d6c5bd28a1829035 (diff)
parent3dd58c2ac312fc16aa38124987081adbd6697629 (diff)
downloadsystemtap-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.cxx14
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;