Index: tools/valgrind/asan/third_party/asan_symbolize.py |
diff --git a/tools/valgrind/asan/third_party/asan_symbolize.py b/tools/valgrind/asan/third_party/asan_symbolize.py |
index 357366f11e4f093aa0d70190388b1e3023068381..6219c0e8b7acfe5e8b7bf9dbd31a4e1122d37a06 100755 |
--- a/tools/valgrind/asan/third_party/asan_symbolize.py |
+++ b/tools/valgrind/asan/third_party/asan_symbolize.py |
@@ -7,7 +7,6 @@ |
# License. See LICENSE.TXT for details. |
# |
#===------------------------------------------------------------------------===# |
-import argparse |
import bisect |
import getopt |
import os |
@@ -19,26 +18,18 @@ |
symbolizers = {} |
DEBUG = False |
-demangle = False |
-binutils_prefix = None |
-sysroot_path = None |
-binary_name_filter = None |
-fix_filename_patterns = None |
-logfile = None |
+demangle = False; |
+ |
# FIXME: merge the code that calls fix_filename(). |
def fix_filename(file_name): |
- if fix_filename_patterns: |
- for path_to_cut in fix_filename_patterns: |
- file_name = re.sub('.*' + path_to_cut, '', file_name) |
+ for path_to_cut in sys.argv[1:]: |
+ file_name = re.sub('.*' + path_to_cut, '', file_name) |
file_name = re.sub('.*asan_[a-z_]*.cc:[0-9]*', '_asan_rtl_', file_name) |
file_name = re.sub('.*crtstuff.c:0', '???:0', file_name) |
return file_name |
-def sysroot_path_filter(binary_name): |
- return sysroot_path + binary_name |
- |
-def guess_arch(addr): |
+def GuessArch(addr): |
# Guess which arch we're running. 10 = len('0x') + 8 hex digits. |
if len(addr) > 10: |
return 'x86_64' |
@@ -69,7 +60,7 @@ |
def __init__(self, symbolizer_path, addr): |
super(LLVMSymbolizer, self).__init__() |
self.symbolizer_path = symbolizer_path |
- self.default_arch = guess_arch(addr) |
+ self.default_arch = GuessArch(addr) |
self.pipe = self.open_llvm_symbolizer() |
def open_llvm_symbolizer(self): |
@@ -133,10 +124,7 @@ |
self.pipe = self.open_addr2line() |
def open_addr2line(self): |
- addr2line_tool = 'addr2line' |
- if binutils_prefix: |
- addr2line_tool = binutils_prefix + addr2line_tool |
- cmd = [addr2line_tool, '-f'] |
+ cmd = ['addr2line', '-f'] |
if demangle: |
cmd += ['--demangle'] |
cmd += ['-e', self.binary] |
@@ -194,7 +182,7 @@ |
def __init__(self, addr, binary): |
super(DarwinSymbolizer, self).__init__() |
self.binary = binary |
- self.arch = guess_arch(addr) |
+ self.arch = GuessArch(addr) |
self.open_atos() |
def open_atos(self): |
@@ -340,7 +328,7 @@ |
# E.g. in Chrome several binaries may share a single .dSYM. |
self.binary_name_filter = binary_name_filter |
self.system = os.uname()[0] |
- if self.system not in ['Linux', 'Darwin', 'FreeBSD']: |
+ if self.system not in ['Linux', 'Darwin']: |
raise Exception('Unknown system') |
self.llvm_symbolizer = None |
self.frame_no = 0 |
@@ -375,14 +363,14 @@ |
self.frame_no += 1 |
return result |
- def process_logfile(self): |
+ def process_stdin(self): |
self.frame_no = 0 |
while True: |
- line = logfile.readline() |
+ line = sys.stdin.readline() |
if not line: |
break |
processed = self.process_line(line) |
- print '\n'.join(processed) |
+ print ''.join(processed) |
def process_line(self, line): |
self.current_line = line.rstrip() |
@@ -409,33 +397,9 @@ |
if __name__ == '__main__': |
- parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, |
- description='ASan symbolization script', |
- epilog='''Example of use: |
- asan_symbolize.py -c "$HOME/opt/cross/bin/arm-linux-gnueabi-" -s "$HOME/SymbolFiles" < asan.log''') |
- parser.add_argument('path_to_cut', nargs='*', |
- help='pattern to be cut from the result file path ') |
- parser.add_argument('-d','--demangle', action='store_true', |
- help='demangle function names') |
- parser.add_argument('-s', metavar='SYSROOT', |
- help='set path to sysroot for sanitized binaries') |
- parser.add_argument('-c', metavar='CROSS_COMPILE', |
- help='set prefix for binutils') |
- parser.add_argument('-l','--logfile', default=sys.stdin, type=argparse.FileType('r'), |
- help='set log file name to parse, default is stdin') |
- args = parser.parse_args() |
- if args.path_to_cut: |
- fix_filename_patterns = args.path_to_cut |
- if args.demangle: |
- demangle = True |
- if args.s: |
- binary_name_filter = sysroot_path_filter |
- sysroot_path = args.s |
- if args.c: |
- binutils_prefix = args.c |
- if args.logfile: |
- logfile = args.logfile |
- else: |
- logfile = sys.stdin |
- loop = SymbolizationLoop(binary_name_filter) |
- loop.process_logfile() |
+ opts, args = getopt.getopt(sys.argv[1:], "d", ["demangle"]) |
+ for o, a in opts: |
+ if o in ("-d", "--demangle"): |
+ demangle = True; |
+ loop = SymbolizationLoop() |
+ loop.process_stdin() |