Chromium Code Reviews| Index: tools/find_runtime_symbols/reduce_debugline.py |
| diff --git a/tools/find_runtime_symbols/reduce_debugline.py b/tools/find_runtime_symbols/reduce_debugline.py |
| index 1a4efaa591e036e587b7ef28c87bee3b57228a99..ac757374ffc02026a46ef2638c01ed477a4d6555 100755 |
| --- a/tools/find_runtime_symbols/reduce_debugline.py |
| +++ b/tools/find_runtime_symbols/reduce_debugline.py |
| @@ -2,23 +2,11 @@ |
| # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| -"""Reduces result of 'readelf -wL' to just a set of address ranges per file. |
| +"""Reduces result of 'readelf -wL' to just a list of starting addresses. |
| -For example: |
| - |
| -CU: ../../chrome_main.cc: |
| -File name Line number Starting address |
| -chrome_main.cc 30 0xa3be90 |
| -(an empty line) |
| -chrome_main.cc 31 0xa3bea3 |
| -chrome_main.cc 32 0xa3beaf |
| -chrome_main.cc 34 0xa3bec9 |
| -chrome_main.cc 32 0xa3bed1 |
| -(an empty line) |
| - |
| -The example above is reduced into: |
| -{'../../chrome_main.cc', [(0xa3be90, 0xa3be90), (0xa3bea3, 0xa3bed1)]} |
| -where (0xa3bea3, 0xa3bed1) means an address range from 0xa3bea3 to 0xa3bed1. |
| +It lists up all addresses where the corresponding source files change. The |
| +list is sorted in ascending order. See tests/reduce_debugline_test.py for |
| +examples. |
| This script assumes that the result of 'readelf -wL' ends with an empty line. |
| @@ -34,35 +22,32 @@ _FILENAME_PATTERN = re.compile('(CU: |)(.+)\:') |
| def reduce_decoded_debugline(input_file): |
| filename = '' |
| - ranges_dict = {} |
| - starting = None |
| - ending = None |
| + starting_dict = {} |
| + started = False |
| for line in input_file: |
| line = line.strip() |
| - |
| - if line.endswith(':'): |
| - matched = _FILENAME_PATTERN.match(line) |
| - if matched: |
| - filename = matched.group(2) |
| - continue |
| - |
| unpacked = line.split(None, 2) |
| - if len(unpacked) != 3 or not unpacked[2].startswith('0x'): |
| - if starting: |
| - ranges_dict.setdefault(filename, []).append((starting, ending)) |
| - starting = None |
| - ending = None |
| - continue |
| - |
| - ending = int(unpacked[2], 16) |
| - if not starting: |
| - starting = ending |
| - |
| - if starting or ending: |
| - raise ValueError('No new line at last.') |
| - return ranges_dict |
| + if len(unpacked) == 3 and unpacked[2].startswith('0x'): |
| + if not started and filename: |
| + started = True |
| + starting_dict[int(unpacked[2], 16)] = filename |
| + else: |
| + started = False |
| + if line.endswith(':'): |
| + matched = _FILENAME_PATTERN.match(line) |
| + if matched: |
| + filename = matched.group(2) |
| + |
| + starting_list = [] |
| + prev_filename = '' |
| + for address in sorted(starting_dict.keys()): |
|
M-A Ruel
2013/04/09 03:09:04
for address in sorted(starting_dict):
Dai Mikurube (NOT FULLTIME)
2013/04/09 04:15:58
Done.
|
| + curr_filename = starting_dict[address] |
| + if prev_filename != curr_filename: |
| + starting_list.append((address, starting_dict[address])) |
| + prev_filename = curr_filename |
| + return starting_list |
| def main(): |
| @@ -70,15 +55,13 @@ def main(): |
| print >> sys.stderr, 'Unsupported arguments' |
| return 1 |
| - ranges_dict = reduce_decoded_debugline(sys.stdin) |
| - for filename, ranges in ranges_dict.iteritems(): |
| - print filename + ':' |
| - prev = (0, 0) |
| - for address_range in sorted(ranges): |
| - if address_range == prev: |
| - continue |
| - print ' %x-%x' % (address_range[0], address_range[1]) |
| - prev = address_range |
| + starting_list = reduce_decoded_debugline(sys.stdin) |
| + bits64 = True if starting_list[-1][0] > 0xffffffff else False |
|
M-A Ruel
2013/04/09 03:09:04
bits64 = (starting_list[-1][0] > 0xffffffff)
Dai Mikurube (NOT FULLTIME)
2013/04/09 04:15:58
Done.
|
| + for address, filename in starting_list: |
| + if bits64: |
| + print '%016x %s' % (address, filename) |
| + else: |
| + print '%08x %s' % (address, filename) |
| if __name__ == '__main__': |