summaryrefslogtreecommitdiffstats
path: root/dwflpp.cxx
diff options
context:
space:
mode:
authorDave Brolley <brolley@redhat.com>2009-12-21 12:42:11 -0500
committerDave Brolley <brolley@redhat.com>2009-12-21 12:42:11 -0500
commit25a0404570724499bcdf1ebfd9f03084c2e00137 (patch)
treef9824f847b407790ab10116c2ebcc7e664d53253 /dwflpp.cxx
parent08098abb6b206dc3aea984f18b5054d34e015185 (diff)
parentc6fcc4c1ca5f222cf90bf3968e34a10f09b30be4 (diff)
downloadsystemtap-steved-25a0404570724499bcdf1ebfd9f03084c2e00137.tar.gz
systemtap-steved-25a0404570724499bcdf1ebfd9f03084c2e00137.tar.xz
systemtap-steved-25a0404570724499bcdf1ebfd9f03084c2e00137.zip
Merge branch 'master' of ssh://sources.redhat.com/git/systemtap
Diffstat (limited to 'dwflpp.cxx')
-rw-r--r--dwflpp.cxx16
1 files changed, 13 insertions, 3 deletions
diff --git a/dwflpp.cxx b/dwflpp.cxx
index 0e8a352d..4fb0d54e 100644
--- a/dwflpp.cxx
+++ b/dwflpp.cxx
@@ -1282,6 +1282,16 @@ dwflpp::resolve_prologue_endings (func_info_map_t & funcs)
continue;
}
+ if (entrypc == 0)
+ {
+ if (sess.verbose > 2)
+ clog << "null entrypc dwarf line record for function '"
+ << it->name << "'\n";
+ // This is probably an inlined function. We'll skip this instance;
+ // it is messed up.
+ continue;
+ }
+
if (sess.verbose>2)
clog << "prologue searching function '" << it->name << "'"
<< " 0x" << hex << entrypc << "-0x" << highpc << dec
@@ -1513,7 +1523,7 @@ dwflpp::emit_address (struct obstack *pool, Dwarf_Addr address)
// This gives us the module name, and section name within the
// module, for a kernel module (or other ET_REL module object).
obstack_printf (pool, "({ unsigned long addr = 0; ");
- obstack_printf (pool, "addr = _stp_module_relocate (\"%s\",\"%s\",%#" PRIx64 "); ",
+ obstack_printf (pool, "addr = _stp_module_relocate (\"%s\",\"%s\",%#" PRIx64 ", NULL); ",
modname, secname, reloc_address);
obstack_printf (pool, "addr; })");
}
@@ -1527,7 +1537,7 @@ dwflpp::emit_address (struct obstack *pool, Dwarf_Addr address)
// kernel will never move after being loaded (unlike modules and
// user-space dynamic share libraries).
obstack_printf (pool, "({ static unsigned long addr = 0; ");
- obstack_printf (pool, "if (addr==0) addr = _stp_module_relocate (\"%s\",\"%s\",%#" PRIx64 "); ",
+ obstack_printf (pool, "if (addr==0) addr = _stp_module_relocate (\"%s\",\"%s\",%#" PRIx64 ", NULL); ",
modname, secname, address); // PR10000 NB: not reloc_address
obstack_printf (pool, "addr; })");
}
@@ -1535,7 +1545,7 @@ dwflpp::emit_address (struct obstack *pool, Dwarf_Addr address)
{
enable_task_finder (sess);
obstack_printf (pool, "({ unsigned long addr = 0; ");
- obstack_printf (pool, "addr = _stp_module_relocate (\"%s\",\"%s\",%#" PRIx64 "); ",
+ obstack_printf (pool, "addr = _stp_module_relocate (\"%s\",\"%s\",%#" PRIx64 ", current); ",
modname, ".dynamic", reloc_address);
obstack_printf (pool, "addr; })");
}