1#!/usr/bin/env python2
2#
3# Copyright (C) 2015 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the 'License');
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#      http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an 'AS IS' BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
17import os
18import subprocess
19import tempfile
20
21import symbols
22
23
24def adb_pull(src, dst):
25    with open(os.devnull, 'w') as devnull:
26        subprocess.check_call(['adb', 'pull', src, dst],
27                              stdout=devnull, stderr=devnull)
28
29
30def main():
31    tmp_dir = tempfile.mkdtemp()
32    adb_pull('/system/lib/libc.so', tmp_dir)
33    adb_pull('/system/lib/libm.so', tmp_dir)
34
35    current = symbols.GetFromAndroidSo(['libc.so', 'libm.so'])
36    device = (symbols.GetFromElf(os.path.join(tmp_dir, 'libc.so')) |
37              symbols.GetFromElf(os.path.join(tmp_dir, 'libm.so')))
38    compat_lib = symbols.GetFromAndroidStaticLib(['libc_ndk.a'])
39
40    missing_symbols = current - device
41    compat_not_covered = missing_symbols - compat_lib
42
43    for symbol in sorted(compat_not_covered):
44        print symbol
45
46
47if __name__ == '__main__':
48    main()
49