Commit 6a15a6c4 authored by Andrew Grieve's avatar Andrew Grieve Committed by Commit Bot

SuperSize: Teach it about thin archives

"supersize archive" would crash upon encountering a .a file that was
linked as a "thin archive" (where the actual .o files are not embedded).

This fixes the tool by transforming all foo.a(bar.o) paths into their
external object paths.

Also adds main() functions for ninja_parser.py for debugging.

Bug: 830843
Change-Id: Iddc374565b8e94a4a89b2faa343256ea2d9f569e
Reviewed-on: https://chromium-review.googlesource.com/1007317
Commit-Queue: agrieve <agrieve@chromium.org>
Reviewed-by: default avatarSamuel Huang <huangs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#550141}
parent 77ad239d
...@@ -85,26 +85,28 @@ between milestones. ...@@ -85,26 +85,28 @@ between milestones.
##### Native Symbols ##### Native Symbols
1. Symbol list is Extracted from linker `.map` file. 1. Symbol list is Extracted from linker `.map` file.
* Map files contain some unique pieces of information compared to `nm` output, * Map files contain some unique pieces of information compared to `nm`
such as `** merge strings` entries, and some unnamed symbols (which output, such as `** merge strings` entries, and some unnamed symbols
although unnamed, contain the `.o` path). (which although unnamed, contain the `.o` path).
1. `.o` files are mapped to `.cc` files by parsing `.ninja` files. 1. `.o` files are mapped to `.cc` files by parsing `.ninja` files.
* This means that `.h` files are never listed as sources. No information about * This means that `.h` files are never listed as sources. No information
inlined symbols is gathered. about inlined symbols is gathered.
1. Symbol aliases (when multiple symbols share an address) are collected from 1. `** merge strings` symbols are further broken down into individual string
debug information via `nm elf-file`. literal symbols. This is done by reading string literals from `.o` files, and
* Aliases are created by identical code folding (linker optimization). then searching for them within the `** merge strings` sections.
1. Symbol aliases:
* Aliases have the same address and size, but report their `.pss` as * Aliases have the same address and size, but report their `.pss` as
`.size / .num_aliases`. `.size / .num_aliases`.
1. `** merge strings` symbols are further broken down into individual string * Type 1: Different names. Caused by identical code folding.
literal symbols. This is done by reading string literals from `.o` files, and * These are collected from debug information via `nm elf-file`.
then searching for them within the `** merge strings` sections. * Type 2: Same names, different paths. Caused by inline functions defined in
1. "Shared symbols" are those that are owned by multiple `.o` files. These include `.h` files.
inline functions defined in `.h` files, and string literals that are de-duped * These are collected by running `nm` on each `.o` file.
at link-time. Shared symbols are normally represented using one symbol alias * Normally represented using one alias per path, but are sometimes
per path, but are sometimes collapsed into a single symbol where the path is collapsed into a single symbol with a path of `{shared}/$SYMBOL_COUNT`.
set to `{shared}/$SYMBOL_COUNT`. This collapsing is done only for symbols owned This collapsing is done only for symbols owned by a large number of paths.
by a large number of paths. * Type 3: String literals that are de-duped at link-time.
* These are found as part of the string literal extraction process.
##### Pak Symbols ##### Pak Symbols
......
#!/usr/bin/env python
# Copyright 2018 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.
"""Logic for reading .a files."""
from __future__ import print_function
import argparse
import logging
import os
def IsThinArchive(path):
"""Returns whether the given .a is a thin archive."""
with open(path, 'rb') as f:
return f.read(8) == '!<thin>\n'
def CreateThinObjectPath(archive_path, subpath):
"""Given the .a path and .o subpath, returns the .o path."""
# .o subpaths in thin archives are relative to the directory of the .a.
parent_path = os.path.dirname(archive_path)
return os.path.normpath(os.path.join(parent_path, subpath))
def IterArchiveChunks(path):
"""For each .o embedded in the given .a file, yields (foo.o, foo_contents)."""
# File format reference:
# https://github.com/pathscale/binutils/blob/master/gold/archive.cc
with open(path, 'rb') as f:
header = f.read(8)
is_thin = header == '!<thin>\n'
if not is_thin and header != '!<arch>\n':
raise Exception('Invalid .a: ' + path)
def read_payload(size):
ret = f.read(size)
# Entries are 2-byte aligned.
if size & 1 != 0:
f.read(1)
return ret
while True:
entry = f.read(60)
if not entry:
return
entry_name = entry[:16].rstrip()
entry_size = int(entry[48:58].rstrip())
if entry_name in ('', '/', '//', '/SYM64/'):
payload = read_payload(entry_size)
# Metadata sections we don't care about.
if entry_name == '//':
name_list = payload
continue
if entry_name[0] == '/':
# Name is specified as location in name table.
# E.g.: /123
name_offset = int(entry_name[1:])
# String table enties are delimited by \n (e.g. "browser.o/\n").
end_idx = name_list.index('\n', name_offset)
entry_name = name_list[name_offset:end_idx]
else:
# Name specified inline with spaces for padding (e.g. "browser.o/ ").
entry_name = entry_name.rstrip()
# Although entry_size exists for thin archives, no data exists in the .a.
entry_data = None if is_thin else read_payload(entry_size)
yield entry_name.rstrip('/'), entry_data
def ExpandThinArchives(paths, output_directory):
"""Expands all thin archives found in |paths| into .o paths.
Args:
paths: List of paths relative to |output_directory|.
output_directory: Output directory.
Returns:
* A new list of paths with all thin archives replaced by .o paths.
* A set of all .a paths that were thin archives.
"""
expanded_paths = []
thin_paths = set()
num_archives = 0
for path in paths:
if not path.endswith('.a'):
expanded_paths.append(path)
continue
num_archives += 1
abs_path = os.path.join(output_directory, path)
if not IsThinArchive(abs_path):
expanded_paths.append(path)
continue
thin_paths.add(path)
# Thin archive.
for subpath, _ in IterArchiveChunks(abs_path):
expanded_paths.append(CreateThinObjectPath(path, subpath))
logging.info('%d of %d .a files were thin archives',
len(thin_paths), num_archives)
return expanded_paths, thin_paths
def CreateThinObjectPath(archive_path, subpath):
parent_path = os.path.dirname(archive_path)
return os.path.normpath(os.path.join(parent_path, subpath))
def main():
parser = argparse.ArgumentParser()
parser.add_argument('ar_path')
parser.add_argument('--expand-thin', action='store_true')
parser.add_argument('--output-directory', default='.')
args = parser.parse_args()
if args.expand_thin:
expanded = ExpandThinArchives([args.ar_path], args.output_directory)[0]
print('\n'.join(expanded))
else:
for name, payload in IterArchiveChunks(args.ar_path):
print('{}: size={}'.format(name, len(payload) if payload else '<thin>'))
if __name__ == '__main__':
main()
...@@ -20,6 +20,7 @@ import tempfile ...@@ -20,6 +20,7 @@ import tempfile
import zipfile import zipfile
import apkanalyzer import apkanalyzer
import ar
import concurrent import concurrent
import demangle import demangle
import describe import describe
...@@ -35,6 +36,16 @@ sys.path.insert(1, os.path.join(path_util.SRC_ROOT, 'tools', 'grit')) ...@@ -35,6 +36,16 @@ sys.path.insert(1, os.path.join(path_util.SRC_ROOT, 'tools', 'grit'))
from grit.format import data_pack from grit.format import data_pack
# Holds computation state that is live only when an output directory exists.
_OutputDirectoryContext = collections.namedtuple('_OutputDirectoryContext', [
'elf_object_paths', # Only when elf_path is also provided.
'known_inputs', # Only when elf_path is also provided.
'output_directory',
'source_mapper',
'thin_archives',
])
# Tunable "knobs" for CreateSectionSizesAndSymbols(). # Tunable "knobs" for CreateSectionSizesAndSymbols().
class SectionSizeKnobs(object): class SectionSizeKnobs(object):
def __init__(self): def __init__(self):
...@@ -190,8 +201,9 @@ def _NormalizeObjectPath(path): ...@@ -190,8 +201,9 @@ def _NormalizeObjectPath(path):
# Convert ../../third_party/... -> third_party/... # Convert ../../third_party/... -> third_party/...
path = path[6:] path = path[6:]
if path.endswith(')'): if path.endswith(')'):
# Convert foo/bar.a(baz.o) -> foo/bar.a/baz.o # Convert foo/bar.a(baz.o) -> foo/bar.a/baz.o so that hierarchical
start_idx = path.index('(') # breakdowns consider the .o part to be a separate node.
start_idx = path.rindex('(')
path = os.path.join(path[:start_idx], path[start_idx + 1:-1]) path = os.path.join(path[:start_idx], path[start_idx + 1:-1])
return path return path
...@@ -373,17 +385,16 @@ def _AssignNmAliasPathsAndCreatePathAliases(raw_symbols, object_paths_by_name): ...@@ -373,17 +385,16 @@ def _AssignNmAliasPathsAndCreatePathAliases(raw_symbols, object_paths_by_name):
return ret return ret
def _DiscoverMissedObjectPaths(raw_symbols, elf_object_paths): def _DiscoverMissedObjectPaths(raw_symbols, known_inputs):
# Missing object paths are caused by .a files added by -l flags, which are not # Missing object paths are caused by .a files added by -l flags, which are not
# listed as explicit inputs within .ninja rules. # listed as explicit inputs within .ninja rules.
parsed_inputs = set(elf_object_paths)
missed_inputs = set() missed_inputs = set()
for symbol in raw_symbols: for symbol in raw_symbols:
path = symbol.object_path path = symbol.object_path
if path.endswith(')'): if path.endswith(')'):
# Convert foo/bar.a(baz.o) -> foo/bar.a # Convert foo/bar.a(baz.o) -> foo/bar.a
path = path[:path.index('(')] path = path[:path.rindex('(')]
if path and path not in parsed_inputs: if path and path not in known_inputs:
missed_inputs.add(path) missed_inputs.add(path)
return missed_inputs return missed_inputs
...@@ -608,9 +619,21 @@ def CreateMetadata(map_path, elf_path, apk_path, tool_prefix, output_directory): ...@@ -608,9 +619,21 @@ def CreateMetadata(map_path, elf_path, apk_path, tool_prefix, output_directory):
return metadata return metadata
def _ParseElfInfo(map_path, elf_path, tool_prefix, output_directory, def _ResolveThinArchivePaths(raw_symbols, thin_archives):
track_string_literals, elf_object_paths): """Converts object_paths for thin archives to external .o paths."""
"""Adds Elf section sizes and symbols.""" for symbol in raw_symbols:
object_path = symbol.object_path
if object_path.endswith(')'):
start_idx = object_path.rindex('(')
archive_path = object_path[:start_idx]
if archive_path in thin_archives:
subpath = object_path[start_idx + 1:-1]
symbol.object_path = ar.CreateThinObjectPath(archive_path, subpath)
def _ParseElfInfo(map_path, elf_path, tool_prefix, track_string_literals,
outdir_context=None):
"""Adds ELF section sizes and symbols."""
if elf_path: if elf_path:
# Run nm on the elf file to retrieve the list of symbol names per-address. # Run nm on the elf file to retrieve the list of symbol names per-address.
# This list is required because the .map file contains only a single name # This list is required because the .map file contains only a single name
...@@ -627,15 +650,19 @@ def _ParseElfInfo(map_path, elf_path, tool_prefix, output_directory, ...@@ -627,15 +650,19 @@ def _ParseElfInfo(map_path, elf_path, tool_prefix, output_directory,
# single path for these symbols. # single path for these symbols.
# Rather than record all paths for each symbol, set the paths to be the # Rather than record all paths for each symbol, set the paths to be the
# common ancestor of all paths. # common ancestor of all paths.
if output_directory: if outdir_context:
bulk_analyzer = nm.BulkObjectFileAnalyzer(tool_prefix, output_directory) bulk_analyzer = nm.BulkObjectFileAnalyzer(
bulk_analyzer.AnalyzePaths(elf_object_paths) tool_prefix, outdir_context.output_directory)
bulk_analyzer.AnalyzePaths(outdir_context.elf_object_paths)
logging.info('Parsing Linker Map') logging.info('Parsing Linker Map')
with _OpenMaybeGz(map_path) as map_file: with _OpenMaybeGz(map_path) as map_file:
section_sizes, raw_symbols = ( section_sizes, raw_symbols = (
linker_map_parser.MapFileParser().Parse(map_file)) linker_map_parser.MapFileParser().Parse(map_file))
if outdir_context and outdir_context.thin_archives:
_ResolveThinArchivePaths(raw_symbols, outdir_context.thin_archives)
if elf_path: if elf_path:
logging.debug('Validating section sizes') logging.debug('Validating section sizes')
elf_section_sizes = _SectionSizesFromElf(elf_path, tool_prefix) elf_section_sizes = _SectionSizesFromElf(elf_path, tool_prefix)
...@@ -646,9 +673,11 @@ def _ParseElfInfo(map_path, elf_path, tool_prefix, output_directory, ...@@ -646,9 +673,11 @@ def _ParseElfInfo(map_path, elf_path, tool_prefix, output_directory,
logging.error('readelf: %r', elf_section_sizes) logging.error('readelf: %r', elf_section_sizes)
sys.exit(1) sys.exit(1)
if elf_path and output_directory: if elf_path and outdir_context:
missed_object_paths = _DiscoverMissedObjectPaths( missed_object_paths = _DiscoverMissedObjectPaths(
raw_symbols, elf_object_paths) raw_symbols, outdir_context.known_inputs)
missed_object_paths = ar.ExpandThinArchives(
missed_object_paths, outdir_context.output_directory)[0]
bulk_analyzer.AnalyzePaths(missed_object_paths) bulk_analyzer.AnalyzePaths(missed_object_paths)
bulk_analyzer.SortPaths() bulk_analyzer.SortPaths()
if track_string_literals: if track_string_literals:
...@@ -674,11 +703,12 @@ def _ParseElfInfo(map_path, elf_path, tool_prefix, output_directory, ...@@ -674,11 +703,12 @@ def _ParseElfInfo(map_path, elf_path, tool_prefix, output_directory,
names_by_address = elf_nm_result.get() names_by_address = elf_nm_result.get()
raw_symbols = _AddNmAliases(raw_symbols, names_by_address) raw_symbols = _AddNmAliases(raw_symbols, names_by_address)
if output_directory: if outdir_context:
object_paths_by_name = bulk_analyzer.GetSymbolNames() object_paths_by_name = bulk_analyzer.GetSymbolNames()
logging.debug('Fetched path information for %d symbols from %d files', logging.debug(
len(object_paths_by_name), 'Fetched path information for %d symbols from %d files',
len(elf_object_paths) + len(missed_object_paths)) 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. # For aliases, this provides path information where there wasn't any.
logging.info('Creating aliases for symbols shared by multiple paths') logging.info('Creating aliases for symbols shared by multiple paths')
...@@ -923,22 +953,42 @@ def CreateSectionSizesAndSymbols( ...@@ -923,22 +953,42 @@ def CreateSectionSizesAndSymbols(
apk_elf_result = concurrent.ForkAndCall( apk_elf_result = concurrent.ForkAndCall(
_ElfInfoFromApk, (apk_path, apk_so_path, tool_prefix)) _ElfInfoFromApk, (apk_path, apk_so_path, tool_prefix))
outdir_context = None
source_mapper = None source_mapper = None
elf_object_paths = None
if output_directory: if output_directory:
# Start by finding the elf_object_paths, so that nm can run on them while # Start by finding the elf_object_paths, so that nm can run on them while
# the linker .map is being parsed. # the linker .map is being parsed.
logging.info('Parsing ninja files.') logging.info('Parsing ninja files.')
source_mapper, elf_object_paths = ninja_parser.Parse( source_mapper, ninja_elf_object_paths = (
output_directory, elf_path) ninja_parser.Parse(output_directory, elf_path))
logging.debug('Parsed %d .ninja files.', source_mapper.parsed_file_count) logging.debug('Parsed %d .ninja files.', source_mapper.parsed_file_count)
assert not elf_path or elf_object_paths, ( assert not elf_path or ninja_elf_object_paths, (
'Failed to find link command in ninja files for ' + 'Failed to find link command in ninja files for ' +
os.path.relpath(elf_path, output_directory)) os.path.relpath(elf_path, output_directory))
if ninja_elf_object_paths:
elf_object_paths, thin_archives = ar.ExpandThinArchives(
ninja_elf_object_paths, output_directory)
known_inputs = set(elf_object_paths)
known_inputs.update(ninja_elf_object_paths)
else:
elf_object_paths = None
known_inputs = None
# When we don't know which elf file is used, just search all paths.
thin_archives = set(
p for p in source_mapper.IterAllPaths()
if p.endswith('.a') and ar.IsThinArchive(
os.path.join(output_directory, p)))
outdir_context = _OutputDirectoryContext(
elf_object_paths=elf_object_paths,
known_inputs=known_inputs,
output_directory=output_directory,
source_mapper=source_mapper,
thin_archives=thin_archives)
section_sizes, raw_symbols = _ParseElfInfo( section_sizes, raw_symbols = _ParseElfInfo(
map_path, elf_path, tool_prefix, output_directory, track_string_literals, map_path, elf_path, tool_prefix, track_string_literals, outdir_context)
elf_object_paths)
elf_overhead_size = _CalculateElfOverhead(section_sizes, elf_path) elf_overhead_size = _CalculateElfOverhead(section_sizes, elf_path)
pak_symbols_by_id = None pak_symbols_by_id = None
...@@ -981,6 +1031,10 @@ def CreateSizeInfo( ...@@ -981,6 +1031,10 @@ def CreateSizeInfo(
section_sizes, raw_symbols, metadata=None, normalize_names=True): section_sizes, raw_symbols, metadata=None, normalize_names=True):
"""Performs operations on all symbols and creates a SizeInfo object.""" """Performs operations on all symbols and creates a SizeInfo object."""
logging.debug('Sorting %d symbols', len(raw_symbols)) logging.debug('Sorting %d symbols', len(raw_symbols))
# TODO(agrieve): Either change this sort so that it's only sorting by section
# (and not using .sort()), or have it specify a total ordering (which must
# also include putting padding-only symbols before others of the same
# address). Note: The sort as-is takes ~1.5 seconds.
raw_symbols.sort(key=lambda s: ( raw_symbols.sort(key=lambda s: (
s.IsPak(), s.IsBss(), s.section_name, s.address)) s.IsPak(), s.IsBss(), s.section_name, s.address))
logging.info('Processed %d symbols', len(raw_symbols)) logging.info('Processed %d symbols', len(raw_symbols))
......
#!/usr/bin/env python
# Copyright 2017 The Chromium Authors. All rights reserved. # Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
"""Extract source file information from .ninja files.""" """Extract source file information from .ninja files."""
from __future__ import print_function
import argparse
import logging import logging
import os import os
import re import re
...@@ -118,3 +122,32 @@ def Parse(output_directory, elf_path): ...@@ -118,3 +122,32 @@ def Parse(output_directory, elf_path):
to_parse.extend(sub_ninjas) to_parse.extend(sub_ninjas)
return _SourceMapper(dep_map, len(seen_paths)), elf_inputs return _SourceMapper(dep_map, len(seen_paths)), elf_inputs
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--output-directory', required=True)
parser.add_argument('--elf-path')
parser.add_argument('--show-inputs', action='store_true')
parser.add_argument('--show-mappings', action='store_true')
args = parser.parse_args()
logging.basicConfig(level=logging.DEBUG,
format='%(levelname).1s %(relativeCreated)6d %(message)s')
source_mapper, elf_inputs = Parse(args.output_directory, args.elf_path)
if not elf_inputs:
elf_inputs = []
print('Found {} elf_inputs, and {} source mappings'.format(
len(elf_inputs), len(source_mapper._dep_map)))
if args.show_inputs:
print('elf_inputs:')
print('\n'.join(elf_inputs))
if args.show_mappings:
print('object_path -> source_path:')
for path in source_mapper.IterAllPaths():
print('{} -> {}'.format(path, source_mapper.FindSourceForPath(path)))
if __name__ == '__main__':
main()
...@@ -30,7 +30,7 @@ BulkObjectFileAnalyzer: ...@@ -30,7 +30,7 @@ BulkObjectFileAnalyzer:
Alias for _BulkObjectFileAnalyzerMaster, but when SUPERSIZE_DISABLE_ASYNC=1, Alias for _BulkObjectFileAnalyzerMaster, but when SUPERSIZE_DISABLE_ASYNC=1,
alias for _BulkObjectFileAnalyzerWorker. alias for _BulkObjectFileAnalyzerWorker.
* AnalyzePaths: Run "nm" on all .o files to collect symbol names that exist * AnalyzePaths: Run "nm" on all .o files to collect symbol names that exist
within each. within each. Does not work with thin archives (expand them first).
* SortPaths: Sort results of AnalyzePaths(). * SortPaths: Sort results of AnalyzePaths().
* AnalyzeStringLiterals: Must be run after AnalyzePaths() has completed. * AnalyzeStringLiterals: Must be run after AnalyzePaths() has completed.
Extracts string literals from .o files, and then locates them within the Extracts string literals from .o files, and then locates them within the
...@@ -57,6 +57,7 @@ import sys ...@@ -57,6 +57,7 @@ import sys
import threading import threading
import traceback import traceback
import ar
import concurrent import concurrent
import demangle import demangle
import models import models
...@@ -263,41 +264,6 @@ def _ReadFileChunks(path, positions): ...@@ -263,41 +264,6 @@ def _ReadFileChunks(path, positions):
return ret return ret
def _IterArchiveChunks(path):
"""For each .o embedded in the given .a file, yields (foo.o, foo_contents)."""
with open(path, 'rb') as f:
if f.read(8) != '!<arch>\n' :
raise Exception('Invalid .a: ' + path)
while True:
line = f.readline()
if not line:
return
parts = line.split()
chunk_size = int(parts[-2])
chunk_data = f.read(chunk_size)
name = parts[0]
if name == '/':
# Initial metadata chunk.
continue
elif name == '//':
name_list = chunk_data
continue
elif name[0] == '/':
# Name is specified as location in name table.
# E.g.: /123
name_offset = int(name[1:])
slash_idx = name_list.index('/', name_offset)
name = name_list[name_offset:slash_idx]
else:
# Name is specified inline.
# E.g.: foo.o/
# Name may not have whitespace before next field, so use rindex.
# E.g.: somelongername.o/1234
name = name[:name.rindex('/')]
yield name, chunk_data
def _ParseOneObjectFileNmOutput(lines): def _ParseOneObjectFileNmOutput(lines):
# Constructors are often repeated because they have the same unmangled # Constructors are often repeated because they have the same unmangled
# name, but multiple mangled names. See: # name, but multiple mangled names. See:
...@@ -332,7 +298,7 @@ def _ReadStringSections(target, output_directory, positions_by_path): ...@@ -332,7 +298,7 @@ def _ReadStringSections(target, output_directory, positions_by_path):
is_archive = isinstance(target, basestring) is_archive = isinstance(target, basestring)
string_sections_by_path = {} string_sections_by_path = {}
if is_archive: if is_archive:
for subpath, chunk in _IterArchiveChunks( for subpath, chunk in ar.IterArchiveChunks(
os.path.join(output_directory, target)): os.path.join(output_directory, target)):
path = '{}({})'.format(target, subpath) path = '{}({})'.format(target, subpath)
positions = positions_by_path.get(path) positions = positions_by_path.get(path)
......
...@@ -24,18 +24,18 @@ Section .bss: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 byt ...@@ -24,18 +24,18 @@ Section .bss: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 byt
* Contains 0 aliases * Contains 0 aliases
* 0 symbols have shared ownership * 0 symbols have shared ownership
.data@2de7000(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelCmpxchg,object_path=base/base/page_allocator.o,source_path=,flags={},num_aliases=1) .data@2de7000(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelCmpxchg,object_path=base/base/page_allocator.o,source_path=,flags={},num_aliases=1)
.data@2de7004(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelMemoryBarrier,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={},num_aliases=1) .data@2de7004(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelMemoryBarrier,object_path=third_party/WebKit.a/sub/ContiguousContainer.o,source_path=,flags={},num_aliases=1)
.data@2de7008(size_without_padding=152,padding=0,full_name=base::android::kBaseRegisteredMethods,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={rel},num_aliases=1) .data@2de7008(size_without_padding=152,padding=0,full_name=base::android::kBaseRegisteredMethods,object_path=third_party/WebKit.a/sub/ContiguousContainer.o,source_path=,flags={rel},num_aliases=1)
.data@2de70a0(size_without_padding=4,padding=0,full_name=base::android::g_renderer_histogram_code,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={anon},num_aliases=1) .data@2de70a0(size_without_padding=4,padding=0,full_name=base::android::g_renderer_histogram_code,object_path=third_party/WebKit.a/sub/ContiguousContainer.o,source_path=,flags={anon},num_aliases=1)
.data@2de70a4(size_without_padding=4,padding=0,full_name=base::android::g_library_version_number,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={anon,rel.loc},num_aliases=1) .data@2de70a4(size_without_padding=4,padding=0,full_name=base::android::g_library_version_number,object_path=third_party/WebKit.a/sub/ContiguousContainer.o,source_path=,flags={anon,rel.loc},num_aliases=1)
.data@2dffd88(size_without_padding=0,padding=101600,full_name=** symbol gap 0 (end of section),object_path=,source_path=,flags={},num_aliases=1) .data@2dffd88(size_without_padding=0,padding=101600,full_name=** symbol gap 0 (end of section),object_path=,source_path=,flags={},num_aliases=1)
.data.rel.ro@2cd8500(size_without_padding=56,padding=0,full_name=ChromeMainDelegateAndroid [vtable],object_path=third_party/WebKit.a/PaintChunker.o,source_path=,flags={},num_aliases=1) .data.rel.ro@2cd8500(size_without_padding=56,padding=0,full_name=ChromeMainDelegateAndroid [vtable],object_path=third_party/WebKit.a/sub/PaintChunker.o,source_path=,flags={},num_aliases=1)
.data.rel.ro@2cd8538(size_without_padding=24,padding=0,full_name=mojo::MessageReceiver [vtable],object_path=base/base/page_allocator.o,source_path=,flags={},num_aliases=1) .data.rel.ro@2cd8538(size_without_padding=24,padding=0,full_name=mojo::MessageReceiver [vtable],object_path=base/base/page_allocator.o,source_path=,flags={},num_aliases=1)
.data.rel.ro@2cd8550(size_without_padding=12,padding=0,full_name=kMethodsAnimationFrameTimeHistogram,object_path=base/base/page_allocator.o,source_path=,flags={},num_aliases=1) .data.rel.ro@2cd8550(size_without_padding=12,padding=0,full_name=kMethodsAnimationFrameTimeHistogram,object_path=base/base/page_allocator.o,source_path=,flags={},num_aliases=1)
.data.rel.ro@2ddc608(size_without_padding=0,padding=1065132,full_name=** symbol gap 0 (end of section),object_path=,source_path=,flags={},num_aliases=1) .data.rel.ro@2ddc608(size_without_padding=0,padding=1065132,full_name=** symbol gap 0 (end of section),object_path=,source_path=,flags={},num_aliases=1)
.data.rel.ro.local@2c176f0(size_without_padding=56,padding=0,full_name=ChromeMainDelegate [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={},num_aliases=1) .data.rel.ro.local@2c176f0(size_without_padding=56,padding=0,full_name=ChromeMainDelegate [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={},num_aliases=1)
.data.rel.ro.local@2c17728(size_without_padding=24,padding=0,full_name=chrome::mojom::FieldTrialRecorder [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={},num_aliases=1) .data.rel.ro.local@2c17728(size_without_padding=24,padding=0,full_name=chrome::mojom::FieldTrialRecorder [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={},num_aliases=1)
.data.rel.ro.local@2c17740(size_without_padding=789904,padding=0,full_name=chrome::mojom::FieldTrialRecorderProxy [vtable],object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={},num_aliases=1) .data.rel.ro.local@2c17740(size_without_padding=789904,padding=0,full_name=chrome::mojom::FieldTrialRecorderProxy [vtable],object_path=third_party/WebKit.a/sub/ContiguousContainer.o,source_path=,flags={},num_aliases=1)
.data.rel.ro.local@2cd84e0(size_without_padding=16,padding=16,full_name=.Lswitch.table.45,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,source_path=,flags={},num_aliases=1) .data.rel.ro.local@2cd84e0(size_without_padding=16,padding=16,full_name=.Lswitch.table.45,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,source_path=,flags={},num_aliases=1)
.data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,full_name=kSystemClassPrefixes,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,source_path=,flags={anon},num_aliases=1) .data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,full_name=kSystemClassPrefixes,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,source_path=,flags={anon},num_aliases=1)
.rodata@266e600(size_without_padding=32,padding=0,full_name=** merge strings,object_path=,source_path=,flags={},num_aliases=1) .rodata@266e600(size_without_padding=32,padding=0,full_name=** merge strings,object_path=,source_path=,flags={},num_aliases=1)
...@@ -44,9 +44,9 @@ Section .bss: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 byt ...@@ -44,9 +44,9 @@ Section .bss: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 byt
.rodata@284e364(size_without_padding=0,padding=3,full_name=** symbol gap 0,object_path=,source_path=,flags={},num_aliases=1) .rodata@284e364(size_without_padding=0,padding=3,full_name=** symbol gap 0,object_path=,source_path=,flags={},num_aliases=1)
.rodata@284e364(size_without_padding=8,padding=0,full_name=,object_path=base/base/page_allocator.o,source_path=,flags={},num_aliases=1) .rodata@284e364(size_without_padding=8,padding=0,full_name=,object_path=base/base/page_allocator.o,source_path=,flags={},num_aliases=1)
.rodata@284e370(size_without_padding=40,padding=4,full_name=Name,object_path=base/base/page_allocator.o,source_path=,flags={},num_aliases=1) .rodata@284e370(size_without_padding=40,padding=4,full_name=Name,object_path=base/base/page_allocator.o,source_path=,flags={},num_aliases=1)
.rodata@284e398(size_without_padding=32,padding=0,full_name=chrome::mojom::FilePatcher::Name_,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={},num_aliases=1) .rodata@284e398(size_without_padding=32,padding=0,full_name=chrome::mojom::FilePatcher::Name_,object_path=third_party/WebKit.a/sub/ContiguousContainer.o,source_path=,flags={},num_aliases=1)
.rodata@28f3450(size_without_padding=48,padding=675992,full_name=kAnimationFrameTimeHistogramClassPath,object_path=third_party/WebKit.a/PaintChunker.o,source_path=,flags={anon},num_aliases=1) .rodata@28f3450(size_without_padding=48,padding=675992,full_name=kAnimationFrameTimeHistogramClassPath,object_path=third_party/WebKit.a/sub/PaintChunker.o,source_path=,flags={anon},num_aliases=1)
.rodata@28f3480(size_without_padding=4,padding=0,full_name=blink::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list,object_path=third_party/WebKit.a/PaintChunker.o,source_path=,flags={anon},num_aliases=1) .rodata@28f3480(size_without_padding=4,padding=0,full_name=blink::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list,object_path=third_party/WebKit.a/sub/PaintChunker.o,source_path=,flags={anon},num_aliases=1)
.rodata@2c158e4(size_without_padding=0,padding=3286112,full_name=** symbol gap 1 (end of section),object_path=,source_path=,flags={},num_aliases=1) .rodata@2c158e4(size_without_padding=0,padding=3286112,full_name=** symbol gap 1 (end of section),object_path=,source_path=,flags={},num_aliases=1)
.text@28d900(size_without_padding=16,padding=0,full_name=_GLOBAL__sub_I_page_allocator.cc,object_path=base/base/page_allocator.o,source_path=,flags={startup},num_aliases=1) .text@28d900(size_without_padding=16,padding=0,full_name=_GLOBAL__sub_I_page_allocator.cc,object_path=base/base/page_allocator.o,source_path=,flags={startup},num_aliases=1)
.text@28d910(size_without_padding=56,padding=0,full_name=_GLOBAL__sub_I_bbr_sender.cc,object_path=base/base/page_allocator.o,source_path=,flags={startup},num_aliases=1) .text@28d910(size_without_padding=56,padding=0,full_name=_GLOBAL__sub_I_bbr_sender.cc,object_path=base/base/page_allocator.o,source_path=,flags={startup},num_aliases=1)
...@@ -57,11 +57,11 @@ Section .bss: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 byt ...@@ -57,11 +57,11 @@ Section .bss: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 byt
.text@28f000(size_without_padding=448,padding=0,full_name=ucnv_extMatchFromU(int const*, int, unsigned short const*, int, unsigned short const*, int, unsigned int*, signed char, signed char),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={},num_aliases=1) .text@28f000(size_without_padding=448,padding=0,full_name=ucnv_extMatchFromU(int const*, int, unsigned short const*, int, unsigned short const*, int, unsigned int*, signed char, signed char),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={},num_aliases=1)
.text@28f1c8(size_without_padding=20,padding=8,full_name=_GLOBAL__sub_I_SkDeviceProfile.cpp,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={startup},num_aliases=1) .text@28f1c8(size_without_padding=20,padding=8,full_name=_GLOBAL__sub_I_SkDeviceProfile.cpp,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={startup},num_aliases=1)
.text@28f1e0(size_without_padding=69120,padding=4,full_name=foo_bar,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={unlikely},num_aliases=1) .text@28f1e0(size_without_padding=69120,padding=4,full_name=foo_bar,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={unlikely},num_aliases=1)
.text@2a0000(size_without_padding=16,padding=32,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/WebKit.a/PaintChunker.o,source_path=,flags={},num_aliases=1) .text@2a0000(size_without_padding=16,padding=32,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/WebKit.a/sub/PaintChunker.o,source_path=,flags={},num_aliases=1)
.text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/WebKit.a/PaintChunker.o,source_path=,flags={clone,hot},num_aliases=1) .text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/WebKit.a/sub/PaintChunker.o,source_path=,flags={clone,hot},num_aliases=1)
.text@2a0020(size_without_padding=24,padding=4,full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&),object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={},num_aliases=1) .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)
.text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1) .text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1)
.text@2a1000(size_without_padding=94,padding=0,full_name=blink::PaintChunker::releasePaintChunks(),object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={anon,clone},num_aliases=1) .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)
.text@24ca628(size_without_padding=0,padding=35821002,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1) .text@24ca628(size_without_padding=0,padding=35821002,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1)
.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) .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)
.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) .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)
......
...@@ -36,18 +36,18 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt ...@@ -36,18 +36,18 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt
* Contains 0 aliases * Contains 0 aliases
* 0 symbols have shared ownership * 0 symbols have shared ownership
.data@2de7000(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelCmpxchg,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1) .data@2de7000(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelCmpxchg,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1)
.data@2de7004(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelMemoryBarrier,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1) .data@2de7004(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelMemoryBarrier,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1)
.data@2de7008(size_without_padding=152,padding=0,full_name=base::android::kBaseRegisteredMethods,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={rel},num_aliases=1) .data@2de7008(size_without_padding=152,padding=0,full_name=base::android::kBaseRegisteredMethods,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container.c,flags={rel},num_aliases=1)
.data@2de70a0(size_without_padding=4,padding=0,full_name=base::android::g_renderer_histogram_code,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon},num_aliases=1) .data@2de70a0(size_without_padding=4,padding=0,full_name=base::android::g_renderer_histogram_code,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container.c,flags={anon},num_aliases=1)
.data@2de70a4(size_without_padding=4,padding=0,full_name=base::android::g_library_version_number,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon,rel.loc},num_aliases=1) .data@2de70a4(size_without_padding=4,padding=0,full_name=base::android::g_library_version_number,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container.c,flags={anon,rel.loc},num_aliases=1)
.data@2dffd88(size_without_padding=0,padding=101600,full_name=** symbol gap 0 (end of section),object_path=,source_path=,flags={},num_aliases=1) .data@2dffd88(size_without_padding=0,padding=101600,full_name=** symbol gap 0 (end of section),object_path=,source_path=,flags={},num_aliases=1)
.data.rel.ro@2cd8500(size_without_padding=56,padding=0,full_name=ChromeMainDelegateAndroid [vtable],object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={},num_aliases=1) .data.rel.ro@2cd8500(size_without_padding=56,padding=0,full_name=ChromeMainDelegateAndroid [vtable],object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={},num_aliases=1)
.data.rel.ro@2cd8538(size_without_padding=24,padding=0,full_name=mojo::MessageReceiver [vtable],object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1) .data.rel.ro@2cd8538(size_without_padding=24,padding=0,full_name=mojo::MessageReceiver [vtable],object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1)
.data.rel.ro@2cd8550(size_without_padding=12,padding=0,full_name=kMethodsAnimationFrameTimeHistogram,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1) .data.rel.ro@2cd8550(size_without_padding=12,padding=0,full_name=kMethodsAnimationFrameTimeHistogram,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1)
.data.rel.ro@2ddc608(size_without_padding=0,padding=1065132,full_name=** symbol gap 0 (end of section),object_path=,source_path=,flags={},num_aliases=1) .data.rel.ro@2ddc608(size_without_padding=0,padding=1065132,full_name=** symbol gap 0 (end of section),object_path=,source_path=,flags={},num_aliases=1)
.data.rel.ro.local@2c176f0(size_without_padding=56,padding=0,full_name=ChromeMainDelegate [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1) .data.rel.ro.local@2c176f0(size_without_padding=56,padding=0,full_name=ChromeMainDelegate [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1)
.data.rel.ro.local@2c17728(size_without_padding=24,padding=0,full_name=chrome::mojom::FieldTrialRecorder [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1) .data.rel.ro.local@2c17728(size_without_padding=24,padding=0,full_name=chrome::mojom::FieldTrialRecorder [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1)
.data.rel.ro.local@2c17740(size_without_padding=789904,padding=0,full_name=chrome::mojom::FieldTrialRecorderProxy [vtable],object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1) .data.rel.ro.local@2c17740(size_without_padding=789904,padding=0,full_name=chrome::mojom::FieldTrialRecorderProxy [vtable],object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1)
.data.rel.ro.local@2cd84e0(size_without_padding=16,padding=16,full_name=.Lswitch.table.45,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,source_path=,flags={},num_aliases=1) .data.rel.ro.local@2cd84e0(size_without_padding=16,padding=16,full_name=.Lswitch.table.45,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,source_path=,flags={},num_aliases=1)
.data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,full_name=kSystemClassPrefixes,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,source_path=,flags={anon},num_aliases=1) .data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,full_name=kSystemClassPrefixes,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,source_path=,flags={anon},num_aliases=1)
.other@0(size_without_padding=0,padding=33984171,full_name=Overhead: ELF file,object_path=,source_path=,flags={},num_aliases=1) .other@0(size_without_padding=0,padding=33984171,full_name=Overhead: ELF file,object_path=,source_path=,flags={},num_aliases=1)
...@@ -59,9 +59,9 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt ...@@ -59,9 +59,9 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt
.rodata@284e364(size_without_padding=0,padding=3,full_name=** symbol gap 0,object_path=,source_path=,flags={},num_aliases=1) .rodata@284e364(size_without_padding=0,padding=3,full_name=** symbol gap 0,object_path=,source_path=,flags={},num_aliases=1)
.rodata@284e364(size_without_padding=8,padding=0,full_name=,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1) .rodata@284e364(size_without_padding=8,padding=0,full_name=,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1)
.rodata@284e370(size_without_padding=40,padding=4,full_name=Name,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1) .rodata@284e370(size_without_padding=40,padding=4,full_name=Name,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1)
.rodata@284e398(size_without_padding=32,padding=0,full_name=chrome::mojom::FilePatcher::Name_,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1) .rodata@284e398(size_without_padding=32,padding=0,full_name=chrome::mojom::FilePatcher::Name_,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1)
.rodata@28f3450(size_without_padding=48,padding=675992,full_name=kAnimationFrameTimeHistogramClassPath,object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1) .rodata@28f3450(size_without_padding=48,padding=675992,full_name=kAnimationFrameTimeHistogramClassPath,object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1)
.rodata@28f3480(size_without_padding=4,padding=0,full_name=blink::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list,object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1) .rodata@28f3480(size_without_padding=4,padding=0,full_name=blink::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list,object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1)
.rodata@2c158e4(size_without_padding=0,padding=3286112,full_name=** symbol gap 1 (end of section),object_path=,source_path=,flags={},num_aliases=1) .rodata@2c158e4(size_without_padding=0,padding=3286112,full_name=** symbol gap 1 (end of section),object_path=,source_path=,flags={},num_aliases=1)
.text@28d900(size_without_padding=16,padding=0,full_name=_GLOBAL__sub_I_page_allocator.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1) .text@28d900(size_without_padding=16,padding=0,full_name=_GLOBAL__sub_I_page_allocator.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1)
.text@28d910(size_without_padding=56,padding=0,full_name=_GLOBAL__sub_I_bbr_sender.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1) .text@28d910(size_without_padding=56,padding=0,full_name=_GLOBAL__sub_I_bbr_sender.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1)
...@@ -76,11 +76,11 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt ...@@ -76,11 +76,11 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt
.text@2a0000(size_without_padding=16,padding=32,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=,source_path=,flags={},num_aliases=2) .text@2a0000(size_without_padding=16,padding=32,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=,source_path=,flags={},num_aliases=2)
.text@2a0010(size_without_padding=12,padding=0,full_name=BarAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4) .text@2a0010(size_without_padding=12,padding=0,full_name=BarAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4)
.text@2a0010(size_without_padding=12,padding=0,full_name=FooAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4) .text@2a0010(size_without_padding=12,padding=0,full_name=FooAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4)
.text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={clone},num_aliases=4)
.text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen,clone},num_aliases=4) .text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen,clone},num_aliases=4)
.text@2a0020(size_without_padding=24,padding=4,full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&),object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1) .text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={clone},num_aliases=4)
.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.c,flags={},num_aliases=1)
.text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1) .text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1)
.text@2a1000(size_without_padding=94,padding=0,full_name=blink::PaintChunker::releasePaintChunks(),object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon,clone},num_aliases=1) .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.c,flags={anon,clone},num_aliases=1)
.text@24ca628(size_without_padding=0,padding=35821002,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1) .text@24ca628(size_without_padding=0,padding=35821002,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1)
.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) .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)
.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) .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)
......
...@@ -40,18 +40,18 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt ...@@ -40,18 +40,18 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt
* Contains 0 aliases * Contains 0 aliases
* 0 symbols have shared ownership * 0 symbols have shared ownership
.data@2de7000(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelCmpxchg,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1) .data@2de7000(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelCmpxchg,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1)
.data@2de7004(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelMemoryBarrier,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1) .data@2de7004(size_without_padding=4,padding=0,full_name=google::protobuf::internal::pLinuxKernelMemoryBarrier,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1)
.data@2de7008(size_without_padding=152,padding=0,full_name=base::android::kBaseRegisteredMethods,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={rel},num_aliases=1) .data@2de7008(size_without_padding=152,padding=0,full_name=base::android::kBaseRegisteredMethods,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container.c,flags={rel},num_aliases=1)
.data@2de70a0(size_without_padding=4,padding=0,full_name=base::android::g_renderer_histogram_code,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon},num_aliases=1) .data@2de70a0(size_without_padding=4,padding=0,full_name=base::android::g_renderer_histogram_code,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container.c,flags={anon},num_aliases=1)
.data@2de70a4(size_without_padding=4,padding=0,full_name=base::android::g_library_version_number,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon,rel.loc},num_aliases=1) .data@2de70a4(size_without_padding=4,padding=0,full_name=base::android::g_library_version_number,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container.c,flags={anon,rel.loc},num_aliases=1)
.data@2dffd88(size_without_padding=0,padding=101600,full_name=** symbol gap 0 (end of section),object_path=,source_path=,flags={},num_aliases=1) .data@2dffd88(size_without_padding=0,padding=101600,full_name=** symbol gap 0 (end of section),object_path=,source_path=,flags={},num_aliases=1)
.data.rel.ro@2cd8500(size_without_padding=56,padding=0,full_name=ChromeMainDelegateAndroid [vtable],object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={},num_aliases=1) .data.rel.ro@2cd8500(size_without_padding=56,padding=0,full_name=ChromeMainDelegateAndroid [vtable],object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={},num_aliases=1)
.data.rel.ro@2cd8538(size_without_padding=24,padding=0,full_name=mojo::MessageReceiver [vtable],object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1) .data.rel.ro@2cd8538(size_without_padding=24,padding=0,full_name=mojo::MessageReceiver [vtable],object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1)
.data.rel.ro@2cd8550(size_without_padding=12,padding=0,full_name=kMethodsAnimationFrameTimeHistogram,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1) .data.rel.ro@2cd8550(size_without_padding=12,padding=0,full_name=kMethodsAnimationFrameTimeHistogram,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1)
.data.rel.ro@2ddc608(size_without_padding=0,padding=1065132,full_name=** symbol gap 0 (end of section),object_path=,source_path=,flags={},num_aliases=1) .data.rel.ro@2ddc608(size_without_padding=0,padding=1065132,full_name=** symbol gap 0 (end of section),object_path=,source_path=,flags={},num_aliases=1)
.data.rel.ro.local@2c176f0(size_without_padding=56,padding=0,full_name=ChromeMainDelegate [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1) .data.rel.ro.local@2c176f0(size_without_padding=56,padding=0,full_name=ChromeMainDelegate [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1)
.data.rel.ro.local@2c17728(size_without_padding=24,padding=0,full_name=chrome::mojom::FieldTrialRecorder [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1) .data.rel.ro.local@2c17728(size_without_padding=24,padding=0,full_name=chrome::mojom::FieldTrialRecorder [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=1)
.data.rel.ro.local@2c17740(size_without_padding=789904,padding=0,full_name=chrome::mojom::FieldTrialRecorderProxy [vtable],object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1) .data.rel.ro.local@2c17740(size_without_padding=789904,padding=0,full_name=chrome::mojom::FieldTrialRecorderProxy [vtable],object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1)
.data.rel.ro.local@2cd84e0(size_without_padding=16,padding=16,full_name=.Lswitch.table.45,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,source_path=,flags={},num_aliases=1) .data.rel.ro.local@2cd84e0(size_without_padding=16,padding=16,full_name=.Lswitch.table.45,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,source_path=,flags={},num_aliases=1)
.data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,full_name=kSystemClassPrefixes,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,source_path=,flags={anon},num_aliases=1) .data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,full_name=kSystemClassPrefixes,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,source_path=,flags={anon},num_aliases=1)
.other@0(size_without_padding=0,padding=33984171,full_name=Overhead: ELF file,object_path=,source_path=,flags={},num_aliases=1) .other@0(size_without_padding=0,padding=33984171,full_name=Overhead: ELF file,object_path=,source_path=,flags={},num_aliases=1)
...@@ -63,9 +63,9 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt ...@@ -63,9 +63,9 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt
.rodata@284e364(size_without_padding=0,padding=3,full_name=** symbol gap 0,object_path=,source_path=,flags={},num_aliases=1) .rodata@284e364(size_without_padding=0,padding=3,full_name=** symbol gap 0,object_path=,source_path=,flags={},num_aliases=1)
.rodata@284e364(size_without_padding=8,padding=0,full_name=,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1) .rodata@284e364(size_without_padding=8,padding=0,full_name=,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1)
.rodata@284e370(size_without_padding=40,padding=4,full_name=Name,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1) .rodata@284e370(size_without_padding=40,padding=4,full_name=Name,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={},num_aliases=1)
.rodata@284e398(size_without_padding=32,padding=0,full_name=chrome::mojom::FilePatcher::Name_,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1) .rodata@284e398(size_without_padding=32,padding=0,full_name=chrome::mojom::FilePatcher::Name_,object_path=third_party/sub/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1)
.rodata@28f3450(size_without_padding=48,padding=675992,full_name=kAnimationFrameTimeHistogramClassPath,object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1) .rodata@28f3450(size_without_padding=48,padding=675992,full_name=kAnimationFrameTimeHistogramClassPath,object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1)
.rodata@28f3480(size_without_padding=4,padding=0,full_name=blink::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list,object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1) .rodata@28f3480(size_without_padding=4,padding=0,full_name=blink::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list,object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={anon},num_aliases=1)
.rodata@2c158e4(size_without_padding=0,padding=3286112,full_name=** symbol gap 1 (end of section),object_path=,source_path=,flags={},num_aliases=1) .rodata@2c158e4(size_without_padding=0,padding=3286112,full_name=** symbol gap 1 (end of section),object_path=,source_path=,flags={},num_aliases=1)
.text@28d900(size_without_padding=16,padding=0,full_name=_GLOBAL__sub_I_page_allocator.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1) .text@28d900(size_without_padding=16,padding=0,full_name=_GLOBAL__sub_I_page_allocator.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1)
.text@28d910(size_without_padding=56,padding=0,full_name=_GLOBAL__sub_I_bbr_sender.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1) .text@28d910(size_without_padding=56,padding=0,full_name=_GLOBAL__sub_I_bbr_sender.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup},num_aliases=1)
...@@ -80,11 +80,11 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt ...@@ -80,11 +80,11 @@ Section .other: has 100.0% of 33984171 bytes accounted for from 1 symbols. 0 byt
.text@2a0000(size_without_padding=16,padding=32,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=,source_path=,flags={},num_aliases=2) .text@2a0000(size_without_padding=16,padding=32,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=,source_path=,flags={},num_aliases=2)
.text@2a0010(size_without_padding=12,padding=0,full_name=BarAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4) .text@2a0010(size_without_padding=12,padding=0,full_name=BarAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4)
.text@2a0010(size_without_padding=12,padding=0,full_name=FooAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4) .text@2a0010(size_without_padding=12,padding=0,full_name=FooAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4)
.text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={clone},num_aliases=4)
.text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen,clone},num_aliases=4) .text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen,clone},num_aliases=4)
.text@2a0020(size_without_padding=24,padding=4,full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&),object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1) .text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/sub/PaintChunker.o,source_path=third_party/paint.cc,flags={clone},num_aliases=4)
.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.c,flags={},num_aliases=1)
.text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1) .text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1)
.text@2a1000(size_without_padding=94,padding=0,full_name=blink::PaintChunker::releasePaintChunks(),object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon,clone},num_aliases=1) .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.c,flags={anon,clone},num_aliases=1)
.text@24ca628(size_without_padding=0,padding=35821002,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1) .text@24ca628(size_without_padding=0,padding=35821002,full_name=** symbol gap 2 (end of section),object_path=,source_path=,flags={},num_aliases=1)
.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) .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)
.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) .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)
......
...@@ -170,9 +170,9 @@ Index | Running Total | Section@Address | PSS | Path ...@@ -170,9 +170,9 @@ Index | Running Total | Section@Address | PSS | Path
BarAlias (num_aliases=4) BarAlias (num_aliases=4)
39) 77769423 (100.0%) t@0x2a0010 3 (size=12) third_party/fft_float.cc 39) 77769423 (100.0%) t@0x2a0010 3 (size=12) third_party/fft_float.cc
FooAlias (num_aliases=4) FooAlias (num_aliases=4)
40) 77769426 (100.0%) t@0x2a0010 3 (size=12) third_party/paint.cc 40) 77769426 (100.0%) t@0x2a0010 3 (size=12) $root_gen_dir/third_party/icu/ucnv_ext.c
blink::ContiguousContainerBase::shrinkToFit (num_aliases=4) blink::ContiguousContainerBase::shrinkToFit (num_aliases=4)
41) 77769429 (100.0%) t@0x2a0010 3 (size=12) $root_gen_dir/third_party/icu/ucnv_ext.c 41) 77769429 (100.0%) t@0x2a0010 3 (size=12) third_party/paint.cc
blink::ContiguousContainerBase::shrinkToFit (num_aliases=4) blink::ContiguousContainerBase::shrinkToFit (num_aliases=4)
42) 77769457 (100.0%) t@0x2a0020 28 third_party/container.c 42) 77769457 (100.0%) t@0x2a0020 28 third_party/container.c
blink::ContiguousContainerBase::ContiguousContainerBase blink::ContiguousContainerBase::ContiguousContainerBase
......
...@@ -55,5 +55,5 @@ Section Legend: t=.text, r=.rodata, R=.data.rel.ro, d=.data, b=.bss ...@@ -55,5 +55,5 @@ Section Legend: t=.text, r=.rodata, R=.data.rel.ro, d=.data, b=.bss
Index | Running Total | Section@Address | ... Index | Running Total | Section@Address | ...
------------------------------------------------------------ ------------------------------------------------------------
~ 0) 10 (100.0%) d@0x2de70a0 +10 (-6->4) num_aliases=1 ~ 0) 10 (100.0%) d@0x2de70a0 +10 (-6->4) num_aliases=1
source_path=third_party/container.c object_path=third_party/WebKit.a/ContiguousContainer.o source_path=third_party/container.c object_path=third_party/sub/ContiguousContainer.o
flags={} name=base::android::g_renderer_histogram_code flags={} name=base::android::g_renderer_histogram_code
!<thin>
/ 0 0 0 0 60 `
For convenience, each line of this string table is 60 bytes
// 0 0 0 0 120 `
sub/PaintChunker.o/
sub/ContiguousContainer.o/
/40 0 0 0 644 281516 `
/93 0 0 0 644 281516 `
This file has to exist so that it can be checked for whether or not it is a
thin archive. Thin archives start with "!<thin>\n". As you can see, this file is
not a thin archive.
...@@ -38,16 +38,14 @@ _OBJECT_OUTPUTS = { ...@@ -38,16 +38,14 @@ _OBJECT_OUTPUTS = {
' int, unsigned short const*, int, unsigned int*, signed char, signed ' ' int, unsigned short const*, int, unsigned int*, signed char, signed '
'char)'), 'char)'),
], ],
'obj/third_party/WebKit.a': [ 'obj/third_party/sub/PaintChunker.o': [
'',
'PaintChunker.o:',
'01010101 t ' + _SHRINK_TO_FIT, '01010101 t ' + _SHRINK_TO_FIT,
'010101 t (anonymous namespace)::kAnimationFrameTimeHistogramClassPath', '010101 t (anonymous namespace)::kAnimationFrameTimeHistogramClassPath',
'010101 r vtable for ChromeMainDelegateAndroid', '010101 r vtable for ChromeMainDelegateAndroid',
('01010101 r blink::(anonymous namespace)::CSSValueKeywordsHash::findVa' ('01010101 r blink::(anonymous namespace)::CSSValueKeywordsHash::findVa'
'lueImpl(char const*, unsigned int)::value_word_list'), 'lueImpl(char const*, unsigned int)::value_word_list'),
'', ],
'ContiguousContainer.o:', 'obj/third_party/sub/ContiguousContainer.o': [
'01010101 d chrome::mojom::FilePatcher::Name_', '01010101 d chrome::mojom::FilePatcher::Name_',
'01010101 r vtable for chrome::mojom::FieldTrialRecorderProxy', '01010101 r vtable for chrome::mojom::FieldTrialRecorderProxy',
'01010101 r google::protobuf::internal::pLinuxKernelMemoryBarrier', '01010101 r google::protobuf::internal::pLinuxKernelMemoryBarrier',
......
...@@ -90,17 +90,17 @@ Memory map ...@@ -90,17 +90,17 @@ Memory map
.text.unlikely.foo_bar .text.unlikely.foo_bar
0x0028f1e0 0x10e00 ./obj/third_party/icu/../icu/icuuc/ucnv_ext.o 0x0028f1e0 0x10e00 ./obj/third_party/icu/../icu/icuuc/ucnv_ext.o
.text._ZN5blink23ContiguousContainerBase11shrinkToFitEv .text._ZN5blink23ContiguousContainerBase11shrinkToFitEv
0x002a0000 0x10 obj/third_party/WebKit.a(PaintChunker.o) 0x002a0000 0x10 obj/third_party/WebKit.a(sub/PaintChunker.o)
0x002a0001 blink::ContiguousContainerBase::shrinkToFit() 0x002a0001 blink::ContiguousContainerBase::shrinkToFit()
.text.hot._ZN5blink23ContiguousContainerBase11shrinkToFitEv2.part.1234.isra.2 .text.hot._ZN5blink23ContiguousContainerBase11shrinkToFitEv2.part.1234.isra.2
0x002a0010 0xc obj/third_party/WebKit.a(PaintChunker.o) 0x002a0010 0xc obj/third_party/WebKit.a(sub/PaintChunker.o)
0x002a0011 blink::ContiguousContainerBase::shrinkToFit() 0x002a0011 blink::ContiguousContainerBase::shrinkToFit()
.text._ZN5blink23ContiguousContainerBaseC2EOS0_ .text._ZN5blink23ContiguousContainerBaseC2EOS0_
0xffffffffffffffff 0x18 obj/third_party/WebKit.a(ContiguousContainer.o) 0xffffffffffffffff 0x18 obj/third_party/WebKit.a(sub/ContiguousContainer.o)
0x002a0021 blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&) 0x002a0021 blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&)
0x002a0021 blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&) 0x002a0021 blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&)
.text._ZN10_GLOBAL__N5blink12PaintChunker18releasePaintChunksEv.part.1 .text._ZN10_GLOBAL__N5blink12PaintChunker18releasePaintChunksEv.part.1
0x002a1000 0x5e obj/third_party/WebKit.a(ContiguousContainer.o) 0x002a1000 0x5e obj/third_party/WebKit.a(sub/ContiguousContainer.o)
0x002a1001 (anonymous namespace)::blink::PaintChunker::releasePaintChunks() [clone .part.1] 0x002a1001 (anonymous namespace)::blink::PaintChunker::releasePaintChunks() [clone .part.1]
.ARM.exidx 0x024ca628 0x1771c8 .ARM.exidx 0x024ca628 0x1771c8
...@@ -123,12 +123,12 @@ Memory map ...@@ -123,12 +123,12 @@ Memory map
0x0284e370 0x28 obj/base/base/page_allocator.o 0x0284e370 0x28 obj/base/base/page_allocator.o
0x0284e370 Name 0x0284e370 Name
.rodata._ZN6chrome5mojom11FilePatcher5Name_E .rodata._ZN6chrome5mojom11FilePatcher5Name_E
0x0284e398 0x20 obj/third_party/WebKit.a(ContiguousContainer.o) 0x0284e398 0x20 obj/third_party/WebKit.a(sub/ContiguousContainer.o)
0x0284e398 chrome::mojom::FilePatcher::Name_ 0x0284e398 chrome::mojom::FilePatcher::Name_
.rodata._ZN12_GLOBAL__N_1L37kAnimationFrameTimeHistogramClassPathE .rodata._ZN12_GLOBAL__N_1L37kAnimationFrameTimeHistogramClassPathE
0x028f3450 0x30 obj/third_party/WebKit.a(PaintChunker.o) 0x028f3450 0x30 obj/third_party/WebKit.a(sub/PaintChunker.o)
.rodata._ZZN10_GLOBAL__N5blink20CSSValueKeywordsHash13findValueImplEPKcjE15value_word_list .rodata._ZZN10_GLOBAL__N5blink20CSSValueKeywordsHash13findValueImplEPKcjE15value_word_list
0x028f3480 0x4 obj/third_party/WebKit.a(PaintChunker.o) 0x028f3480 0x4 obj/third_party/WebKit.a(sub/PaintChunker.o)
0x028f3480 blink::(anonymous namespace)::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list 0x028f3480 blink::(anonymous namespace)::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list
.data.rel.ro.local .data.rel.ro.local
...@@ -140,7 +140,7 @@ Memory map ...@@ -140,7 +140,7 @@ Memory map
0x02c17728 0x18 ./obj/third_party/icu/../icu/icuuc/ucnv_ext.o 0x02c17728 0x18 ./obj/third_party/icu/../icu/icuuc/ucnv_ext.o
0x02c17728 vtable for chrome::mojom::FieldTrialRecorder 0x02c17728 vtable for chrome::mojom::FieldTrialRecorder
.data.rel.ro.local._ZTVN6chrome5mojom23FieldTrialRecorderProxyE .data.rel.ro.local._ZTVN6chrome5mojom23FieldTrialRecorderProxyE
0x02c17740 0xc0d90 obj/third_party/WebKit.a(ContiguousContainer.o) 0x02c17740 0xc0d90 obj/third_party/WebKit.a(sub/ContiguousContainer.o)
0x02c17740 vtable for chrome::mojom::FieldTrialRecorderProxy 0x02c17740 vtable for chrome::mojom::FieldTrialRecorderProxy
.data.rel.ro.local..Lswitch.table.45 .data.rel.ro.local..Lswitch.table.45
0x02cd84e0 0x10 ../../third_party/gvr-android-sdk/libgvr_shim_static_arm.a(libcontroller_api_impl.a_controller_api_impl.o) 0x02cd84e0 0x10 ../../third_party/gvr-android-sdk/libgvr_shim_static_arm.a(libcontroller_api_impl.a_controller_api_impl.o)
...@@ -149,7 +149,7 @@ Memory map ...@@ -149,7 +149,7 @@ Memory map
.data.rel.ro 0x02cd8500 0x104108 .data.rel.ro 0x02cd8500 0x104108
.data.rel.ro._ZTV25ChromeMainDelegateAndroid .data.rel.ro._ZTV25ChromeMainDelegateAndroid
0x02cd8500 0x38 obj/third_party/WebKit.a(PaintChunker.o) 0x02cd8500 0x38 obj/third_party/WebKit.a(sub/PaintChunker.o)
0x02cd8500 vtable for ChromeMainDelegateAndroid 0x02cd8500 vtable for ChromeMainDelegateAndroid
.data.rel.ro._ZTVN4mojo15MessageReceiverE .data.rel.ro._ZTVN4mojo15MessageReceiverE
0x02cd8538 0x18 obj/base/base/page_allocator.o 0x02cd8538 0x18 obj/base/base/page_allocator.o
...@@ -179,14 +179,14 @@ Memory map ...@@ -179,14 +179,14 @@ Memory map
0x02de7000 0x4 obj/base/base/page_allocator.o 0x02de7000 0x4 obj/base/base/page_allocator.o
0x02de7000 google::protobuf::internal::pLinuxKernelCmpxchg 0x02de7000 google::protobuf::internal::pLinuxKernelCmpxchg
.data._ZN6google8protobuf8internal25pLinuxKernelMemoryBarrierE .data._ZN6google8protobuf8internal25pLinuxKernelMemoryBarrierE
0x02de7004 0x4 obj/third_party/WebKit.a(ContiguousContainer.o) 0x02de7004 0x4 obj/third_party/WebKit.a(sub/ContiguousContainer.o)
0x02de7004 google::protobuf::internal::pLinuxKernelMemoryBarrier 0x02de7004 google::protobuf::internal::pLinuxKernelMemoryBarrier
.data.rel._ZN4base7androidL22kBaseRegisteredMethodsE .data.rel._ZN4base7androidL22kBaseRegisteredMethodsE
0x02de7008 0x98 obj/third_party/WebKit.a(ContiguousContainer.o) 0x02de7008 0x98 obj/third_party/WebKit.a(sub/ContiguousContainer.o)
.data._ZN4base7android12_GLOBAL__N_125g_renderer_histogram_codeE .data._ZN4base7android12_GLOBAL__N_125g_renderer_histogram_codeE
0x02de70a0 0x4 obj/third_party/WebKit.a(ContiguousContainer.o) 0x02de70a0 0x4 obj/third_party/WebKit.a(sub/ContiguousContainer.o)
.data.rel.local._ZN4base7android12_GLOBAL__N_124g_library_version_numberE .data.rel.local._ZN4base7android12_GLOBAL__N_124g_library_version_numberE
0x02de70a4 0x4 obj/third_party/WebKit.a(ContiguousContainer.o) 0x02de70a4 0x4 obj/third_party/WebKit.a(sub/ContiguousContainer.o)
.bss 0x02dffda0 0x13d7e8 .bss 0x02dffda0 0x13d7e8
.bss.g_chrome_content_browser_client .bss.g_chrome_content_browser_client
......
This file has to exist so that it can be checked for whether or not it is a
thin archive. Thin archives start with "!<thin>\n". As you can see, this file is
not a thin archive.
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