| #!/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)) |