Commit 57946f21 authored by glider@chromium.org's avatar glider@chromium.org

Update asan_symbolize.py to LLVM r213136.

SymbolizationLoop.process_line() has been factored out and can now be used to symbolize the reports line by line.

BUG=235466
NOTRY=true

Review URL: https://codereview.chromium.org/397983002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@283547 0039d316-1c4b-4281-b951-d872f2087c98
parent 3ce59a2f
Name: asan_symbolize.py Name: asan_symbolize.py
License: University of Illinois Open Source License. License: University of Illinois Open Source License.
Version: 209116 Version: 213136
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py?view=co&content-type=text%2Fplain URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py?view=co&content-type=text%2Fplain
asan_symbolize.py is a verbatim copy of asan_symbolize.py in the LLVM trunk. asan_symbolize.py is a verbatim copy of asan_symbolize.py in the LLVM trunk.
...@@ -331,6 +331,7 @@ class SymbolizationLoop(object): ...@@ -331,6 +331,7 @@ class SymbolizationLoop(object):
if self.system not in ['Linux', 'Darwin']: if self.system not in ['Linux', 'Darwin']:
raise Exception('Unknown system') raise Exception('Unknown system')
self.llvm_symbolizer = None self.llvm_symbolizer = None
self.frame_no = 0
def symbolize_address(self, addr, binary, offset): def symbolize_address(self, addr, binary, offset):
# Initialize llvm-symbolizer lazily. # Initialize llvm-symbolizer lazily.
...@@ -352,13 +353,15 @@ class SymbolizationLoop(object): ...@@ -352,13 +353,15 @@ class SymbolizationLoop(object):
assert result assert result
return result return result
def print_symbolized_lines(self, symbolized_lines): def get_symbolized_lines(self, symbolized_lines):
if not symbolized_lines: if not symbolized_lines:
print self.current_line return [self.current_line]
else: else:
result = []
for symbolized_frame in symbolized_lines: for symbolized_frame in symbolized_lines:
print ' #' + str(self.frame_no) + ' ' + symbolized_frame.rstrip() result.append(' #%s %s' % (str(self.frame_no), symbolized_frame.rstrip()))
self.frame_no += 1 self.frame_no += 1
return result
def process_stdin(self): def process_stdin(self):
self.frame_no = 0 self.frame_no = 0
...@@ -366,28 +369,31 @@ class SymbolizationLoop(object): ...@@ -366,28 +369,31 @@ class SymbolizationLoop(object):
line = sys.stdin.readline() line = sys.stdin.readline()
if not line: if not line:
break break
self.current_line = line.rstrip() processed = self.process_line(line)
#0 0x7f6e35cf2e45 (/blah/foo.so+0x11fe45) print ''.join(processed)
stack_trace_line_format = (
'^( *#([0-9]+) *)(0x[0-9a-f]+) *\((.*)\+(0x[0-9a-f]+)\)') def process_line(self, line):
match = re.match(stack_trace_line_format, line) self.current_line = line.rstrip()
if not match: #0 0x7f6e35cf2e45 (/blah/foo.so+0x11fe45)
print self.current_line stack_trace_line_format = (
continue '^( *#([0-9]+) *)(0x[0-9a-f]+) *\((.*)\+(0x[0-9a-f]+)\)')
if DEBUG: match = re.match(stack_trace_line_format, line)
print line if not match:
_, frameno_str, addr, binary, offset = match.groups() return [self.current_line]
if frameno_str == '0': if DEBUG:
# Assume that frame #0 is the first frame of new stack trace. print line
self.frame_no = 0 _, frameno_str, addr, binary, offset = match.groups()
original_binary = binary if frameno_str == '0':
if self.binary_name_filter: # Assume that frame #0 is the first frame of new stack trace.
binary = self.binary_name_filter(binary) self.frame_no = 0
symbolized_line = self.symbolize_address(addr, binary, offset) original_binary = binary
if not symbolized_line: if self.binary_name_filter:
if original_binary != binary: binary = self.binary_name_filter(binary)
symbolized_line = self.symbolize_address(addr, binary, offset) symbolized_line = self.symbolize_address(addr, binary, offset)
self.print_symbolized_lines(symbolized_line) if not symbolized_line:
if original_binary != binary:
symbolized_line = self.symbolize_address(addr, binary, offset)
return self.get_symbolized_lines(symbolized_line)
if __name__ == '__main__': if __name__ == '__main__':
......
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