1# Copyright 2017 syzkaller project authors. All rights reserved. 2# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4''' 5This scripts takes as input a list of header files and generates metadata 6files to make syzkaller device descriptions. 7''' 8 9import argparse 10import logging 11import sys 12import traceback 13 14from headerlib.header_preprocessor import HeaderFilePreprocessorException 15from headerlib.container import GlobalHierarchy 16 17 18def main(): 19 """ 20 python parser.py --filename=A.h,B.h 21 """ 22 23 parser = argparse.ArgumentParser(description='Parse header files to output fuzzer' 24 'struct metadata.') 25 parser.add_argument('--filenames', 26 help='comma-separated header filenames', 27 dest='filenames', 28 required=True) 29 parser.add_argument('--debug', 30 help='print debug-information at every level of parsing', 31 action='store_true') 32 parser.add_argument('--include', 33 help='include the specified file as the first line of the processed header files', 34 required=False, 35 const='', 36 nargs='?') 37 38 args = parser.parse_args() 39 40 loglvl = logging.INFO 41 42 if args.debug: 43 loglvl = logging.DEBUG 44 45 include_lines = '' 46 if args.include: 47 include_lines = open(args.include, 'r').read() 48 49 try: 50 gh = GlobalHierarchy(filenames=args.filenames.split(','), 51 loglvl=loglvl, include_lines=include_lines) 52 except HeaderFilePreprocessorException as e: 53 excdata = traceback.format_exc().splitlines() 54 logging.error(excdata[-1]) 55 sys.exit(-1) 56 57 58 print gh.get_metadata_structs() 59 60if __name__ == '__main__': 61 main() 62