summaryrefslogtreecommitdiffstats
path: root/tapsets.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'tapsets.cxx')
-rw-r--r--tapsets.cxx24
1 files changed, 19 insertions, 5 deletions
diff --git a/tapsets.cxx b/tapsets.cxx
index bed27967..8b871ac7 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -1383,8 +1383,14 @@ struct dwflpp
}
}
if (!entrypc_srcline)
- throw semantic_error ("missing entrypc dwarf line record for function '"
- + it->name + "'");
+ {
+ if (sess.verbose > 2)
+ clog << "missing entrypc dwarf line record for function '"
+ << it->name << "'\n";
+ // This is probably an inlined function. We'll end up using
+ // its lowpc as a probe address.
+ continue;
+ }
if (sess.verbose>2)
clog << "prologue searching function '" << it->name << "'"
@@ -3920,7 +3926,9 @@ validate_module_elf (Dwfl_Module *mod, const char *name, base_query *q)
{
case EM_386: expect_machine = "i?86"; break; // accept e.g. i586
case EM_X86_64: expect_machine = "x86_64"; break;
- case EM_PPC: expect_machine = "ppc"; break;
+ // We don't support 32-bit ppc kernels, but we support 32-bit apps
+ // running on ppc64 kernels.
+ case EM_PPC: expect_machine = "ppc64"; break;
case EM_PPC64: expect_machine = "ppc64"; break;
case EM_S390: expect_machine = "s390x"; break;
case EM_IA_64: expect_machine = "ia64"; break;
@@ -8709,6 +8717,12 @@ hrtimer_derived_probe_group::emit_module_decls (systemtap_session& s)
s.op->newline(-1) << "};";
s.op->newline();
+ // autoconf: add get/set expires if missing (pre 2.6.28-rc1)
+ s.op->newline() << "#ifndef STAPCONF_HRTIMER_GETSET_EXPIRES";
+ s.op->newline() << "#define hrtimer_get_expires(timer) ((timer)->expires)";
+ s.op->newline() << "#define hrtimer_set_expires(timer, time) (void)((timer)->expires = (time))";
+ s.op->newline() << "#endif";
+
// autoconf: adapt to HRTIMER_REL -> HRTIMER_MODE_REL renaming near 2.6.21
s.op->newline() << "#ifdef STAPCONF_HRTIMER_REL";
s.op->newline() << "#define HRTIMER_MODE_REL HRTIMER_REL";
@@ -8727,9 +8741,9 @@ hrtimer_derived_probe_group::emit_module_decls (systemtap_session& s)
s.op->newline() << "if ((atomic_read (&session_state) == STAP_SESSION_STARTING) ||";
s.op->newline() << " (atomic_read (&session_state) == STAP_SESSION_RUNNING)) {";
// Compute next trigger time
- s.op->newline(1) << "timer->expires = ktime_add (timer->expires,";
+ s.op->newline(1) << "hrtimer_set_expires(timer, ktime_add (hrtimer_get_expires(timer),";
emit_interval (s.op);
- s.op->line() << ");";
+ s.op->line() << "));";
s.op->newline() << "rc = HRTIMER_RESTART;";
s.op->newline(-1) << "}";
s.op->newline() << "{";