Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Unified Diff: tools/binary_size/libsupersize/models.py

Issue 2828333003: supersize: Strip linker-added prefixes from symbol names (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/binary_size/libsupersize/models.py
diff --git a/tools/binary_size/libsupersize/models.py b/tools/binary_size/libsupersize/models.py
index 7e2ceb1c123752c70afe25604f95a280eec36b45..93843dcc92f1877aa6b46f17bf19aac6de250545 100644
--- a/tools/binary_size/libsupersize/models.py
+++ b/tools/binary_size/libsupersize/models.py
@@ -47,6 +47,12 @@ SECTION_TO_SECTION_NAME = {
't': '.text',
}
+FLAG_ANONYMOUS = 1
+FLAG_STARTUP = 2
+FLAG_UNLIKELY = 4
+FLAG_REL = 8
+FLAG_REL_LOCAL = 16
+
class SizeInfo(object):
"""Represents all size information for a single binary.
@@ -122,6 +128,28 @@ class BaseSymbol(object):
def end_address(self):
return self.address + self.size_without_padding
+ @property
+ def is_anonymous(self):
+ return bool(self.flags & FLAG_ANONYMOUS)
+
+ def FlagsString(self):
+ # Most flags are 0.
+ flags = self.flags
+ if not flags:
+ return '{}'
+ parts = []
+ if flags & FLAG_ANONYMOUS:
+ parts.append('anon')
+ if flags & FLAG_STARTUP:
+ parts.append('startup')
+ if flags & FLAG_UNLIKELY:
+ parts.append('unlikely')
+ if flags & FLAG_REL:
+ parts.append('rel')
+ if flags & FLAG_REL_LOCAL:
+ parts.append('rel.loc')
+ return '{%s}' % ','.join(parts)
+
def IsBss(self):
return self.section_name == '.bss'
@@ -156,7 +184,7 @@ class Symbol(BaseSymbol):
__slots__ = (
'address',
'full_name',
- 'is_anonymous',
+ 'flags',
'object_path',
'name',
'padding',
@@ -166,8 +194,8 @@ class Symbol(BaseSymbol):
)
def __init__(self, section_name, size_without_padding, address=None,
- name=None, source_path=None, object_path=None,
- full_name=None, is_anonymous=False):
+ name=None, source_path=None, object_path=None, full_name=None,
+ flags=0):
self.section_name = section_name
self.address = address or 0
self.name = name or ''
@@ -175,16 +203,14 @@ class Symbol(BaseSymbol):
self.source_path = source_path or ''
self.object_path = object_path or ''
self.size = size_without_padding
- # Change this to be a bitfield of flags if ever there is a need to add
- # another similar thing.
- self.is_anonymous = is_anonymous
+ self.flags = flags
self.padding = 0
def __repr__(self):
- return ('%s@%x(size_without_padding=%d,padding=%d,name=%s,path=%s,anon=%d)'
+ return ('%s@%x(size_without_padding=%d,padding=%d,name=%s,path=%s,flags=%s)'
% (self.section_name, self.address, self.size_without_padding,
self.padding, self.name, self.source_path or self.object_path,
- int(self.is_anonymous)))
+ self.FlagsString()))
class SymbolGroup(BaseSymbol):
@@ -269,10 +295,9 @@ class SymbolGroup(BaseSymbol):
return first if all(s.address == first for s in self._symbols) else 0
@property
- def is_anonymous(self):
- first = self._symbols[0].is_anonymous
- return first if all(
- s.is_anonymous == first for s in self._symbols) else False
+ def flags(self):
+ first = self._symbols[0].flags
+ return first if all(s.flags == first for s in self._symbols) else 0
@property
def object_path(self):
@@ -651,7 +676,7 @@ def _DiffSymbols(before, after):
source_path=after_sym.source_path,
object_path=after_sym.object_path,
full_name=after_sym.full_name,
- is_anonymous=after_sym.is_anonymous)
+ flags=after_sym.flags)
# Diffs are more stable when comparing size without padding, except when
# the symbol is a padding-only symbol.
« no previous file with comments | « tools/binary_size/libsupersize/file_format.py ('k') | tools/binary_size/libsupersize/testdata/ActualDiff.golden » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698