summaryrefslogtreecommitdiff
path: root/libc/tools/check-symbols.py
diff options
context:
space:
mode:
Diffstat (limited to 'libc/tools/check-symbols.py')
-rwxr-xr-xlibc/tools/check-symbols.py87
1 files changed, 0 insertions, 87 deletions
diff --git a/libc/tools/check-symbols.py b/libc/tools/check-symbols.py
deleted file mode 100755
index 656891790..000000000
--- a/libc/tools/check-symbols.py
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/env python
-
-import glob
-import os
-import re
-import string
-import subprocess
-import sys
-
-toolchain = os.environ['ANDROID_TOOLCHAIN']
-arch = re.sub(r'.*/linux-x86/([^/]+)/.*', r'\1', toolchain)
-
-sys.stderr.write('Checking symbols for arch "%s"...\n' % arch)
-
-def GetSymbols(library, functions_or_variables):
- global api
- global arch
-
- api = '9'
- if library == 'libm' and arch == 'arm':
- api = '3'
-
- # There were no 64-bit ABIs before API level 21.
- if '64' in arch:
- api = '21'
-
- # What GCC calls aarch64, Android calls arm64.
- if arch == 'aarch64':
- arch = 'arm64'
-
- path = '%s/development/ndk/platforms/android-%s/arch-%s/symbols/%s.so.%s.txt' % (os.environ['ANDROID_BUILD_TOP'], api, arch, library, functions_or_variables)
- symbols = set()
- for line in open(path, 'r'):
- symbols.add(line.rstrip())
- #sys.stdout.write('%d %s in %s for %s\n' % (len(symbols), functions_or_variables, library, arch))
- return symbols
-
-def CheckSymbols(library, functions_or_variables):
- expected_symbols = GetSymbols(library, functions_or_variables)
-
- lib_dir = 'lib'
- if '64' in arch:
- lib_dir = 'lib64'
-
- so_file = '%s/system/%s/%s.so' % (os.environ['ANDROID_PRODUCT_OUT'], lib_dir, library)
-
- # Example readelf output:
- # 264: 0001623c 4 FUNC GLOBAL DEFAULT 8 cabsf
- # 266: 00016244 4 FUNC GLOBAL DEFAULT 8 dremf
- # 267: 00019018 4 OBJECT GLOBAL DEFAULT 11 __fe_dfl_env
- # 268: 00000000 0 FUNC GLOBAL DEFAULT UND __aeabi_dcmplt
-
-
- r = re.compile(r' +\d+: [0-9a-f]+ +\d+ (FUNC|OBJECT) +\S+ +\S+ +\d+ (\S+)')
-
- actual_symbols = set()
- for line in subprocess.check_output(['readelf', '-W', '--dyn-syms', so_file]).split('\n'):
- m = r.match(line)
- if m:
- symbol = string.split(m.group(2), '@')[0]
- if m.group(1) == 'FUNC' and functions_or_variables == 'functions':
- actual_symbols.add(symbol)
- elif m.group(1) == 'OBJECT' and functions_or_variables == 'variables':
- actual_symbols.add(symbol)
- #else:
- #print 'ignoring: ' % line
-
- missing = expected_symbols - actual_symbols
- if len(missing) > 0:
- sys.stderr.write('%d missing %s in %s for %s:\n' % (len(missing), functions_or_variables, library, arch))
- for miss in sorted(missing):
- sys.stderr.write(' %s\n' % miss)
-
- extra = actual_symbols - expected_symbols
- if len(extra) > 0:
- sys.stderr.write('%d extra %s in %s for %s:\n' % (len(extra), functions_or_variables, library, arch))
- for s in sorted(extra):
- sys.stderr.write(' %s\n' % s)
-
- return len(missing) == 0
-
-CheckSymbols("libc", "functions")
-CheckSymbols("libc", "variables")
-CheckSymbols("libm", "functions")
-CheckSymbols("libm", "variables")
-
-sys.exit(0)