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