Lines Matching defs:soinfo

77 static LinkerTypeAllocator<soinfo> g_soinfo_allocator;
78 static LinkerTypeAllocator<LinkedListEntry<soinfo>> g_soinfo_links_allocator;
169 static bool is_greylisted(android_namespace_t* ns, const char* name, const soinfo* needed_by) {
240 static void notify_gdb_of_load(soinfo* info) {
259 static void notify_gdb_of_unload(soinfo* info) {
263 LinkedListEntry<soinfo>* SoinfoListAllocator::alloc() {
267 void SoinfoListAllocator::free(LinkedListEntry<soinfo>* entry) {
279 soinfo* soinfo_alloc(android_namespace_t* ns, const char* name,
287 TRACE("name %s: allocating soinfo for ns=%p", name, ns);
289 soinfo* si = new (g_soinfo_allocator.alloc()) soinfo(ns, name, file_stat,
297 TRACE("name %s: allocated soinfo @ %p", name, si);
301 static void soinfo_free(soinfo* si) {
316 TRACE("name %s: freeing soinfo @ %p", si->get_realpath(), si);
320 // but it does not look right, abort if soinfo is not in the list instead?
327 si->~soinfo();
367 for (soinfo* si = solist_get_head(); si != 0; si = si->next) {
383 for (soinfo* si = solist_get_head(); si != nullptr; si = si->next) {
398 bool soinfo_do_lookup(soinfo* si_from, const char* name, const version_info* vi,
399 soinfo** si_found_in, const soinfo_list_t& global_group,
429 global_group.visit([&](soinfo* global_si) {
453 local_group.visit([&](soinfo* local_si) {
559 soinfo* needed_by,
560 std::unordered_map<const soinfo*, ElfReader>* readers_map) {
569 soinfo* get_needed_by() const {
573 soinfo* get_soinfo() const {
577 void set_soinfo(soinfo* si) {
624 std::unordered_map<const soinfo*, ElfReader>* get_readers_map() {
651 soinfo* needed_by,
652 std::unordered_map<const soinfo*, ElfReader>* readers_map)
664 soinfo* needed_by_;
665 soinfo* si_;
670 std::unordered_map<const soinfo*, ElfReader>* elf_readers_map_;
683 typedef linked_list_t<soinfo> SoinfoLinkedList;
693 // This function walks down the tree of soinfo dependencies
695 // * calls action(soinfo* si) for each node, and
703 static bool walk_dependencies_tree(soinfo* root_soinfos[], size_t root_soinfos_size, F action) {
711 soinfo* si;
726 si->get_children().for_each([&](soinfo* child) {
737 soinfo* root,
738 soinfo* skip_until,
739 soinfo** found,
745 walk_dependencies_tree(&root, 1, [&](soinfo* current_soinfo) {
774 soinfo** found,
775 soinfo* caller,
779 // specified soinfo object and its dependencies in breadth first order.
780 static const ElfW(Sym)* dlsym_handle_lookup(soinfo* si,
781 soinfo** found,
806 specified soinfo (for RTLD_NEXT).
811 soinfo** found,
812 soinfo* caller,
831 soinfo* si = *it;
855 soinfo* local_group_root = caller->get_local_group_root();
873 soinfo* find_containing_library(const void* p) {
875 for (soinfo* si = solist_get_head(); si != nullptr; si = si->next) {
1041 const char* name, soinfo *needed_by,
1121 soinfo** candidate) {
1123 auto predicate = [&](soinfo* si) {
1136 soinfo* si = linked_ns->soinfo_list().find_if(predicate);
1181 soinfo* si = nullptr;
1184 "will return existing soinfo", name, si->get_realpath());
1208 const soinfo* needed_by = task->is_dt_needed() ? task->get_needed_by() : nullptr;
1212 const soinfo* needed_or_dlopened_by = task->get_needed_by();
1246 soinfo* si = soinfo_alloc(ns, realpath.c_str(), &file_stat, file_offset, rtld_flags);
1262 // going to be overwritten on soinfo::prelink_image
1288 soinfo* needed_by = task->get_needed_by();
1325 soinfo** candidate) {
1326 return !ns->soinfo_list().visit([&](soinfo* si) {
1341 soinfo** candidate) {
1374 soinfo* candidate;
1427 soinfo* candidate;
1457 static void soinfo_unload(soinfo* si);
1458 static void soinfo_unload(soinfo* soinfos[], size_t count);
1469 ns->soinfo_list().for_each([&](soinfo* si) {
1489 ns->soinfo_list().for_each([&](soinfo* si) {
1511 soinfo* start_with,
1514 soinfo* soinfos[],
1515 std::vector<soinfo*>* ld_preloads,
1523 std::unordered_map<const soinfo*, ElfReader> readers_map;
1541 size_t soinfos_size = sizeof(soinfo*)*library_names_count;
1542 soinfos = reinterpret_cast<soinfo**>(alloca(soinfos_size));
1566 soinfo* needed_by = task->get_needed_by();
1581 soinfo* si = task->get_soinfo();
1605 soinfo* si = task->get_soinfo();
1625 soinfo* si = task->get_soinfo();
1647 [&] (soinfo* si) {
1656 bool linked = local_group.visit([&](soinfo* si) {
1668 local_group.for_each([](soinfo* si) {
1680 static soinfo* find_library(android_namespace_t* ns,
1683 soinfo* needed_by) {
1684 soinfo* si;
1707 static void soinfo_unload(soinfo* root) {
1722 static void soinfo_unload(soinfo* soinfos[], size_t count) {
1735 soinfo* si = soinfos[i];
1754 soinfo* root = soinfos[0];
1758 soinfo* si = nullptr;
1768 soinfo* child = nullptr;
1785 __libc_fatal("soinfo for \"%s\"@%p has no version", si->get_realpath(), si);
1787 PRINT("warning: soinfo for \"%s\"@%p has no version", si->get_realpath(), si);
1789 TRACE("deprecated (old format of soinfo): %s needs to unload %s",
1792 soinfo* needed = find_library(si->get_primary_namespace(),
1816 local_unload_list.for_each([](soinfo* si) {
1839 static android_namespace_t* get_caller_namespace(soinfo* caller) {
1905 soinfo* const caller = find_containing_library(caller_addr);
1970 soinfo* si = find_library(ns, translated_name, flags, extinfo, caller);
1991 soinfo* si = find_containing_library(addr);
2012 static soinfo* soinfo_from_handle(void* handle) {
2022 return static_cast<soinfo*>(handle);
2038 soinfo* found = nullptr;
2040 soinfo* caller = find_containing_library(caller_addr);
2042 soinfo* si = nullptr;
2108 soinfo* si = soinfo_from_handle(handle);
2169 soinfo* caller_soinfo = find_containing_library(caller_addr);
2272 const soinfo* target_si) {
2282 bool VersionTracker::init_verneed(const soinfo* si_from) {
2303 soinfo* target_si = si_from->get_children().find_if([&](const soinfo* si) {
2329 static bool for_each_verdef(const soinfo* si, F functor) {
2376 bool find_verdef_version_index(const soinfo* si, const version_info* vi, ElfW(Versym)* versym) {
2397 bool VersionTracker::init_verdef(const soinfo* si_from) {
2407 bool VersionTracker::init(const soinfo* si_from) {
2415 // TODO (dimitry): Methods below need to be moved out of soinfo
2418 // independent from soinfo (?).
2419 bool soinfo::lookup_version_info(const VersionTracker& version_tracker, ElfW(Word) sym,
2456 bool soinfo::relocate(const VersionTracker& version_tracker, ElfRelIteratorT&& rel_iterator,
2478 soinfo* lsi = nullptr;
2822 bool soinfo::prelink_image() {
3261 bool soinfo::link_image(const soinfo_list_t& global_group, const soinfo_list_t& local_group,
3405 bool soinfo::protect_relro() {
3434 soinfo* somain = solist_get_somain();
3512 soinfo* ld_android_so = solist_get_head();