From c3631fc789181c23aa51396f0ff66cd488e4b4f7 Mon Sep 17 00:00:00 2001 From: Zubin Mithra Date: Wed, 23 Aug 2017 14:01:57 +0100 Subject: 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. --- tools/syz-headerparser/headerparser.py | 61 ++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 tools/syz-headerparser/headerparser.py (limited to 'tools/syz-headerparser/headerparser.py') 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() -- cgit mrf-deployment