# 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()