diff options
author | Vitaly Buka <vitalybuka@google.com> | 2017-11-01 00:55:52 +0000 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2017-11-01 00:55:52 +0000 |
commit | b3c355d3c87d2ea131fd71836d848fe5aa89d20d (patch) | |
tree | 9ed0aedf85f44e9450071be2ac31c28f4a60a1e4 | |
parent | 142775ac8314b5a2accfb9832e7226856deddbe9 (diff) | |
download | compiler-rt-b3c355d3c87d2ea131fd71836d848fe5aa89d20d.tar.gz |
Revert "[fuzzer] Fix threaded stack printing and nested mallocs"
Fails on darwin
Revert "[fuzzer] Script to detect unbalanced allocation in -trace_malloc output"
Needs previous one.
This reverts commit r317034, r317036.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@317061 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/fuzzer/FuzzerLoop.cpp | 19 | ||||
-rwxr-xr-x | lib/fuzzer/scripts/unbalanced_allocs.py | 93 | ||||
-rw-r--r-- | test/fuzzer/TraceMallocThreadedTest.cpp | 22 | ||||
-rw-r--r-- | test/fuzzer/trace-malloc-threaded.test | 36 | ||||
-rw-r--r-- | test/fuzzer/trace-malloc-unbalanced.test | 27 |
5 files changed, 0 insertions, 197 deletions
diff --git a/lib/fuzzer/FuzzerLoop.cpp b/lib/fuzzer/FuzzerLoop.cpp index 9cb580a30..d3ac4ce7e 100644 --- a/lib/fuzzer/FuzzerLoop.cpp +++ b/lib/fuzzer/FuzzerLoop.cpp @@ -19,7 +19,6 @@ #include <algorithm> #include <cstring> #include <memory> -#include <mutex> #include <set> #if defined(__has_include) @@ -74,24 +73,11 @@ struct MallocFreeTracer { static MallocFreeTracer AllocTracer; -static thread_local bool IsMallocFreeHookDisabled; -static std::mutex MallocFreeStackMutex; - -struct MallocFreeHookDisabler { - MallocFreeHookDisabler() { IsMallocFreeHookDisabled = true; } - ~MallocFreeHookDisabler() { IsMallocFreeHookDisabled = false; } -}; - ATTRIBUTE_NO_SANITIZE_MEMORY void MallocHook(const volatile void *ptr, size_t size) { - // Avoid nested hooks for mallocs/frees in sanitizer. - if (IsMallocFreeHookDisabled) - return; - MallocFreeHookDisabler Disable; size_t N = AllocTracer.Mallocs++; F->HandleMalloc(size); if (int TraceLevel = AllocTracer.TraceLevel) { - std::lock_guard<std::mutex> Lock(MallocFreeStackMutex); Printf("MALLOC[%zd] %p %zd\n", N, ptr, size); if (TraceLevel >= 2 && EF) EF->__sanitizer_print_stack_trace(); @@ -100,13 +86,8 @@ void MallocHook(const volatile void *ptr, size_t size) { ATTRIBUTE_NO_SANITIZE_MEMORY void FreeHook(const volatile void *ptr) { - // Avoid nested hooks for mallocs/frees in sanitizer. - if (IsMallocFreeHookDisabled) - return; - MallocFreeHookDisabler Disable; size_t N = AllocTracer.Frees++; if (int TraceLevel = AllocTracer.TraceLevel) { - std::lock_guard<std::mutex> Lock(MallocFreeStackMutex); Printf("FREE[%zd] %p\n", N, ptr); if (TraceLevel >= 2 && EF) EF->__sanitizer_print_stack_trace(); diff --git a/lib/fuzzer/scripts/unbalanced_allocs.py b/lib/fuzzer/scripts/unbalanced_allocs.py deleted file mode 100755 index a4ce18767..000000000 --- a/lib/fuzzer/scripts/unbalanced_allocs.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python -#===- lib/fuzzer/scripts/unbalanced_allocs.py ------------------------------===# -# -# The LLVM Compiler Infrastructure -# -# This file is distributed under the University of Illinois Open Source -# License. See LICENSE.TXT for details. -# -#===------------------------------------------------------------------------===# -# -# Post-process -trace_malloc=2 output and printout only allocations and frees -# unbalanced inside of fuzzer runs. -# Usage: -# my_fuzzer -trace_malloc=2 -runs=10 2>&1 | unbalanced_allocs.py -skip=5 -# -#===------------------------------------------------------------------------===# - -import argparse -import sys - -_skip = 0 - -def PrintStack(line, stack): - global _skip - if _skip > 0: - return - print 'Unbalanced ' + line.rstrip(); - for l in stack: - print l.rstrip() - -def ProcessStack(line, f): - stack = [] - while line and line.startswith(' #'): - stack += [line] - line = f.readline() - return line, stack - -def ProcessFree(line, f, allocs): - if not line.startswith('FREE['): - return f.readline() - - addr = int(line.split()[1], 16) - next_line, stack = ProcessStack(f.readline(), f) - if addr in allocs: - del allocs[addr] - else: - PrintStack(line, stack) - return next_line - -def ProcessMalloc(line, f, allocs): - if not line.startswith('MALLOC['): - return ProcessFree(line, f, allocs) - - addr = int(line.split()[1], 16) - assert not addr in allocs - - next_line, stack = ProcessStack(f.readline(), f) - allocs[addr] = (line, stack) - return next_line - -def ProcessRun(line, f): - if not line.startswith('MallocFreeTracer: START'): - return ProcessMalloc(line, f, {}) - - allocs = {} - print line.rstrip() - line = f.readline() - while line: - if line.startswith('MallocFreeTracer: STOP'): - global _skip - _skip = _skip - 1 - for _, (l, s) in allocs.iteritems(): - PrintStack(l, s) - print line.rstrip() - return f.readline() - line = ProcessMalloc(line, f, allocs) - return line - -def ProcessFile(f): - line = f.readline() - while line: - line = ProcessRun(line, f); - -def main(argv): - parser = argparse.ArgumentParser() - parser.add_argument('--skip', default=0, help='number of runs to ignore') - args = parser.parse_args() - global _skip - _skip = int(args.skip) + 1 - ProcessFile(sys.stdin) - -if __name__ == '__main__': - main(sys.argv) diff --git a/test/fuzzer/TraceMallocThreadedTest.cpp b/test/fuzzer/TraceMallocThreadedTest.cpp deleted file mode 100644 index 5603af344..000000000 --- a/test/fuzzer/TraceMallocThreadedTest.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. - -// Check that allocation tracing from different threads does not cause -// interleaving of stack traces. -#include <assert.h> -#include <cstddef> -#include <cstdint> -#include <cstring> -#include <thread> - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { - auto C = [&] { - volatile void *a = malloc(5639); - free((void *)a); - }; - std::thread T[] = {std::thread(C), std::thread(C), std::thread(C), - std::thread(C), std::thread(C), std::thread(C)}; - for (auto &X : T) - X.join(); - return 0; -} diff --git a/test/fuzzer/trace-malloc-threaded.test b/test/fuzzer/trace-malloc-threaded.test deleted file mode 100644 index 11f3f0491..000000000 --- a/test/fuzzer/trace-malloc-threaded.test +++ /dev/null @@ -1,36 +0,0 @@ -// FIXME: This test infinite loops on darwin because it crashes -// printing a stack trace repeatedly -UNSUPPORTED: darwin - -RUN: %cpp_compiler %S/TraceMallocThreadedTest.cpp -o %t-TraceMallocThreadedTest - -RUN: %t-TraceMallocThreadedTest -trace_malloc=2 -runs=1 2>&1 | FileCheck %s -CHECK: {{MALLOC\[[0-9]+] +0x[0-9]+ 5639}} -CHECK-NEXT: {{ +\#0 +}} -CHECK-NEXT: {{ +\#1 +}} -CHECK-NEXT: {{ +\#2 +}} - -CHECK: {{MALLOC\[[0-9]+] +0x[0-9]+ 5639}} -CHECK-NEXT: {{ +\#0 +}} -CHECK-NEXT: {{ +\#1 +}} -CHECK-NEXT: {{ +\#2 +}} - -CHECK: {{MALLOC\[[0-9]+] +0x[0-9]+ 5639}} -CHECK-NEXT: {{ +\#0 +}} -CHECK-NEXT: {{ +\#1 +}} -CHECK-NEXT: {{ +\#2 +}} - -CHECK: {{MALLOC\[[0-9]+] +0x[0-9]+ 5639}} -CHECK-NEXT: {{ +\#0 +}} -CHECK-NEXT: {{ +\#1 +}} -CHECK-NEXT: {{ +\#2 +}} - -CHECK: {{MALLOC\[[0-9]+] +0x[0-9]+ 5639}} -CHECK-NEXT: {{ +\#0 +}} -CHECK-NEXT: {{ +\#1 +}} -CHECK-NEXT: {{ +\#2 +}} - -CHECK: {{MALLOC\[[0-9]+] +0x[0-9]+ 5639}} -CHECK-NEXT: {{ +\#0 +}} -CHECK-NEXT: {{ +\#1 +}} -CHECK-NEXT: {{ +\#2 +}} diff --git a/test/fuzzer/trace-malloc-unbalanced.test b/test/fuzzer/trace-malloc-unbalanced.test deleted file mode 100644 index 53b83fb68..000000000 --- a/test/fuzzer/trace-malloc-unbalanced.test +++ /dev/null @@ -1,27 +0,0 @@ -// FIXME: This test infinite loops on darwin because it crashes -// printing a stack trace repeatedly -UNSUPPORTED: darwin - -// Verifies lib/fuzzer/scripts/unbalanced_allocs.py script - -RUN: %cpp_compiler %S/TraceMallocTest.cpp -o %t-TraceMallocTest - -RUN: %t-TraceMallocTest -seed=1 -trace_malloc=1 -runs=100 2>&1 | \ -RUN: %libfuzzer_src/scripts/unbalanced_allocs.py --skip=5 | FileCheck %s - -RUN: %t-TraceMallocTest -seed=1 -trace_malloc=2 -runs=100 2>&1 | \ -RUN: %libfuzzer_src/scripts/unbalanced_allocs.py --skip=5 | FileCheck %s --check-prefixes=CHECK,CHECK2 - -CHECK: MallocFreeTracer: START -CHECK: Unbalanced MALLOC[{{[0-9]+}}] [[PTR:0x[0-9a-f]+]] 4 -CHECK2-NEXT: {{ #0 0x[0-9a-f]+ in }} -CHECK2-NEXT: {{ #1 0x[0-9a-f]+ in }} -CHECK2-NEXT: {{ #2 0x[0-9a-f]+ in }} -CHECK: MallocFreeTracer: STOP - -CHECK: MallocFreeTracer: START -CHECK: Unbalanced FREE[{{[0-9]+}}] [[PTR]] -CHECK2-NEXT: {{ #0 0x[0-9a-f]+ in }} -CHECK2-NEXT: {{ #1 0x[0-9a-f]+ in }} -CHECK2-NEXT: {{ #2 0x[0-9a-f]+ in }} -CHECK: MallocFreeTracer: STOP |