12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #!/usr/bin/env python3
- #
- # Copyright (c) 2018 Intel Corporation
- #
- # SPDX-License-Identifier: Apache-2.0
- """This script will parse the serial console log file and create the required
- gcda files.
- """
- import argparse
- import os
- import re
- def retrieve_data(input_file):
- extracted_coverage_info = {}
- capture_data = False
- reached_end = False
- with open(input_file, 'r') as fp:
- for line in fp.readlines():
- if re.search("GCOV_COVERAGE_DUMP_START", line):
- capture_data = True
- continue
- if re.search("GCOV_COVERAGE_DUMP_END", line):
- reached_end = True
- break
- # Loop until the coverage data is found.
- if not capture_data:
- continue
- # Remove the leading delimiter "*"
- file_name = line.split("<")[0][1:]
- # Remove the trailing new line char
- hex_dump = line.split("<")[1][:-1]
- extracted_coverage_info.update({file_name: hex_dump})
- if not reached_end:
- print("incomplete data captured from %s" % input_file)
- return extracted_coverage_info
- def create_gcda_files(extracted_coverage_info):
- if args.verbose:
- print("Generating gcda files")
- for filename, hexdump_val in extracted_coverage_info.items():
- if args.verbose:
- print(filename)
- # if kobject_hash is given for coverage gcovr fails
- # hence skipping it problem only in gcovr v4.1
- if "kobject_hash" in filename:
- filename = filename[:-4] + "gcno"
- try:
- os.remove(filename)
- except Exception:
- pass
- continue
- with open(filename, 'wb') as fp:
- fp.write(bytes.fromhex(hexdump_val))
- def parse_args():
- global args
- parser = argparse.ArgumentParser(
- description=__doc__,
- formatter_class=argparse.RawDescriptionHelpFormatter)
- parser.add_argument("-i", "--input", required=True,
- help="Input dump data")
- parser.add_argument("-v", "--verbose", action="count", default=0,
- help="Verbose Output")
- args = parser.parse_args()
- def main():
- parse_args()
- input_file = args.input
- extracted_coverage_info = retrieve_data(input_file)
- create_gcda_files(extracted_coverage_info)
- if __name__ == '__main__':
- main()
|