From cace571c91ce64e42c09f350dfa7c328b89c9862 Mon Sep 17 00:00:00 2001 From: Mitch Phillips Date: Fri, 9 Aug 2019 19:36:41 +0000 Subject: [PATCH] Revert "[asan_symbolize] Fix bug where the frame counter was not incremented." This reverts commit 52a36fae2a3f8560a5be690a67304db5edafc3fe. This commit broke the sanitizer_android buildbot. See comments at https://reviews.llvm.org/rL368373 for more details. llvm-svn: 368472 --- compiler-rt/lib/asan/scripts/asan_symbolize.py | 13 ++---- .../plugin_wrong_frame_number_bug.cpp | 48 ---------------------- .../plugin_wrong_frame_number_bug.py | 31 -------------- 3 files changed, 4 insertions(+), 88 deletions(-) delete mode 100644 compiler-rt/test/asan/TestCases/Posix/asan_symbolize_script/plugin_wrong_frame_number_bug.cpp delete mode 100644 compiler-rt/test/asan/TestCases/Posix/asan_symbolize_script/plugin_wrong_frame_number_bug.py diff --git a/compiler-rt/lib/asan/scripts/asan_symbolize.py b/compiler-rt/lib/asan/scripts/asan_symbolize.py index d3f7032..c26a063 100755 --- a/compiler-rt/lib/asan/scripts/asan_symbolize.py +++ b/compiler-rt/lib/asan/scripts/asan_symbolize.py @@ -431,13 +431,10 @@ class SymbolizationLoop(object): assert result return result - def get_symbolized_lines(self, symbolized_lines, inc_frame_counter=True): + def get_symbolized_lines(self, symbolized_lines): if not symbolized_lines: - if inc_frame_counter: - self.frame_no += 1 return [self.current_line] else: - assert inc_frame_counter result = [] for symbolized_frame in symbolized_lines: result.append(' #%s %s' % (str(self.frame_no), symbolized_frame.rstrip())) @@ -467,17 +464,15 @@ class SymbolizationLoop(object): match = re.match(stack_trace_line_format, line) if not match: logging.debug('Line "{}" does not match regex'.format(line)) - # Not a frame line so don't increment the frame counter. - return self.get_symbolized_lines(None, inc_frame_counter=False) + return [self.current_line] logging.debug(line) _, frameno_str, addr, binary, offset = match.groups() - if not self.using_module_map and not os.path.isabs(binary): # Do not try to symbolicate if the binary is just the module file name # and a module map is unavailable. # FIXME(dliew): This is currently necessary for reports on Darwin that are # partially symbolicated by `atos`. - return self.get_symbolized_lines(None) + return [self.current_line] arch = "" # Arch can be embedded in the filename, e.g.: "libabc.dylib:x86_64h" colon_pos = binary.rfind(":") @@ -496,7 +491,7 @@ class SymbolizationLoop(object): if binary is None: # The binary filter has told us this binary can't be symbolized. logging.debug('Skipping symbolication of binary "%s"', original_binary) - return self.get_symbolized_lines(None) + return [self.current_line] symbolized_line = self.symbolize_address(addr, binary, offset, arch) if not symbolized_line: if original_binary != binary: diff --git a/compiler-rt/test/asan/TestCases/Posix/asan_symbolize_script/plugin_wrong_frame_number_bug.cpp b/compiler-rt/test/asan/TestCases/Posix/asan_symbolize_script/plugin_wrong_frame_number_bug.cpp deleted file mode 100644 index d4450d3..0000000 --- a/compiler-rt/test/asan/TestCases/Posix/asan_symbolize_script/plugin_wrong_frame_number_bug.cpp +++ /dev/null @@ -1,48 +0,0 @@ -// This test case checks for an old bug when using plug-ins that caused -// the stack numbering to be incorrect. - -// RUN: %clangxx_asan -O0 -g %s -o %t -// RUN: %env_asan_opts=symbolize=0 not %run %t DUMMY_ARG > %t.asan_report 2>&1 -// RUN: %asan_symbolize --log-level debug --log-dest %t_debug_log_output.txt -l %t.asan_report --plugins %S/plugin_wrong_frame_number_bug.py > %t.asan_report_sym -// RUN: FileCheck --input-file=%t.asan_report_sym %s - -#include - -int* p; -extern "C" { - -void bug() { - free(p); -} - -void foo(bool call_bug) { - if (call_bug) - bug(); -} - -// This indirection exists so that the call stack -// is reliably large enough. -void do_access_impl() { - *p = 42; -} - -void do_access() { - do_access_impl(); -} - -int main(int argc, char** argv) { - p = (int*) malloc(sizeof(p)); - foo(argc > 1); - do_access(); - free(p); - return 0; -} -} - -// Check that the numbering of the stackframes is correct. - -// CHECK: AddressSanitizer: heap-use-after-free -// CHECK-NEXT: WRITE of size -// CHECK-NEXT: #0 0x{{[0-9a-fA-F]+}} -// CHECK-NEXT: #1 0x{{[0-9a-fA-F]+}} in do_access -// CHECK-NEXT: #2 0x{{[0-9a-fA-F]+}} in main diff --git a/compiler-rt/test/asan/TestCases/Posix/asan_symbolize_script/plugin_wrong_frame_number_bug.py b/compiler-rt/test/asan/TestCases/Posix/asan_symbolize_script/plugin_wrong_frame_number_bug.py deleted file mode 100644 index 4551202..0000000 --- a/compiler-rt/test/asan/TestCases/Posix/asan_symbolize_script/plugin_wrong_frame_number_bug.py +++ /dev/null @@ -1,31 +0,0 @@ -import logging - -class FailOncePlugin(AsanSymbolizerPlugIn): - """ - This is a simple plug-in that always claims - that a binary can't be symbolized on the first - call but succeeds for all subsequent calls. - - This plug-in exists to reproduce an old bug - in the `asan_symbolize.py` script. - - By failing the first symbolization request - we used to cause an early exit in `asan_symbolize.py` - that didn't increment the frame counter which - caused subsequent symbolization attempts to - print the wrong frame number. - """ - def __init__(self): - self.should_fail = True - pass - - def filter_binary_path(self, path): - logging.info('filter_binary_path called in NoOpPlugin') - if self.should_fail: - logging.info('Doing first fail') - self.should_fail = False - return None - logging.info('Doing succeed') - return path - -register_plugin(FailOncePlugin()) -- 2.7.4