| 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()
|
|
|