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 a2f34f63e85e0eb9d5d8a54ffedfccd1731640aa..6219c0e8b7acfe5e8b7bf9dbd31a4e1122d37a06 100755 |
--- a/tools/valgrind/asan/third_party/asan_symbolize.py |
+++ b/tools/valgrind/asan/third_party/asan_symbolize.py |
@@ -331,6 +331,7 @@ class SymbolizationLoop(object): |
if self.system not in ['Linux', 'Darwin']: |
raise Exception('Unknown system') |
self.llvm_symbolizer = None |
+ self.frame_no = 0 |
def symbolize_address(self, addr, binary, offset): |
# Initialize llvm-symbolizer lazily. |
@@ -352,13 +353,15 @@ class SymbolizationLoop(object): |
assert result |
return result |
- def print_symbolized_lines(self, symbolized_lines): |
+ def get_symbolized_lines(self, symbolized_lines): |
if not symbolized_lines: |
- print self.current_line |
+ return [self.current_line] |
else: |
+ result = [] |
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 |
+ return result |
def process_stdin(self): |
self.frame_no = 0 |
@@ -366,28 +369,31 @@ class SymbolizationLoop(object): |
line = sys.stdin.readline() |
if not line: |
break |
- self.current_line = line.rstrip() |
- #0 0x7f6e35cf2e45 (/blah/foo.so+0x11fe45) |
- stack_trace_line_format = ( |
- '^( *#([0-9]+) *)(0x[0-9a-f]+) *\((.*)\+(0x[0-9a-f]+)\)') |
- match = re.match(stack_trace_line_format, line) |
- if not match: |
- print self.current_line |
- continue |
- if DEBUG: |
- print line |
- _, frameno_str, addr, binary, offset = match.groups() |
- if frameno_str == '0': |
- # Assume that frame #0 is the first frame of new stack trace. |
- self.frame_no = 0 |
- original_binary = binary |
- if self.binary_name_filter: |
- binary = self.binary_name_filter(binary) |
- symbolized_line = self.symbolize_address(addr, binary, offset) |
- if not symbolized_line: |
- if original_binary != binary: |
- symbolized_line = self.symbolize_address(addr, binary, offset) |
- self.print_symbolized_lines(symbolized_line) |
+ processed = self.process_line(line) |
+ print ''.join(processed) |
+ |
+ def process_line(self, line): |
+ self.current_line = line.rstrip() |
+ #0 0x7f6e35cf2e45 (/blah/foo.so+0x11fe45) |
+ stack_trace_line_format = ( |
+ '^( *#([0-9]+) *)(0x[0-9a-f]+) *\((.*)\+(0x[0-9a-f]+)\)') |
+ match = re.match(stack_trace_line_format, line) |
+ if not match: |
+ return [self.current_line] |
+ if DEBUG: |
+ print line |
+ _, frameno_str, addr, binary, offset = match.groups() |
+ if frameno_str == '0': |
+ # Assume that frame #0 is the first frame of new stack trace. |
+ self.frame_no = 0 |
+ original_binary = binary |
+ if self.binary_name_filter: |
+ binary = self.binary_name_filter(binary) |
+ symbolized_line = self.symbolize_address(addr, binary, offset) |
+ 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__': |