Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
android /platform /bionic /refs/heads/main /. /libc /tools /symbols.py
blob: 145753421ade68ebeb6ad031e5f14fd5e0646002 [file] [log] [blame] [edit]
#
# Copyright (C) 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the 'License');
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an 'AS IS' BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import glob
import os
import re
import subprocess
defGetFromTxt(txt_file):
symbols= set()
f= open(txt_file,'r')
for linein f.read().splitlines():
symbols.add(line)
f.close()
return symbols
defGetFromElf(elf_file, sym_type='--dyn-syms'):
# pylint: disable=line-too-long
# 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+ (I?FUNC|OBJECT) +\S+ +\S+ +\d+ (\S+)')
symbols= set()
output= subprocess.check_output(['readelf', sym_type,'-W', elf_file],
text=True)
for linein output.split('\n'):
if' HIDDEN 'in lineor' UND 'in line:
continue
m= r.match(line)
if m:
symbol= m.group(2)
symbol= re.sub('@.*','', symbol)
symbols.add(symbol)
return symbols
defGetFromAndroidStaticLib(files):
out_dir= os.environ['ANDROID_PRODUCT_OUT']
lib_dir= os.path.join(out_dir,'obj')
results= set()
for fin 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
defGetFromAndroidSo(files):
out_dir= os.environ['ANDROID_PRODUCT_OUT']
lib_dir= os.path.join(out_dir,'system/lib64')
ifnot os.path.isdir(lib_dir):
lib_dir= os.path.join(out_dir,'system/lib')
lib_dir= os.path.join(out_dir,'apex/com.android.runtime/lib64/bionic/')
ifnot os.path.isdir(lib_dir):
lib_dir= os.path.join(out_dir,'apex/com.android.runtime/lib/bionic/')
results= set()
for fin files:
results|=GetFromElf(os.path.join(lib_dir, f))
return results
defGetFromSystemSo(files):
lib_dir='/lib/x86_64-linux-gnu'
results= set()
for fin files:
results|=GetFromElf(glob.glob(os.path.join(lib_dir, f))[-1])
return results

[8]ページ先頭

©2009-2025 Movatter.jp