Chromium Code Reviews| Index: tools/cygprofile/symbol_extractor.py |
| diff --git a/tools/cygprofile/symbol_extractor.py b/tools/cygprofile/symbol_extractor.py |
| index 81c6e66d8fbca2805ba8b7c673d12eb18a3d8d14..fa8c45065b73a29afcf6f8629a48f8a4a28949d8 100755 |
| --- a/tools/cygprofile/symbol_extractor.py |
| +++ b/tools/cygprofile/symbol_extractor.py |
| @@ -6,6 +6,7 @@ |
| """Utilities to get and manipulate symbols from a binary.""" |
| import collections |
| +import logging |
| import os |
| import re |
| import subprocess |
| @@ -116,4 +117,21 @@ def CreateNameToSymbolInfo(symbol_infos): |
| Returns: |
| a dict {name: symbol_info, ...} |
| """ |
| - return {symbol_info.name: symbol_info for symbol_info in symbol_infos} |
| + symbol_infos_by_name = {} |
|
Benoit L
2015/02/23 14:09:49
This function no longer does what it says in its d
azarchs
2015/02/23 15:39:37
I'd say it's functionality relative the documentat
|
| + duplicated_symbols = set() |
|
pasko
2015/02/23 14:28:13
They rather 'collided' than were 'duplicated'. So
azarchs
2015/02/23 15:39:37
Done.
|
| + for symbol_info in symbol_infos: |
| + if symbol_info.name in symbol_infos_by_name: |
| + # If a symbol appears at multiple offsets, keep the lowest offset. |
| + duplicated_symbols.add(symbol_info.name) |
| + if symbol_infos_by_name[symbol_info.name].offset > symbol_info.offset: |
| + symbol_infos_by_name[symbol_info.name] = symbol_info |
| + else: |
| + symbol_infos_by_name[symbol_info.name] = symbol_info |
| + if len(duplicated_symbols) > 0: |
| + logging.warning('%d symbols were found at more than one offset.' % |
| + len(duplicated_symbols)) |
| + duplicated_symbols_to_show = min(50, len(duplicated_symbols)) |
| + logging.warning('First %d duplicated symbols:\n%s' % ( |
|
pasko
2015/02/23 14:28:13
I would prefer warning level on the level of check
azarchs
2015/02/23 15:39:38
Done.
|
| + duplicated_symbols_to_show, |
| + '\n'.join(list(duplicated_symbols)[:duplicated_symbols_to_show]))) |
| + return symbol_infos_by_name |