Tobias Hieta f98ee40f4b
[NFC][Py Reformat] Reformat python files in the rest of the dirs
This is an ongoing series of commits that are reformatting our
Python code. This catches the last of the python files to
reformat. Since they where so few I bunched them together.

Reformatting is done with `black`.

If you end up having problems merging this commit because you
have made changes to a python file, the best way to handle that
is to run git checkout --ours <yourfile> and then reformat it
with black.

If you run into any problems, post to discourse about it and
we will try to help.

RFC Thread below:

https://discourse.llvm.org/t/rfc-document-and-standardize-python-code-style

Reviewed By: jhenderson, #libc, Mordante, sivachandra

Differential Revision: https://reviews.llvm.org/D150784
2023-05-25 11:17:05 +02:00

101 lines
2.5 KiB
Python
Executable File

#!/usr/bin/env python
# ===- lib/fuzzer/scripts/unbalanced_allocs.py ------------------------------===#
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#
# ===------------------------------------------------------------------------===#
#
# 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.items():
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)