Lines Matching refs:lib
1284 def add(self, tag, lib): argument
1286 lib_set.add(lib)
1287 self._path_tag[lib] = tag
1294 def get_path_tag(self, lib): argument
1296 return self._path_tag[lib]
1301 if pattern.match(lib):
1304 return self.get_path_tag_default(lib)
1307 def get_path_tag_default(self, lib): argument
1311 def get_path_tag_bit(self, lib): argument
1312 return self.TAGS[self.get_path_tag(lib)]
1424 def add(self, tag, lib): argument
1426 lib_set.add(lib)
1427 self._path_tag[lib] = tag
1434 for lib in graph.lib_pt[PT_SYSTEM].values():
1435 d.add(tagged_paths.get_path_tag(lib.path), lib)
1438 for lib in graph.lib_pt[PT_VENDOR].values():
1439 if lib in sp_lib.sp_hal:
1440 d.add('sp_hal', lib)
1441 elif lib in sp_lib.sp_hal_dep:
1442 d.add('sp_hal_dep', lib)
1444 d.add('vnd_only', lib)
1448 def get_path_tag(self, lib): argument
1450 return self._path_tag[lib]
1452 return self.get_path_tag_default(lib)
1455 def get_path_tag_default(self, lib): argument
1456 return 'vnd_only' if lib.path.startswith('/vendor') else 'fwk_only'
1823 for lib in libs:
1824 component = self.extract_path_component(lib.path, 3)
1826 other_libs.add(lib)
1831 other_libs.add(lib)
1835 vndk_sp_libs[version].add(lib)
1837 vndk_libs[version].add(lib)
2110 libs = [lib.path for lib in libs]
2140 def add(self, path, lib): argument
2141 self.get_lib_dict(lib.elf.ei_class)[path] = lib
2144 def remove(self, lib): argument
2145 del self.get_lib_dict(lib.elf.ei_class)[lib.path]
2192 def _add_lib_to_lookup_dict(self, lib): argument
2193 self.lib_pt[lib.partition].add(lib.path, lib)
2196 def _remove_lib_from_lookup_dict(self, lib): argument
2197 self.lib_pt[lib.partition].remove(lib)
2200 def _rename_lib(self, lib, new_path): argument
2201 self._remove_lib_from_lookup_dict(lib)
2202 lib.path = new_path
2203 self._add_lib_to_lookup_dict(lib)
2207 lib = ELFLinkData(partition, path, elf,
2209 self._add_lib_to_lookup_dict(lib)
2210 return lib
2235 for path, lib in lib_set.items():
2237 result.add(lib)
2241 lib = lib_set.get(path)
2242 if lib:
2243 result.add(lib)
2249 lib = lib_set.get(path)
2250 if lib:
2251 return lib
2258 lib = self.get_lib(path)
2259 if not lib:
2264 result.add(lib)
2270 for lib in lib_set.values():
2271 yield lib
2333 for lib in libs:
2334 if symbol in lib.elf.exported_symbols:
2335 return lib
2339 def _resolve_lib_imported_symbols(self, lib, imported_libs, generic_refs): argument
2341 for symbol in lib.elf.imported_symbols:
2344 lib.unresolved_symbols.add(symbol)
2346 lib.linked_symbols[symbol] = imported_lib
2350 lib.imported_ext_symbols[imported_lib].add(symbol)
2353 def _resolve_lib_dt_needed(self, lib, resolver): argument
2355 for dt_needed in lib.elf.dt_needed:
2356 dep = resolver.resolve(lib.path, dt_needed, lib.elf.dt_rpath,
2357 lib.elf.dt_runpath)
2360 lib.path, dt_needed, lib.elf.dt_rpath, lib.elf.dt_runpath))
2362 .format(lib.path, dt_needed, candidates),
2364 lib.unresolved_dt_needed.append(dt_needed)
2366 lib.add_needed_dep(dep)
2371 def _resolve_lib_deps(self, lib, resolver, generic_refs): argument
2373 imported_libs = self._resolve_lib_dt_needed(lib, resolver)
2381 lib.imported_ext_symbols[imported_lib].update()
2384 self._resolve_lib_imported_symbols(lib, imported_libs, generic_refs)
2388 for lib in lib_set:
2389 self._resolve_lib_deps(lib, resolver, generic_refs)
2497 return set(lib for lib in self.all_libs() if lib.is_sp_hal)
2501 def is_ll_ndk_or_sp_hal(lib): argument
2502 return lib.is_ll_ndk or lib.is_sp_hal
2504 ll_ndk = set(lib for lib in self.all_libs() if lib.is_ll_ndk)
2509 def is_ll_ndk(lib): argument
2510 return lib.is_ll_ndk
2516 def is_aosp_lib(lib): argument
2518 generic_refs.classify_lib(lib) != GenericRefs.NEW_LIB)
2522 for lib in sp_hal_closure - sp_hal:
2523 if is_aosp_lib(lib):
2524 vndk_sp_hal.add(lib)
2526 sp_hal_dep.add(lib)
2537 def is_system_lib_or_sp_hal(lib): argument
2538 return lib.is_system_lib() or lib in sp_hals
2540 for lib in self.lib_pt[PT_SYSTEM].values():
2541 if all(is_system_lib_or_sp_hal(dep) for dep in lib.deps_all):
2546 for dep in list(lib.deps_needed_all):
2550 'not exist.'.format(lib.path, dep.path),
2552 lib.hide_needed_dep(dep)
2553 for dep in list(lib.deps_dlopen_all):
2557 'not exist.'.format(lib.path, dep.path),
2559 lib.hide_dlopen_dep(dep)
2567 for lib in list(self.all_libs()):
2568 if not lib.path.startswith(APEX_PREFIX):
2571 apex_name_end = lib.path.find('/', APEX_PREFIX_LEN)
2572 apex_name = lib.path[APEX_PREFIX_LEN:apex_name_end]
2575 self._rename_lib(lib, '/apex/' + lib.path[APEX_PREFIX_LEN:])
2598 ll_ndk = set(lib for lib in self.all_libs() if lib.is_ll_ndk)
2601 fwk_only_rs = set(lib for lib in self.all_libs() if lib.is_fwk_only_rs)
2603 lib for lib in self.all_libs() if lib.is_vndk_sp)
2605 lib for lib in self.all_libs() if lib.is_vndk_sp_indirect)
2607 lib for lib in self.all_libs() if lib.is_vndk_sp_indirect_private)
2621 def is_aosp_lib(lib): argument
2625 return lib.partition == PT_SYSTEM
2626 return generic_refs.has_same_name_lib(lib)
2628 def is_not_sp_hal_dep(lib): argument
2629 if lib.is_ll_ndk or lib in sp_hal:
2631 return is_aosp_lib(lib)
2637 def is_not_vndk_sp(lib): argument
2638 return lib.is_ll_ndk or lib in sp_hal or lib in sp_hal_dep
2643 for lib in itertools.chain(sp_hal, sp_hal_dep):
2644 for dep in lib.deps_all:
2652 'library {}.'.format(lib.path, dep.path),
2658 def is_not_vndk_sp_indirect(lib): argument
2659 return lib.is_ll_ndk or lib in vndk_sp or lib in fwk_only_rs
2666 vndk_sp_unused = set(lib for lib in predefined_vndk_sp
2667 if VNDKLibDir.is_in_vndk_sp_dir(lib.path))
2672 def is_not_vndk_sp_indirect_unused(lib): argument
2673 return is_not_vndk_sp_indirect(lib) or lib in vndk_sp_indirect
2679 lib for lib in predefined_vndk_sp_indirect
2680 if VNDKLibDir.is_in_vndk_sp_dir(lib.path))
2692 def is_vndk_sp_public(lib): argument
2693 return lib in vndk_sp or lib in vndk_sp_unused or \
2694 lib in vndk_sp_indirect or \
2695 lib in vndk_sp_indirect_unused
2697 def is_vndk_sp(lib): argument
2698 return is_vndk_sp_public(lib) or lib in vndk_sp_indirect_private
2700 def is_vndk_sp_unused(lib): argument
2701 return lib in vndk_sp_unused or lib in vndk_sp_indirect_unused
2703 def relabel_vndk_sp_as_used(lib): argument
2704 assert is_vndk_sp_unused(lib)
2706 if lib in vndk_sp_unused:
2707 vndk_sp_unused.remove(lib)
2708 vndk_sp.add(lib)
2710 vndk_sp_indirect_unused.remove(lib)
2711 vndk_sp_indirect.add(lib)
2715 {lib}, lambda lib: lib not in vndk_sp_indirect_unused, True)
2716 closure.remove(lib)
2724 for lib in libs:
2725 for dep in lib.imported_ext_symbols:
2739 for lib in libs:
2740 exts = set(lib.imported_ext_symbols.keys())
2741 for dep in lib.deps_all:
2759 def is_not_vndk_sp_indirect(lib): argument
2760 return lib.is_ll_ndk or lib in vndk_sp or lib in fwk_only_rs
2769 def is_not_vndk(lib): argument
2770 if lib.is_ll_ndk or is_vndk_sp_public(lib) or lib in fwk_only_rs:
2772 return lib.partition != PT_SYSTEM
2774 def is_eligible_lib_access(lib, dep): argument
2776 tagged_paths.is_path_visible(lib.path, dep.path)
2784 for lib in vendor_libs:
2785 for dep in lib.deps_all:
2798 if is_eligible_lib_access(lib, dep):
2804 .format(lib.path, dep.path), file=sys.stderr)
2816 def is_vndk(lib): argument
2817 return lib in vndk or lib in vndk_indirect
2828 for lib in libs:
2829 for dep in lib.imported_ext_symbols:
2842 def is_not_ll_ndk_indirect(lib): argument
2843 return lib.is_ll_ndk or lib.is_sp_hal or is_vndk_sp(lib) or \
2844 is_vndk_sp(lib) or is_vndk(lib)
2877 lib = stack.pop()
2878 for succ in get_successors(lib):
3006 def classify_lib(self, lib): argument
3007 ref_lib = self.refs.get(lib.path)
3010 exported_symbols = lib.elf.exported_symbols
3018 def is_equivalent_lib(self, lib): argument
3019 return self.classify_lib(lib) == GenericRefs.EXPORT_EQUAL
3022 def has_same_name_lib(self, lib): argument
3023 return os.path.basename(lib.path) in self._lib_names
3031 for lib in graph.all_libs():
3032 name = os.path.basename(lib.path)
3038 if not lib.elf.is_jni_lib():
3041 names[name].add(lib)
3042 names[root].add(lib)
3052 names[root[3:]].add(lib)
3403 for lib in lib_set.values():
3404 if not lib.num_users:
3406 if all((user.partition != partition for user in lib.users_all)):
3407 print(error_msg.format(lib.path), file=sys.stderr)
3455 for lib in sorted_lib_path_list(libs):
3456 print(tag, lib, file=file)
3464 return sorted({get_module_name(lib.path) for lib in lib_set})
3490 def collect_tags(lib): argument
3493 if lib in getattr(vndk_lib, field_name):
3503 for lib in sorted(graph.all_libs()):
3505 lib.path, collect_tags(lib), lib.elf.file_size,
3506 lib.elf.ro_seg_file_size, lib.elf.ro_seg_mem_size,
3507 lib.elf.rw_seg_file_size, lib.elf.rw_seg_mem_size))
3517 for lib in lib_set:
3518 total_file_size += lib.elf.file_size
3519 total_ro_seg_file_size += lib.elf.ro_seg_file_size
3520 total_ro_seg_mem_size += lib.elf.ro_seg_mem_size
3521 total_rw_seg_file_size += lib.elf.rw_seg_file_size
3522 total_rw_seg_mem_size += lib.elf.rw_seg_mem_size
3533 lib_set = [lib for lib in lib_set if lib.elf.is_32bit]
3540 lib_set = [lib for lib in lib_set if not lib.elf.is_32bit]
3598 libs.sort(key=lambda lib: lib.path)
3599 libs_dict = {lib: i for i, lib in enumerate(libs)}
3611 return [libs_dict[lib] for lib in sorted(libs)]
3613 def collect_deps(lib): argument
3614 queue = list(lib.deps_all)
3616 visited.add(lib)
3623 for lib in queue:
3624 for dep in lib.deps_all:
3636 def collect_source_dir_paths(lib): argument
3638 for path in module_info.get_module_path(lib.path)]
3640 def collect_tags(lib): argument
3643 if lib in getattr(vndk_lib, field_name):
3648 for lib in libs:
3649 mods.append([get_str_idx(lib.path),
3650 32 if lib.elf.is_32bit else 64,
3651 collect_tags(lib),
3652 collect_deps(lib),
3653 collect_path_sorted_lib_idxs(lib.users_all),
3654 collect_source_dir_paths(lib)])
3738 for name, lib in graph.lib_pt[partition].items():
3744 for assoc_lib in sorted(lib.users_all):
3746 collect_symbols(assoc_lib, lib)))
3748 for assoc_lib in sorted(lib.deps_all):
3750 collect_symbols(lib, assoc_lib)))
3808 for lib in sorted_lib_path_list(closure):
3809 print(indent + lib)
3818 root_libs = graph.get_libs(args.lib, report_error)
3823 def is_excluded_libs(lib): argument
3824 return lib.is_ll_ndk or lib in excluded_libs
3826 def is_excluded_libs(lib): argument
3827 return lib in excluded_libs
3835 for lib in sorted(root_libs):
3836 print(lib.path)
3837 self.print_deps_closure({lib}, graph, is_excluded_libs,
3855 def _dump_unresolved(self, lib, module_info, delimiter): argument
3856 if not lib.unresolved_symbols and not lib.unresolved_dt_needed:
3860 print(lib.path)
3861 for module_path in module_info.get_module_path(lib.path):
3863 for dt_needed in sorted(lib.unresolved_dt_needed):
3865 for symbol in sorted(lib.unresolved_symbols):
3876 libs = [lib for lib in libs if path_filter.match(lib.path)]
3879 for lib in sorted(libs):
3880 self._dump_unresolved(lib, module_info, delimiter)
3919 def _dump_dep(self, lib, bad_deps, module_info): argument
3921 print(lib.path)
3922 for module_path in module_info.get_module_path(lib.path):
3928 for symbol in lib.get_dep_linked_symbols(dep):
3983 for lib in sorted(vendor_libs):
3987 for dep, symbols in lib.imported_ext_symbols.items():
3994 .format(lib.path, symbol, dep.path),
3998 for dep in lib.deps_all:
4007 'lib "{}".'.format(lib.path, dep.path),
4013 .format(lib.path, dep.path),
4018 .format(lib.path, dep.path),
4023 '/vendor/lib[64].'.format(lib.path, dep.path),
4027 self._dump_dep(lib, bad_deps, module_info)
4037 def _is_libc_prior_to_libdl(lib): argument
4038 dt_needed = lib.elf.dt_needed
4044 for lib in sorted(graph.all_libs()):
4045 if _is_libc_prior_to_libdl(lib):
4051 .format(lib.path, lib.elf.dt_needed), file=sys.stderr)
4162 def _get_lib_tag(hierarchy, tagged_paths, lib): argument
4163 return hierarchy[tagged_paths.get_path_tag(lib.path)]
4185 for lib in graph.all_libs():
4186 lib_tag = self._get_lib_tag(hierarchy, tagged_paths, lib)
4188 'name': lib.path,
4194 for dep in lib.deps_all:
4200 dep.path, lib.get_dep_linked_symbols(dep)])
4204 violate_libs[lib_tag].append((lib.path, violate_count))