| #!/usr/bin/python |
| |
| # Copyright 2018 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import subprocess |
| import sys |
| |
| import check_icf |
| import check_cus |
| import check_exist |
| |
| 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) |
| 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)) |