Add a basic NDK compatibility library.
We know we can safely statically link `libm`, since it doesn't have
any dependencies on the OS or the layout of a data type that has
changed between releases (like `pthread_t`).
We can safely statically link `libc_syscalls` because the user can
check for and handle `ENOSYS`.
Update `ndk_missing_symbols.py` to account for symbols that are in the
compatibility library.
Improve `symbols.py` to be able to pull symbols from a static library.
Change-Id: Ifb0ede1e8b4a8f0f33865d9fed72fb8b4d443fbc
diff --git a/libc/tools/symbols.py b/libc/tools/symbols.py
index 43454e4..3f40aad 100644
--- a/libc/tools/symbols.py
+++ b/libc/tools/symbols.py
@@ -28,7 +28,7 @@
return symbols
-def GetFromSo(so_file):
+def GetFromElf(elf_file, sym_type='--dyn-syms'):
# pylint: disable=line-too-long
# Example readelf output:
# 264: 0001623c 4 FUNC GLOBAL DEFAULT 8 cabsf
@@ -41,7 +41,7 @@
symbols = set()
- output = subprocess.check_output(['readelf', '--dyn-syms', '-W', so_file])
+ output = subprocess.check_output(['readelf', sym_type, '-W', elf_file])
for line in output.split('\n'):
if ' HIDDEN ' in line or ' UND ' in line:
continue
@@ -54,6 +54,22 @@
return symbols
+def GetFromAndroidStaticLib(files):
+ out_dir = os.environ['ANDROID_PRODUCT_OUT']
+ lib_dir = os.path.join(out_dir, 'obj')
+
+ results = set()
+ for f in files:
+ static_lib_dir = os.path.join(
+ lib_dir,
+ 'STATIC_LIBRARIES',
+ '{}_intermediates'.format(os.path.splitext(f)[0]))
+ results |= GetFromElf(
+ os.path.join(static_lib_dir, f),
+ sym_type='--syms')
+ return results
+
+
def GetFromAndroidSo(files):
out_dir = os.environ['ANDROID_PRODUCT_OUT']
lib_dir = os.path.join(out_dir, 'system/lib64')
@@ -62,7 +78,7 @@
results = set()
for f in files:
- results |= GetFromSo(os.path.join(lib_dir, f))
+ results |= GetFromElf(os.path.join(lib_dir, f))
return results
@@ -70,5 +86,5 @@
lib_dir = '/lib/x86_64-linux-gnu'
results = set()
for f in files:
- results |= GetFromSo(glob.glob(os.path.join(lib_dir, f))[-1])
+ results |= GetFromElf(glob.glob(os.path.join(lib_dir, f))[-1])
return results