Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright 2013 The Chromium Authors. All rights reserved. | 2 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 import commands | 6 import commands |
| 7 import os | 7 import os |
| 8 import sys | 8 import sys |
| 9 | 9 |
| 10 orderfile = sys.argv[1] | 10 orderfile = sys.argv[1] |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 56 elif (addr < nm_addr): | 56 elif (addr < nm_addr): |
| 57 return binary_search (addr, start, halfway) | 57 return binary_search (addr, start, halfway) |
| 58 elif (addr >= nm_addr + sym_size): | 58 elif (addr >= nm_addr + sym_size): |
| 59 return binary_search (addr, halfway, end) | 59 return binary_search (addr, halfway, end) |
| 60 else: | 60 else: |
| 61 raise Exception("ERROR: did not expect this case") | 61 raise Exception("ERROR: did not expect this case") |
| 62 | 62 |
| 63 f = open (orderfile) | 63 f = open (orderfile) |
| 64 lines = f.readlines() | 64 lines = f.readlines() |
| 65 profiled_list = [] | 65 profiled_list = [] |
| 66 prefixes = ['.text.', '.text.startup.', '.text.hot.', '.text.unlikely.'] | 66 prefixes = ['.text.startup.', '.text.hot.', '.text.unlikely.', '.text.'] |
| 67 for line in lines: | 67 for line in lines: |
| 68 for prefix in prefixes: | 68 for prefix in prefixes: |
| 69 line = line.replace(prefix, '') | 69 line = line.replace(prefix, '') |
| 70 functionName = line.split('.clone.')[0].strip() | 70 functionName = line.split('.clone.')[0].strip() |
| 71 if (functionName == ''): | 71 if (functionName == ''): |
| 72 continue | 72 continue |
| 73 profiled_list.append(functionName) | 73 profiled_list.append(functionName) |
| 74 | 74 |
| 75 # Symbol names are not unique. Since the order file uses symbol names, the | 75 # Symbol names are not unique. Since the order file uses symbol names, the |
| 76 # patched order file pulls in all symbols with the same name. Multiple function | 76 # patched order file pulls in all symbols with the same name. Multiple function |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 93 | 93 |
| 94 sys.stderr.write ("profiled list size: " + str(len(profiled_list)) + "\n") | 94 sys.stderr.write ("profiled list size: " + str(len(profiled_list)) + "\n") |
| 95 addresses = [] | 95 addresses = [] |
| 96 symbols_found = 0 | 96 symbols_found = 0 |
| 97 for function in profiled_list: | 97 for function in profiled_list: |
| 98 try: | 98 try: |
| 99 addrs = functionAddressMap[function] | 99 addrs = functionAddressMap[function] |
| 100 symbols_found = symbols_found + 1 | 100 symbols_found = symbols_found + 1 |
| 101 except Exception: | 101 except Exception: |
| 102 addrs = [] | 102 addrs = [] |
| 103 # sys.stderr.write ("WARNING: could not find symbol " + function + "\n") | 103 sys.stderr.write ("WARNING: could not find symbol " + function + "\n") |
|
azarchs
2015/01/19 18:13:21
From my local run I'd expect roughly 140k warnings
| |
| 104 for addr in addrs: | 104 for addr in addrs: |
| 105 if not (addr in addresses): | 105 if not (addr in addresses): |
| 106 addresses.append(addr) | 106 addresses.append(addr) |
| 107 sys.stderr.write ("symbols found: " + str(symbols_found) + "\n") | 107 sys.stderr.write ("symbols found: " + str(symbols_found) + "\n") |
| 108 | 108 |
| 109 sys.stderr.write ("number of addresses: " + str(len(addresses)) + "\n") | 109 sys.stderr.write ("number of addresses: " + str(len(addresses)) + "\n") |
| 110 total_size = 0 | 110 total_size = 0 |
| 111 for addr in addresses: | 111 for addr in addresses: |
| 112 (functions, size) = binary_search (addr, 0, len(uniqueAddrs)) | 112 (functions, size) = binary_search (addr, 0, len(uniqueAddrs)) |
| 113 total_size = total_size + size | 113 total_size = total_size + size |
| 114 for function in functions: | 114 for function in functions: |
| 115 for prefix in prefixes: | 115 for prefix in prefixes: |
| 116 print prefix + function | 116 print prefix + function |
| 117 | 117 |
| 118 # The following is needed otherwise Gold only applies a partial sort. | 118 # The following is needed otherwise Gold only applies a partial sort. |
| 119 print '.text' # gets methods not in a section, such as assembly | 119 print '.text' # gets methods not in a section, such as assembly |
| 120 print '.text.*' # gets everything else | 120 print '.text.*' # gets everything else |
| 121 sys.stderr.write ("total_size: " + str(total_size) + "\n") | 121 sys.stderr.write ("total_size: " + str(total_size) + "\n") |
| OLD | NEW |