| #!/usr/bin/env python3 | |
| # -*- coding: utf-8 -*- | |
| # Copyright 2018 The ChromiumOS Authors | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| """Test for debug info.""" | |
| import os | |
| import subprocess | |
| import sys | |
| import check_cus | |
| import check_exist | |
| import check_icf | |
| elf_checks = [ | |
| check_exist.check_exist_all, | |
| check_cus.check_compile_units, | |
| check_icf.check_identical_code_folding, | |
| ] | |
| def scanelf(root): | |
| """Find ELFs in root. | |
| Args: | |
| root: root dir to start with the search. | |
| Returns: | |
| Filenames of ELFs in root. | |
| """ | |
| p = subprocess.Popen( | |
| ["scanelf", "-y", "-B", "-F", "%F", "-R", root], | |
| stdout=subprocess.PIPE, | |
| encoding="utf-8", | |
| ) | |
| return [l.strip() for l in p.stdout] | |
| def Main(argv): | |
| if len(argv) < 2: | |
| print("usage: %s [file|dir]") | |
| return 1 | |
| files = [] | |
| cand = argv[1] | |
| if os.path.isfile(cand): | |
| files = [cand] | |
| elif os.path.isdir(cand): | |
| files = scanelf(cand) | |
| else: | |
| print("usage: %s [file|dir]") | |
| return 1 | |
| failed = False | |
| for f in files: | |
| for c in elf_checks: | |
| if not c(f): | |
| failed = True | |
| if failed: | |
| return 1 | |
| return 0 | |
| if __name__ == "__main__": | |
| sys.exit(Main(sys.argv)) |