Home | History | Annotate | Download | only in tools
      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 #
     17 import os
     18 import subprocess
     19 import tempfile
     20 
     21 import symbols
     22 
     23 
     24 def 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 
     30 def 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 
     47 if __name__ == '__main__':
     48     main()
     49