From: Philippe E. <ph...@us...> - 2002-03-05 20:24:01
|
Update of /cvsroot/oprofile/oprofile/pp In directory usw-pr-cvs1:/tmp/cvs-serv13462/oprofile/pp Modified Files: oprofpp_util.cpp Log Message: pp: allow all symbol type ; fix also #526098 Index: oprofpp_util.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/pp/oprofpp_util.cpp,v retrieving revision 1.33 retrieving revision 1.34 diff -u -d -r1.33 -r1.34 --- oprofpp_util.cpp 4 Mar 2002 21:24:34 -0000 1.33 +++ oprofpp_util.cpp 5 Mar 2002 20:23:56 -0000 1.34 @@ -405,6 +405,7 @@ // worth examining static const char *boring_symbols[] = { "gcc2_compiled.", + "_init" }; static const size_t nr_boring_symbols = sizeof(boring_symbols) / sizeof(char *); @@ -417,9 +418,6 @@ if (!(sym->section->flags & SEC_CODE)) return 0; - if (!(sym->flags & (BSF_FUNCTION | BSF_GLOBAL | BSF_LOCAL))) - return 0; - if (!sym->name || sym->name[0] == '\0') return 0; @@ -427,9 +425,6 @@ if (sym->name[0] == '.' && sym->name[1] == 'L') return 0; - if (streq("_init", sym->name)) - return 0; - for (size_t i = 0; i < nr_boring_symbols; ++i) { if (streq(boring_symbols[i], sym->name)) return 0; @@ -478,6 +473,21 @@ } std::stable_sort(syms.begin(), syms.end(), symcomp); + + // we need to ensure than for a given vma only one symbol exist else + // we read more than one time some samples. Fix #526098 + // ELF symbols size : potential bogosity here because when using + // elf symbol size we need to check than two symbols does not overlap. + for (i = 1 ; i < syms.size() ; ++i) { + if (syms[i]->value + syms[i]->section->vma == + syms[i-1]->value + syms[i-1]->section->vma) { + // TODO: choose more carefully the symbol we drop. + // If once have FUNCTION flag and not the other keep + // it etc. + syms.erase(syms.begin() + i); + i--; + } + } verbprintf("nr symbols %u\n", syms.size()); |