diff options
author | Dave Brolley <brolley@redhat.com> | 2009-12-21 12:42:11 -0500 |
---|---|---|
committer | Dave Brolley <brolley@redhat.com> | 2009-12-21 12:42:11 -0500 |
commit | 25a0404570724499bcdf1ebfd9f03084c2e00137 (patch) | |
tree | f9824f847b407790ab10116c2ebcc7e664d53253 /dwflpp.cxx | |
parent | 08098abb6b206dc3aea984f18b5054d34e015185 (diff) | |
parent | c6fcc4c1ca5f222cf90bf3968e34a10f09b30be4 (diff) | |
download | systemtap-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.cxx | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -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; })"); } |