| Index: tools/binary_size/libsupersize/cluster_symbols.py
|
| diff --git a/tools/binary_size/libsupersize/cluster_symbols.py b/tools/binary_size/libsupersize/cluster_symbols.py
|
| index ae85c1b844c85490de062e3294406126afea80a8..2c1f407da43b3c9b4e301100373f07c2bb026c2d 100644
|
| --- a/tools/binary_size/libsupersize/cluster_symbols.py
|
| +++ b/tools/binary_size/libsupersize/cluster_symbols.py
|
| @@ -22,13 +22,13 @@ def ClusterSymbols(symbols):
|
| logging.debug('Creating name -> symbol map')
|
| clone_indices = []
|
| indices_by_full_name = {}
|
| - # (name, full_name) -> [(index, sym),...]
|
| - replacements_by_name = collections.defaultdict(list)
|
| + # (section_name, name, full_name) -> [(index, sym),...]
|
| + replacements_by_tup = collections.defaultdict(list)
|
| for i, symbol in enumerate(symbols):
|
| if symbol.name.startswith('**'):
|
| # "symbol gap 3" -> "symbol gaps"
|
| - name = re.sub(r'\s+\d+$', 's', symbol.name)
|
| - replacements_by_name[(name, None)].append((i, symbol))
|
| + name = re.sub(r'\s+\d+( \(.*\))?$', 's', symbol.name)
|
| + replacements_by_tup[(symbol.section_name, name, None)].append((i, symbol))
|
| elif symbol.full_name:
|
| if symbol.full_name.endswith(']') and ' [clone ' in symbol.full_name:
|
| clone_indices.append(i)
|
| @@ -43,8 +43,8 @@ def ClusterSymbols(symbols):
|
| # Multiple attributes could exist, so search from left-to-right.
|
| stripped_name = symbol.name[:symbol.name.index(' [clone ')]
|
| stripped_full_name = symbol.full_name[:symbol.full_name.index(' [clone ')]
|
| - name_tup = (stripped_name, stripped_full_name)
|
| - replacement_list = replacements_by_name[name_tup]
|
| + name_tup = (symbol.section_name, stripped_name, stripped_full_name)
|
| + replacement_list = replacements_by_tup[name_tup]
|
|
|
| if not replacement_list:
|
| # First occurance, check for non-clone symbol.
|
| @@ -60,29 +60,29 @@ def ClusterSymbols(symbols):
|
| # Step 3: Undo clustering when length=1.
|
| # Removing these groups means Diff() logic must know about [clone] suffix.
|
| to_clear = []
|
| - for name_tup, replacement_list in replacements_by_name.iteritems():
|
| + for name_tup, replacement_list in replacements_by_tup.iteritems():
|
| if len(replacement_list) == 1:
|
| to_clear.append(name_tup)
|
| for name_tup in to_clear:
|
| - del replacements_by_name[name_tup]
|
| + del replacements_by_tup[name_tup]
|
|
|
| # Step 4: Replace first symbol from each cluster with a SymbolGroup.
|
| - before_symbol_count = sum(len(x) for x in replacements_by_name.itervalues())
|
| + before_symbol_count = sum(len(x) for x in replacements_by_tup.itervalues())
|
| logging.debug('Creating %d symbol groups from %d symbols. %d clones had only '
|
| - 'one symbol.', len(replacements_by_name), before_symbol_count,
|
| + 'one symbol.', len(replacements_by_tup), before_symbol_count,
|
| len(to_clear))
|
|
|
| - len_delta = len(replacements_by_name) - before_symbol_count
|
| + len_delta = len(replacements_by_tup) - before_symbol_count
|
| grouped_symbols = [None] * (len(symbols) + len_delta)
|
| dest_index = 0
|
| src_index = 0
|
| - seen_names = set()
|
| - replacement_names_by_index = {}
|
| - for name_tup, replacement_list in replacements_by_name.iteritems():
|
| + seen_tups = set()
|
| + replacement_tup_by_index = {}
|
| + for name_tup, replacement_list in replacements_by_tup.iteritems():
|
| for tup in replacement_list:
|
| - replacement_names_by_index[tup[0]] = name_tup
|
| + replacement_tup_by_index[tup[0]] = name_tup
|
|
|
| - sorted_items = replacement_names_by_index.items()
|
| + sorted_items = replacement_tup_by_index.items()
|
| sorted_items.sort(key=lambda tup: tup[0])
|
| for index, name_tup in sorted_items:
|
| count = index - src_index
|
| @@ -90,12 +90,12 @@ def ClusterSymbols(symbols):
|
| symbols[src_index:src_index + count])
|
| src_index = index + 1
|
| dest_index += count
|
| - if name_tup not in seen_names:
|
| - seen_names.add(name_tup)
|
| - group_symbols = [tup[1] for tup in replacements_by_name[name_tup]]
|
| + if name_tup not in seen_tups:
|
| + seen_tups.add(name_tup)
|
| + group_symbols = [tup[1] for tup in replacements_by_tup[name_tup]]
|
| grouped_symbols[dest_index] = symbols._CreateTransformed(
|
| - group_symbols, name=name_tup[0], full_name=name_tup[1],
|
| - section_name=group_symbols[0].section_name)
|
| + group_symbols, name=name_tup[1], full_name=name_tup[2],
|
| + section_name=name_tup[0])
|
| dest_index += 1
|
|
|
| assert len(grouped_symbols[dest_index:None]) == len(symbols[src_index:None])
|
|
|