Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(317)

Unified Diff: tools/find_runtime_symbols/find_runtime_symbols.py

Issue 10826008: Load static symbol information lazily with some clean-ups. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: refine Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/deep_memory_profiler/dmprof ('k') | tools/find_runtime_symbols/prepare_symbol_info.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/find_runtime_symbols/find_runtime_symbols.py
diff --git a/tools/find_runtime_symbols/find_runtime_symbols.py b/tools/find_runtime_symbols/find_runtime_symbols.py
index 1c96c7fddafa01684e411b2bd9c9e8b7301ed619..2d9f452c001ea0be5d5e201c657a95d2cab78a75 100755
--- a/tools/find_runtime_symbols/find_runtime_symbols.py
+++ b/tools/find_runtime_symbols/find_runtime_symbols.py
@@ -3,14 +3,12 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import json
import logging
import os
import re
import sys
-from parse_proc_maps import parse_proc_maps
-from procedure_boundaries import get_procedure_boundaries_from_nm_bsd
+from static_symbols import StaticSymbols
from util import executable_condition
@@ -50,37 +48,9 @@ class _FileOutput(object):
self.result.write('%s\n' % symbol_name)
-def _find_runtime_symbols(
- prepared_data_dir, addresses, outputter, loglevel=logging.WARN):
- log = logging.getLogger('find_runtime_symbols')
- log.setLevel(loglevel)
- handler = logging.StreamHandler()
- handler.setLevel(loglevel)
- formatter = logging.Formatter('%(message)s')
- handler.setFormatter(formatter)
- log.addHandler(handler)
-
- if not os.path.exists(prepared_data_dir):
- log.warn("Nothing found: %s" % prepared_data_dir)
- return 1
- if not os.path.isdir(prepared_data_dir):
- log.warn("Not a directory: %s" % prepared_data_dir)
- return 1
-
- with open(os.path.join(prepared_data_dir, 'maps'), mode='r') as f:
- maps = parse_proc_maps(f)
-
- with open(os.path.join(prepared_data_dir, 'nm.json'), mode='r') as f:
- nm_files = json.load(f)
-
- symbol_table = {}
- for entry in maps.iter(executable_condition):
- if nm_files.has_key(entry.name):
- if nm_files[entry.name]['format'] == 'bsd':
- with open(os.path.join(prepared_data_dir,
- nm_files[entry.name]['file']), mode='r') as f:
- symbol_table[entry.name] = get_procedure_boundaries_from_nm_bsd(
- f, nm_files[entry.name]['mangled'])
+def _find_runtime_symbols(static_symbols, addresses, outputter):
+ maps = static_symbols.maps
+ symbol_tables = static_symbols.procedure_boundaries
for address in addresses:
if isinstance(address, str):
@@ -88,8 +58,8 @@ def _find_runtime_symbols(
is_found = False
for entry in maps.iter(executable_condition):
if entry.begin <= address < entry.end:
- if entry.name in symbol_table:
- found = symbol_table[entry.name].find_procedure(
+ if entry.name in symbol_tables:
+ found = symbol_tables[entry.name].find_procedure(
address - (entry.begin - entry.offset))
outputter.output(address, found)
else:
@@ -102,21 +72,21 @@ def _find_runtime_symbols(
return 0
-def find_runtime_symbols_list(prepared_data_dir, addresses):
+def find_runtime_symbols_list(static_symbols, addresses):
result = []
- _find_runtime_symbols(prepared_data_dir, addresses, _ListOutput(result))
+ _find_runtime_symbols(static_symbols, addresses, _ListOutput(result))
return result
-def find_runtime_symbols_dict(prepared_data_dir, addresses):
+def find_runtime_symbols_dict(static_symbols, addresses):
result = {}
- _find_runtime_symbols(prepared_data_dir, addresses, _DictOutput(result))
+ _find_runtime_symbols(static_symbols, addresses, _DictOutput(result))
return result
-def find_runtime_symbols_file(prepared_data_dir, addresses, f):
+def find_runtime_symbols_file(static_symbols, addresses, f):
_find_runtime_symbols(
- prepared_data_dir, addresses, _FileOutput(f, False))
+ static_symbols, addresses, _FileOutput(f, False))
def main():
@@ -127,7 +97,24 @@ def main():
""" % sys.argv[0])
return 1
- return find_runtime_symbols_file(sys.argv[1], sys.stdin, sys.stdout)
+ log = logging.getLogger('find_runtime_symbols')
+ log.setLevel(logging.WARN)
+ handler = logging.StreamHandler()
+ handler.setLevel(logging.WARN)
+ formatter = logging.Formatter('%(message)s')
+ handler.setFormatter(formatter)
+ log.addHandler(handler)
+
+ prepared_data_dir = sys.argv[1]
+ if not os.path.exists(prepared_data_dir):
+ log.warn("Nothing found: %s" % prepared_data_dir)
+ return 1
+ if not os.path.isdir(prepared_data_dir):
+ log.warn("Not a directory: %s" % prepared_data_dir)
+ return 1
+
+ static_symbols = StaticSymbols.load(prepared_data_dir)
+ return find_runtime_symbols_file(static_symbols, sys.stdin, sys.stdout)
if __name__ == '__main__':
« no previous file with comments | « tools/deep_memory_profiler/dmprof ('k') | tools/find_runtime_symbols/prepare_symbol_info.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698