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