You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.2 KiB
57 lines
1.2 KiB
#!/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))
|
|
|