diff options
author | Dave Brolley <brolley@redhat.com> | 2009-02-20 12:30:28 -0500 |
---|---|---|
committer | Dave Brolley <brolley@redhat.com> | 2009-02-20 12:30:28 -0500 |
commit | e1d8e378730ccff8491104575913a4943e9427a8 (patch) | |
tree | f98d732df3100d243d0b7e9687ae568e48fd5c89 /translate.cxx | |
parent | 72629a44d453ddbdaec22a680b207e96a5e19ec3 (diff) | |
parent | a972819ab1954fe33500079d19dcb29c786a1976 (diff) | |
download | systemtap-steved-e1d8e378730ccff8491104575913a4943e9427a8.tar.gz systemtap-steved-e1d8e378730ccff8491104575913a4943e9427a8.tar.xz systemtap-steved-e1d8e378730ccff8491104575913a4943e9427a8.zip |
Merge branch 'master' of git://sources.redhat.com/git/systemtap
Conflicts:
ChangeLog
testsuite/ChangeLog
Diffstat (limited to 'translate.cxx')
-rw-r--r-- | translate.cxx | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/translate.cxx b/translate.cxx index e87e9876..c0e76a02 100644 --- a/translate.cxx +++ b/translate.cxx @@ -4538,18 +4538,17 @@ dump_unwindsyms (Dwfl_Module *m, clog << "Found kernel _stext 0x" << hex << extra_offset << dec << endl; } + // We only need the function symbols to identify kernel-mode + // 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. if (GELF_ST_TYPE (sym.st_info) == STT_FUNC && - sym.st_shndx != SHN_UNDEF) + ! (sym.st_shndx == SHN_UNDEF || sym.st_shndx == SHN_ABS)) { Dwarf_Addr sym_addr = sym.st_value; const char *secname = NULL; - // Symbol addresses before the base address of the module - // are suspect. Older kernels had those for some vsdo - // symbols. They mess up our logic, ignore them. - if (sym_addr < base) - continue; - if (n > 0) // only try to relocate if there exist relocation bases { int ki = dwfl_module_relocate_address (m, &sym_addr); |