Commit cf383542 authored by Samuel Huang's avatar Samuel Huang Committed by Commit Bot

[SuperSize] Add support for outlining and fix arm64 flow.

Outlining in LLD creates many symbols with names OUTLINED_FUNCTION_0,
OUTLINED_FUNCTION_1, etc. that appear many times. Problems:
* Unrelated symbols can share the same name. If object path information
  is available in the .map file (true for arm64 without ThinLTO), then
  SuperSize would run 10x as long because these paths get joined in an
  O(n^2) fashion.
* In nm output, an address can have many OUTLINED_FUNCTION_* symbols,
  which adds to the bloat.

This CL adds to SuperSize outlining support to solves the problems above.
Details:
* link_map_parser.py: (for LLD, and also Gold for testing) Detect
  OUTLINED_FUNCTION_* and reassign the name to '** outlined function'.
  The '*' prefix labels these symbols as placeholders, so these
  symbols will be ignored by nm results from .o files, and no object
  path joining occurs.
* nm.py: For the nm call to the main ELF file, combine multiple
  OUTLINED_FUNCTION_* with the same address into a single symbol, and
  assign the name to '** outlined function * (count)'. If combination
  takes place, then "forced passing" occurs, i.e., the name will
  always be passed (rather than discarded to save space) to
  |names_by_address|.
* archive.py: Updated to reconcile the two sources of
  '** outlined function' symbols.

Outlined functions can share address with named symbols. Due to the
combining in nm.py, this causes number of aliased symbols to decrease
for affected named symbols (and increases PSS).

'** outlined function' symbols can have object_path assigned, but the
data are obtained from .map files only, since these symbols are ignored
for nm results from .o files. Furthermore, if an outlined function
symbol shares an address with any other such symbol (as found by nm
results for the main ELF file), then it won't have object_path assigned
(since "forced passing" above causes _AddNmAliases() to process the
symbol, but this discards object_path data from .map files).

Bug: 891061
Change-Id: Ie0109c7fc876749c10a87b5a7673af2be49d38c4
Reviewed-on: https://chromium-review.googlesource.com/c/1312561Reviewed-by: default avatarSamuel Huang <huangs@chromium.org>
Reviewed-by: default avataragrieve <agrieve@chromium.org>
Commit-Queue: Samuel Huang <huangs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#604918}
parent 29b40f21
......@@ -167,6 +167,11 @@ as `size=0, padding=$size` (padding-only symbols) to de-emphasize them in diffs.
* `template_name`: Name without argument parameters.
* `full_name`: Name with all parameters.
1. Special cases:
* LLVM function outlining creates many OUTLINED_FUNCTION_* symbols. These
renamed to '** outlined functions' or '** outlined functions * (count)',
and are deduped so an address can have at most one such symbol.
1. Clustering:
* Compiler & linker optimizations can cause symbols to be broken into
multiple parts to become candidates for inlining ("partial inlining").
......
......@@ -641,6 +641,22 @@ def _PopulateComponents(raw_symbols, knobs):
symbol.component = _FindComponentRoot(folder_path, seen_paths, knobs)
def _UpdateSymbolNamesFromNm(raw_symbols, names_by_address):
"""Updates raw_symbols names with extra information from nm."""
logging.debug('Update symbol names')
# linker_map_parser extracts '** outlined function' without knowing how many
# such symbols exist at each address. nm has this information, and stores the
# value as, e.g., '** outlined function * 5'. Copy the information over.
for s in raw_symbols:
if s.full_name.startswith('** outlined function'):
name_list = names_by_address.get(s.address)
if name_list:
for name in name_list:
if name.startswith('** outlined function'):
s.full_name = name
break
def _AddNmAliases(raw_symbols, names_by_address):
"""Adds symbols that were removed by identical code folding."""
# Step 1: Create list of (index_of_symbol, name_list).
......@@ -845,6 +861,8 @@ def _ParseElfInfo(map_path, elf_path, tool_prefix, track_string_literals,
'Adding symbols removed by identical code folding (as reported by nm)')
# This normally does not block (it's finished by this time).
names_by_address = elf_nm_result.get()
_UpdateSymbolNamesFromNm(raw_symbols, names_by_address)
raw_symbols = _AddNmAliases(raw_symbols, names_by_address)
if outdir_context:
......@@ -853,7 +871,6 @@ def _ParseElfInfo(map_path, elf_path, tool_prefix, track_string_literals,
'Fetched path information for %d symbols from %d files',
len(object_paths_by_name),
len(outdir_context.elf_object_paths) + len(missed_object_paths))
# For aliases, this provides path information where there wasn't any.
logging.info('Creating aliases for symbols shared by multiple paths')
raw_symbols = _AssignNmAliasPathsAndCreatePathAliases(
......
......@@ -98,21 +98,23 @@ class MapFileParserGold(object):
# 0x00290711 base::AutoLock::~AutoLock()
# 0x00290711 base::AutoLock::~AutoLock()
# .text._ZNK5blink15LayoutBlockFlow31mustSeparateMarginAfterForChildERK...
# 0xffffffffffffffff 0x46 obj/...
# 0x006808e1 blink::LayoutBlockFlow::...
# 0xffffffffffffffff 0x46 obj/...
# 0x006808e1 blink::LayoutBlockFlow::...
# .text.OUTLINED_FUNCTION_0
# 0x002a2000 0x20 obj/net/net/tag.o
# .bss
# .bss._ZGVZN11GrProcessor11initClassIDI10LightingFPEEvvE8kClassID
# 0x02d4b294 0x4 obj/skia/skia/SkLightingShader.o
# 0x02d4b294 guard variable for void GrProcessor::initClassID
# 0x02d4b294 0x4 obj/skia/skia/SkLightingShader.o
# 0x02d4b294 guard variable for void GrProcessor::initClassID
# .data 0x0028c600 0x22d3468
# .data.rel.ro._ZTVN3gvr7android19ScopedJavaGlobalRefIP12_jfloatArrayEE
# 0x02d1e668 0x10 ../../third_party/.../libfoo.a(bar.o)
# 0x02d1e668 vtable for gvr::android::GlobalRef<_jfloatArray*>
# 0x02d1e668 0x10 ../../third_party/.../libfoo.a(bar.o)
# 0x02d1e668 vtable for gvr::android::GlobalRef<_jfloatArray*>
# ** merge strings
# 0x0255fb00 0x1f2424
# ** merge constants
# 0x0255fb00 0x8
# ** common 0x02db5700 0x13ab48
# ** common 0x02db5700 0x13ab48
syms = self._symbols
while True:
line = self._SkipToLineWithPrefix('.')
......@@ -242,6 +244,10 @@ class MapFileParserGold(object):
if mangled_name and (not name or mangled_name.startswith('_Z') or
'._Z' in mangled_name):
full_name = mangled_name
# Handle outlined functions. These are actual LLD features, but we
# handle them here for Gold to facilitate testing.
if full_name and full_name.startswith('OUTLINED_FUNCTION_'):
full_name = '** outlined function'
sym = models.Symbol(section_name, size, address=address,
full_name=full_name, object_path=path)
......@@ -310,6 +316,10 @@ class MapFileParserLld(object):
# 194 194 13 1 <internal>:(.interp)
# 1a8 1a8 22d8 4 .ARM.exidx
# 1b0 1b0 8 4 obj/sandbox/syscall.o:(.ARM.exidx)
# 400 400 123400 64 .text
# 600 600 14 4 obj/...:(.text.OUTLINED_FUNCTION_0)
# 600 600 0 1 $x.3
# 600 600 14 1 OUTLINED_FUNCTION_0
# Older format:
# Address Size Align Out In Symbol
# 00000000002002a8 000000000000001c 1 .interp
......@@ -383,6 +393,12 @@ class MapFileParserLld(object):
# If multiple entries exist, take the first on that reports a size.
# Zero-length symbols look like "$t.4", "$d.5".
if size and not sym_maker.cur_sym.full_name:
# Outlined functions have names like OUTLINED_FUNCTION_0, which can
# appear 1000+ time that can cause false aliasing. We treat these as
# special cases by designating them as a placeholder symbols and
# renaming them to '** outlined function'.
if tok.startswith('OUTLINED_FUNCTION_'):
tok = '** outlined function'
sym_maker.cur_sym.full_name = tok
else:
......
......@@ -76,6 +76,19 @@ def CollectAliasesByAddress(elf_path, tool_prefix):
# Constructors often show up twice, so use sets to ensure no duplicates.
names_by_address = collections.defaultdict(set)
# Many OUTLINED_FUNCTION_* entries can coexist on a single address, possibly
# mixed with regular symbols. However, naively keeping these is bad because:
# * OUTLINED_FUNCTION_* can have many duplicates. Keeping them would cause
# false associations downstream, when looking up object_paths from names.
# * For addresses with multiple OUTLINED_FUNCTION_* entries, we can't get the
# associated object_path (exception: the one entry in the .map file, for LLD
# without ThinLTO). So keeping copies around is rather useless.
# Our solution is to merge OUTLINED_FUNCTION_* entries at the same address
# into a single symbol. We'd also like to keep track of the number of copies
# (although it will not be used to compute PSS computation). This is done by
# writing the count in the name, e.g., '** outlined function * 5'.
num_outlined_functions_at_address = collections.Counter()
# About 60mb of output, but piping takes ~30s, and loading it into RAM
# directly takes 3s.
args = [path_util.GetNmPath(tool_prefix), '--no-sort', '--defined-only',
......@@ -100,7 +113,15 @@ def CollectAliasesByAddress(elf_path, tool_prefix):
address = int(address_str, 16)
if not address:
continue
names_by_address[address].add(mangled_name)
if mangled_name.startswith('OUTLINED_FUNCTION_'):
num_outlined_functions_at_address[address] += 1
else:
names_by_address[address].add(mangled_name)
# Need to add before demangling because |names_by_address| changes type.
for address, count in num_outlined_functions_at_address.iteritems():
name = '** outlined function' + (' * %d' % count if count > 1 else '')
names_by_address[address].add(name)
# Demangle all names.
names_by_address = demangle.DemangleSetsInDicts(names_by_address, tool_prefix)
......@@ -108,7 +129,12 @@ def CollectAliasesByAddress(elf_path, tool_prefix):
# Since this is run in a separate process, minimize data passing by returning
# only aliased symbols.
# Also: Sort to ensure stable ordering.
return {k: sorted(v) for k, v in names_by_address.iteritems() if len(v) > 1}
return {
addr: sorted(names)
for addr, names in names_by_address.iteritems()
if len(names) > 1 or num_outlined_functions_at_address.get(addr, 0) > 1
}
def _CollectAliasesByAddressAsyncHelper(elf_path, tool_prefix):
......
Section .text: has 100.0% of 35900712 bytes accounted for from 15 symbols. 0 bytes are unaccounted for.
Section .text: has 100.0% of 35900712 bytes accounted for from 17 symbols. 0 bytes are unaccounted for.
* 0 have source paths assigned (0.0%)
* Padding accounts for 48 bytes (0.0%)
* 3 placeholders (symbols that start with **) account for 35830760 bytes (99.8%)
* 5 placeholders (symbols that start with **) account for 35830760 bytes (99.8%)
* Contains 0 aliases
* 0 symbols have shared ownership
Section .rodata: has 100.0% of 5927652 bytes accounted for from 10 symbols. 0 bytes are unaccounted for.
......@@ -67,7 +67,9 @@ Section .bss: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 byt
.text@2a0020(size_without_padding=24,padding=4,full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&),object_path=third_party/WebKit.a/sub/ContiguousContainer.o,source_path=,flags={},num_aliases=1,component=)
.text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1,component=)
.text@2a1000(size_without_padding=94,padding=0,full_name=blink::PaintChunker::releasePaintChunks(),object_path=third_party/WebKit.a/sub/ContiguousContainer.o,source_path=,flags={anon,clone},num_aliases=1,component=)
.text@24ca628(size_without_padding=0,padding=35821002,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1,component=)
.text@2a2000(size_without_padding=32,padding=4002,full_name=** outlined function,object_path=third_party/WebKit.a/sub/ContiguousContainer.o,source_path=,flags={},num_aliases=1,component=)
.text@2a2020(size_without_padding=48,padding=0,full_name=** outlined function,object_path=third_party/WebKit.a/sub/ContiguousContainer.o,source_path=,flags={},num_aliases=1,component=)
.text@24ca628(size_without_padding=0,padding=35816920,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1,component=)
.bss@0(size_without_padding=262144,padding=0,full_name=ff_cos_131072,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=,flags={},num_aliases=1,component=)
.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_131072_fixed,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o,source_path=,flags={},num_aliases=1,component=)
.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_65536,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=,flags={},num_aliases=1,component=)
......
......@@ -9,11 +9,11 @@ gn_args=var1=true var2="foo"
linker_name=gold
map_file_name=../../../test.map
tool_prefix=tools/binary_size/libsupersize/testdata/mock_toolchain/
Section .text: has 100.0% of 35900712 bytes accounted for from 19 symbols. 0 bytes are unaccounted for.
* 15 have source paths assigned (78.9%)
Section .text: has 100.0% of 35900712 bytes accounted for from 22 symbols. 0 bytes are unaccounted for.
* 16 have source paths assigned (72.7%)
* Padding accounts for 48 bytes (0.0%)
* 3 placeholders (symbols that start with **) account for 35830760 bytes (99.8%)
* Contains 6 aliases, mapped to 2 unique addresses (52 bytes saved)
* 5 placeholders (symbols that start with **) account for 35830760 bytes (99.8%)
* Contains 8 aliases, mapped to 3 unique addresses (100 bytes saved)
* 0 symbols have shared ownership
Section .rodata: has 100.0% of 5927652 bytes accounted for from 12 symbols. 0 bytes are unaccounted for.
* 8 have source paths assigned (66.7%)
......@@ -303,7 +303,10 @@ Section .other: has 100.0% of 39228839 bytes accounted for from 5 symbols. 0 byt
.text@2a0020(size_without_padding=24,padding=4,full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&),object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
.text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1,component=)
.text@2a1000(size_without_padding=94,padding=0,full_name=blink::PaintChunker::releasePaintChunks(),object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={anon,clone},num_aliases=1,component=UI>Browser)
.text@24ca628(size_without_padding=0,padding=35821002,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1,component=)
.text@2a2000(size_without_padding=32,padding=4002,full_name=** outlined function,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
.text@2a2020(size_without_padding=48,padding=0,full_name=** outlined function * 2,object_path=,source_path=,flags={},num_aliases=2,component=)
.text@2a2020(size_without_padding=48,padding=0,full_name=aliasedWithOutlinedFunction(),object_path=,source_path=,flags={},num_aliases=2,component=)
.text@24ca628(size_without_padding=0,padding=35816920,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1,component=)
.bss@0(size_without_padding=262144,padding=0,full_name=ff_cos_131072,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=1,component=Internal>Android)
.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_131072_fixed,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o,source_path=third_party/fft_fixed.cc,flags={},num_aliases=1,component=Internal>Android)
.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_65536,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=1,component=Internal>Android)
......
......@@ -7,11 +7,11 @@ gn_args=var1=true var2="foo"
linker_name=gold
map_file_name=../../../test.map
tool_prefix=tools/binary_size/libsupersize/testdata/mock_toolchain/
Section .text: has 100.0% of 35900712 bytes accounted for from 19 symbols. 0 bytes are unaccounted for.
* 15 have source paths assigned (78.9%)
Section .text: has 100.0% of 35900712 bytes accounted for from 22 symbols. 0 bytes are unaccounted for.
* 16 have source paths assigned (72.7%)
* Padding accounts for 48 bytes (0.0%)
* 3 placeholders (symbols that start with **) account for 35830760 bytes (99.8%)
* Contains 6 aliases, mapped to 2 unique addresses (52 bytes saved)
* 5 placeholders (symbols that start with **) account for 35830760 bytes (99.8%)
* Contains 8 aliases, mapped to 3 unique addresses (100 bytes saved)
* 0 symbols have shared ownership
Section .rodata: has 100.0% of 5927652 bytes accounted for from 12 symbols. 0 bytes are unaccounted for.
* 8 have source paths assigned (66.7%)
......@@ -88,7 +88,10 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt
.text@2a0020(size_without_padding=24,padding=4,full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&),object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
.text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1,component=)
.text@2a1000(size_without_padding=94,padding=0,full_name=blink::PaintChunker::releasePaintChunks(),object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={anon,clone},num_aliases=1,component=UI>Browser)
.text@24ca628(size_without_padding=0,padding=35821002,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1,component=)
.text@2a2000(size_without_padding=32,padding=4002,full_name=** outlined function,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
.text@2a2020(size_without_padding=48,padding=0,full_name=** outlined function * 2,object_path=,source_path=,flags={},num_aliases=2,component=)
.text@2a2020(size_without_padding=48,padding=0,full_name=aliasedWithOutlinedFunction(),object_path=,source_path=,flags={},num_aliases=2,component=)
.text@24ca628(size_without_padding=0,padding=35816920,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1,component=)
.bss@0(size_without_padding=262144,padding=0,full_name=ff_cos_131072,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=1,component=Internal>Android)
.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_131072_fixed,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o,source_path=third_party/fft_fixed.cc,flags={},num_aliases=1,component=Internal>Android)
.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_65536,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=1,component=Internal>Android)
......
Section .text: has 100.0% of 35900712 bytes accounted for from 15 symbols. 0 bytes are unaccounted for.
* 12 have source paths assigned (80.0%)
Section .text: has 100.0% of 35900712 bytes accounted for from 17 symbols. 0 bytes are unaccounted for.
* 14 have source paths assigned (82.4%)
* Padding accounts for 48 bytes (0.0%)
* 3 placeholders (symbols that start with **) account for 35830760 bytes (99.8%)
* 5 placeholders (symbols that start with **) account for 35830760 bytes (99.8%)
* Contains 0 aliases
* 0 symbols have shared ownership
Section .rodata: has 100.0% of 5927652 bytes accounted for from 10 symbols. 0 bytes are unaccounted for.
......@@ -67,7 +67,9 @@ Section .bss: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 byt
.text@2a0020(size_without_padding=24,padding=4,full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&),object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
.text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1,component=)
.text@2a1000(size_without_padding=94,padding=0,full_name=blink::PaintChunker::releasePaintChunks(),object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={anon,clone},num_aliases=1,component=UI>Browser)
.text@24ca628(size_without_padding=0,padding=35821002,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1,component=)
.text@2a2000(size_without_padding=32,padding=4002,full_name=** outlined function,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
.text@2a2020(size_without_padding=48,padding=0,full_name=** outlined function,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
.text@24ca628(size_without_padding=0,padding=35816920,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1,component=)
.bss@0(size_without_padding=262144,padding=0,full_name=ff_cos_131072,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=1,component=Internal>Android)
.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_131072_fixed,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o,source_path=third_party/fft_fixed.cc,flags={},num_aliases=1,component=Internal>Android)
.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_65536,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=1,component=Internal>Android)
......
......@@ -7,11 +7,11 @@ gn_args=var1=true var2="foo"
linker_name=gold
map_file_name=../../../test.map
tool_prefix=tools/binary_size/libsupersize/testdata/mock_toolchain/
Section .text: has 100.0% of 35900712 bytes accounted for from 19 symbols. 0 bytes are unaccounted for.
* 15 have source paths assigned (78.9%)
Section .text: has 100.0% of 35900712 bytes accounted for from 22 symbols. 0 bytes are unaccounted for.
* 16 have source paths assigned (72.7%)
* Padding accounts for 48 bytes (0.0%)
* 3 placeholders (symbols that start with **) account for 35830760 bytes (99.8%)
* Contains 6 aliases, mapped to 2 unique addresses (52 bytes saved)
* 5 placeholders (symbols that start with **) account for 35830760 bytes (99.8%)
* Contains 8 aliases, mapped to 3 unique addresses (100 bytes saved)
* 0 symbols have shared ownership
Section .rodata: has 100.0% of 5927652 bytes accounted for from 12 symbols. 0 bytes are unaccounted for.
* 8 have source paths assigned (66.7%)
......@@ -98,7 +98,10 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt
.text@2a0020(size_without_padding=24,padding=4,full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&),object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
.text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1,component=)
.text@2a1000(size_without_padding=94,padding=0,full_name=blink::PaintChunker::releasePaintChunks(),object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={anon,clone},num_aliases=1,component=UI>Browser)
.text@24ca628(size_without_padding=0,padding=35821002,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1,component=)
.text@2a2000(size_without_padding=32,padding=4002,full_name=** outlined function,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container/container.c,flags={},num_aliases=1,component=UI>Browser)
.text@2a2020(size_without_padding=48,padding=0,full_name=** outlined function * 2,object_path=,source_path=,flags={},num_aliases=2,component=)
.text@2a2020(size_without_padding=48,padding=0,full_name=aliasedWithOutlinedFunction(),object_path=,source_path=,flags={},num_aliases=2,component=)
.text@24ca628(size_without_padding=0,padding=35816920,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1,component=)
.bss@0(size_without_padding=262144,padding=0,full_name=ff_cos_131072,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=1,component=Internal>Android)
.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_131072_fixed,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o,source_path=third_party/fft_fixed.cc,flags={},num_aliases=1,component=Internal>Android)
.bss@0(size_without_padding=131072,padding=0,full_name=ff_cos_65536,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=1,component=Internal>Android)
......
......@@ -81,13 +81,13 @@ Section Sizes (Total=128.0mb (134218045 bytes)):
.symtab: 16.4mb (17166112 bytes) (12.8%)
.text: 34.2mb (35900712 bytes) (26.7%)
Showing 50 symbols (45 unique) with total pss: 77769551 bytes
Showing 53 symbols (47 unique) with total pss: 77769551 bytes
Histogram of symbols based on PSS:
[2,4): 6 [16,32): 10 [128,256): 2 [131072,262144): 2 [1048576,2097152): 2
[4,8): 6 [32,64): 9 [256,512): 1 [262144,524288): 1 [2097152,4194304): 1
[8,16): 3 [64,128): 1 [65536,131072): 2 [524288,1048576): 2 [33554432,67108864): 2
[2,4): 6 [16,32): 12 [128,256): 2 [65536,131072): 2 [524288,1048576): 2 [33554432,67108864): 2
[4,8): 6 [32,64): 9 [256,512): 1 [131072,262144): 2 [1048576,2097152): 2
[8,16): 3 [64,128): 1 [2048,4096): 1 [262144,524288): 1 [2097152,4194304): 1
Sizes: .text=34.2mb .rodata=5.65mb .data.rel.ro=1.02mb .data=99.4kb .bss=512kb .other=32.4mb total=74.2mb
Counts: .text=19 .rodata=12 .data.rel.ro=4 .data=6 .bss=6 .other=1
Counts: .text=22 .rodata=12 .data.rel.ro=4 .data=6 .bss=6 .other=1
Number of unique paths: 9
Section Legend: t=.text, r=.rodata, R=.data.rel.ro, d=.data, b=.bss, o=.other
......@@ -156,39 +156,45 @@ Index | Running Total | Section@Address | PSS | Path
extFromUUseMapping
31) 41869009 (53.8%) t@0x28d98a 32 base/page_allocator.cc
extFromUUseMapping
32) 77699769 (99.9%) t@Group 35830760 {no path}
32) 77695687 (99.9%) t@Group 35826678 {no path}
** symbol gaps (count=3)
33) 77700217 (99.9%) t@0x28f000 448 $root_gen_dir/third_party/icu/ucnv_ext.c
33) 77696135 (99.9%) t@0x28f000 448 $root_gen_dir/third_party/icu/ucnv_ext.c
ucnv_extMatchFromU
34) 77700245 (99.9%) t@0x28f1c8 28 $root_gen_dir/third_party/icu/ucnv_ext.c
34) 77696163 (99.9%) t@0x28f1c8 28 $root_gen_dir/third_party/icu/ucnv_ext.c
_GLOBAL__sub_I_SkDeviceProfile.cpp
35) 77769369 (100.0%) t@0x28f1e0 69124 $root_gen_dir/third_party/icu/ucnv_ext.c
35) 77765287 (100.0%) t@0x28f1e0 69124 $root_gen_dir/third_party/icu/ucnv_ext.c
foo_bar
36) 77769393 (100.0%) t@0x2a0000 24 (size=48) $root_gen_dir/third_party/icu/ucnv_ext.c
36) 77765311 (100.0%) t@0x2a0000 24 (size=48) $root_gen_dir/third_party/icu/ucnv_ext.c
BazAlias (num_aliases=2)
37) 77769417 (100.0%) t@0x2a0000 24 (size=48) {no path}
37) 77765335 (100.0%) t@0x2a0000 24 (size=48) {no path}
blink::ContiguousContainerBase::shrinkToFit (num_aliases=2)
38) 77769420 (100.0%) t@0x2a0010 3 (size=12) third_party/fft_float.cc
38) 77765338 (100.0%) t@0x2a0010 3 (size=12) third_party/fft_float.cc
BarAlias (num_aliases=4)
39) 77769423 (100.0%) t@0x2a0010 3 (size=12) third_party/fft_float.cc
39) 77765341 (100.0%) t@0x2a0010 3 (size=12) third_party/fft_float.cc
FooAlias (num_aliases=4)
40) 77769426 (100.0%) t@0x2a0010 3 (size=12) $root_gen_dir/third_party/icu/ucnv_ext.c
40) 77765344 (100.0%) t@0x2a0010 3 (size=12) $root_gen_dir/third_party/icu/ucnv_ext.c
blink::ContiguousContainerBase::shrinkToFit (num_aliases=4)
41) 77769429 (100.0%) t@0x2a0010 3 (size=12) third_party/paint.cc
41) 77765347 (100.0%) t@0x2a0010 3 (size=12) third_party/paint.cc
blink::ContiguousContainerBase::shrinkToFit (num_aliases=4)
42) 77769457 (100.0%) t@0x2a0020 28 third_party/container/container.c
42) 77765375 (100.0%) t@0x2a0020 28 third_party/container/container.c
blink::ContiguousContainerBase::ContiguousContainerBase
43) 77769551 (100.0%) t@0x2a1000 94 third_party/container/container.c
43) 77765469 (100.0%) t@0x2a1000 94 third_party/container/container.c
blink::PaintChunker::releasePaintChunks
44) 77769551 (100.0%) b@0x0 262144 third_party/fft_float.cc
44) 77769503 (100.0%) t@0x2a2000 4034 third_party/container/container.c
** outlined function
45) 77769527 (100.0%) t@0x2a2020 24 (size=48) {no path}
** outlined function * 2 (num_aliases=2)
46) 77769551 (100.0%) t@0x2a2020 24 (size=48) {no path}
aliasedWithOutlinedFunction (num_aliases=2)
47) 77769551 (100.0%) b@0x0 262144 third_party/fft_float.cc
ff_cos_131072
45) 77769551 (100.0%) b@0x0 131072 third_party/fft_fixed.cc
48) 77769551 (100.0%) b@0x0 131072 third_party/fft_fixed.cc
ff_cos_131072_fixed
46) 77769551 (100.0%) b@0x0 131072 third_party/fft_float.cc
49) 77769551 (100.0%) b@0x0 131072 third_party/fft_float.cc
ff_cos_65536
47) 77769551 (100.0%) b@0x2dffda0 28 $root_gen_dir/third_party/icu/ucnv_ext.c
50) 77769551 (100.0%) b@0x2dffda0 28 $root_gen_dir/third_party/icu/ucnv_ext.c
g_chrome_content_browser_client
48) 77769551 (100.0%) b@0x2dffe80 200 $root_gen_dir/third_party/icu/ucnv_ext.c
51) 77769551 (100.0%) b@0x2dffe80 200 $root_gen_dir/third_party/icu/ucnv_ext.c
SaveHistogram::atomic_histogram_pointer
49) 77769551 (100.0%) b@0x2dffe84 4 $root_gen_dir/third_party/icu/ucnv_ext.c
52) 77769551 (100.0%) b@0x2dffe84 4 $root_gen_dir/third_party/icu/ucnv_ext.c
g_AnimationFrameTimeHistogram_clazz
......@@ -43,7 +43,7 @@ GroupCount,Address,SizeWithoutPadding,Padding,NumAliases,PSS,Section,Name
,0x28d948,28,0,1,28.0,t,_GLOBAL__sub_I_pacing_sender.cc
,0x28d964,38,0,1,38.0,t,extFromUUseMapping
,0x28d98a,32,0,1,32.0,t,extFromUUseMapping
3,,0,35830760,1,35830760.0,t,** symbol gaps
3,,0,35826678,1,35826678.0,t,** symbol gaps
,0x28f000,448,0,1,448.0,t,ucnv_extMatchFromU
,0x28f1c8,20,8,1,28.0,t,_GLOBAL__sub_I_SkDeviceProfile.cpp
,0x28f1e0,69120,4,1,69124.0,t,foo_bar
......@@ -55,6 +55,9 @@ GroupCount,Address,SizeWithoutPadding,Padding,NumAliases,PSS,Section,Name
,0x2a0010,12,0,4,3.0,t,blink::ContiguousContainerBase::shrinkToFit
,0x2a0020,24,4,1,28.0,t,blink::ContiguousContainerBase::ContiguousContainerBase
,0x2a1000,94,0,1,94.0,t,blink::PaintChunker::releasePaintChunks
,0x2a2000,32,4002,1,4034.0,t,** outlined function
,0x2a2020,48,0,2,24.0,t,** outlined function * 2
,0x2a2020,48,0,2,24.0,t,aliasedWithOutlinedFunction
,0x0,262144,0,1,262144.0,b,ff_cos_131072
,0x0,131072,0,1,131072.0,b,ff_cos_131072_fixed
,0x0,131072,0,1,131072.0,b,ff_cos_65536
......
......@@ -40,10 +40,10 @@ Other section sizes:
.strtab: 0 bytes (0 bytes)
.symtab: 0 bytes (0 bytes)
2 symbols added (+), 2 changed (~), 3 removed (-), 244 unchanged (not shown)
2 symbols added (+), 2 changed (~), 3 removed (-), 245 unchanged (not shown)
Added/Removed by section: .data: +2 .pak.translations: -3
Of changed symbols, 3 grew, 4 shrank
Number of unique symbols 254 -> 253 (-1)
Number of unique symbols 256 -> 255 (-1)
0 paths added, 0 removed, 2 changed
Changed files:
......
......@@ -20,10 +20,10 @@ Section Sizes (Total=0 bytes (0 bytes)):
.rodata: 0 bytes (0 bytes) (0.0%)
.text: 0 bytes (0 bytes) (0.0%)
0 symbols added (+), 0 changed (~), 0 removed (-), 50 unchanged (not shown)
0 symbols added (+), 0 changed (~), 0 removed (-), 53 unchanged (not shown)
Added/Removed by section:
Of changed symbols, 0 grew, 0 shrank
Number of unique symbols 48 -> 48 (+0)
Number of unique symbols 50 -> 50 (+0)
0 paths added, 0 removed, 0 changed
Showing 0 symbols (0 -> 0 unique) with total pss: 0 bytes
......
......@@ -18,6 +18,10 @@ _ELF_OUTPUT = """002b6e20 t $t
002a0010 t BarAlias()
002a0000 t blink::ContiguousContainerBase::shrinkToFit()
002a0000 t BazAlias(bool)
002a2000 t OUTLINED_FUNCTION_0
002a2020 t OUTLINED_FUNCTION_1
002a2020 t OUTLINED_FUNCTION_2
002a2020 t aliasedWithOutlinedFunction()
002b6bb8 t $t.22
""".format(_SHRINK_TO_FIT_CLONE)
......@@ -62,6 +66,9 @@ _OBJECT_OUTPUTS = {
'ink::ContiguousContainerBase&&)'),
('01010101 t (anonymous namespace)::blink::PaintChunker::releasePaintCh'
'unks() [clone .part.1]'),
('01010101 t OUTLINED_FUNCTION_0'),
('01010101 t OUTLINED_FUNCTION_1'),
('01010101 t OUTLINED_FUNCTION_2'),
],
'obj/base/base/page_allocator.o': [
'01010101 t _GLOBAL__sub_I_page_allocator.cc',
......
......@@ -102,6 +102,10 @@ Memory map
.text._ZN10_GLOBAL__N5blink12PaintChunker18releasePaintChunksEv.part.1
0x002a1000 0x5e obj/third_party/WebKit.a(sub/ContiguousContainer.o)
0x002a1001 (anonymous namespace)::blink::PaintChunker::releasePaintChunks() [clone .part.1]
.text.OUTLINED_FUNCTION_0
0x002a2000 0x20 obj/third_party/WebKit.a(sub/ContiguousContainer.o)
.text.OUTLINED_FUNCTION_1
0x002a2020 0x30 obj/third_party/WebKit.a(sub/ContiguousContainer.o)
.ARM.exidx 0x024ca628 0x1771c8
.ARM.exidx.text.startup._GLOBAL__sub_I_page_allocator.cc
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment