diff options
| author | Zubin Mithra <zsm@google.com> | 2017-08-23 14:01:57 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-08-25 17:23:52 +0200 |
| commit | c3631fc789181c23aa51396f0ff66cd488e4b4f7 (patch) | |
| tree | 7ffbc3082b6f8cac56de418bd51ee54d98eb3df7 /tools/syz-headerparser/headerparser.py | |
| parent | 3f1aca4826c84d52da6047a8a5c9325727525c8d (diff) | |
tools: add headerparser as a tool to assist in writing system call descriptions
The tool can be found inside tools/syz-headerparser. Details on how to use
headerparser can be found inside docs/headerparser_usage.md.
Diffstat (limited to 'tools/syz-headerparser/headerparser.py')
| -rw-r--r-- | tools/syz-headerparser/headerparser.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/tools/syz-headerparser/headerparser.py b/tools/syz-headerparser/headerparser.py new file mode 100644 index 000000000..e9f64f2f6 --- /dev/null +++ b/tools/syz-headerparser/headerparser.py @@ -0,0 +1,61 @@ +# Copyright 2017 syzkaller project authors. All rights reserved. +# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. + +''' +This scripts takes as input a list of header files and generates metadata +files to make syzkaller device descriptions. +''' + +import argparse +import logging +import sys +import traceback + +from headerlib.header_preprocessor import HeaderFilePreprocessorException +from headerlib.container import GlobalHierarchy + + +def main(): + """ + python parser.py --filename=A.h,B.h + """ + + parser = argparse.ArgumentParser(description='Parse header files to output fuzzer' + 'struct metadata.') + parser.add_argument('--filenames', + help='comma-separated header filenames', + dest='filenames', + required=True) + parser.add_argument('--debug', + help='print debug-information at every level of parsing', + action='store_true') + parser.add_argument('--include', + help='include the specified file as the first line of the processed header files', + required=False, + const='', + nargs='?') + + args = parser.parse_args() + + loglvl = logging.INFO + + if args.debug: + loglvl = logging.DEBUG + + include_lines = '' + if args.include: + include_lines = open(args.include, 'r').read() + + try: + gh = GlobalHierarchy(filenames=args.filenames.split(','), + loglvl=loglvl, include_lines=include_lines) + except HeaderFilePreprocessorException as e: + excdata = traceback.format_exc().splitlines() + logging.error(excdata[-1]) + sys.exit(-1) + + + print gh.get_metadata_structs() + +if __name__ == '__main__': + main() |
