• Home
  • Raw
  • Download

Lines Matching refs:soinfo

71 static LinkerTypeAllocator<soinfo> g_soinfo_allocator;
72 static LinkerTypeAllocator<LinkedListEntry<soinfo>> g_soinfo_links_allocator;
74 static soinfo* solist;
75 static soinfo* sonext;
76 static soinfo* somain; // main process, always the one after libdl_info
95 static std::vector<soinfo*> g_ld_preloads;
141 static void insert_soinfo_into_debug_map(soinfo* info) { in insert_soinfo_into_debug_map()
165 static void remove_soinfo_from_debug_map(soinfo* info) { in remove_soinfo_from_debug_map()
180 static void notify_gdb_of_load(soinfo* info) { in notify_gdb_of_load()
197 static void notify_gdb_of_unload(soinfo* info) { in notify_gdb_of_unload()
221 LinkedListEntry<soinfo>* SoinfoListAllocator::alloc() { in alloc()
225 void SoinfoListAllocator::free(LinkedListEntry<soinfo>* entry) { in free()
229 static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, in soinfo_alloc()
236 soinfo* si = new (g_soinfo_allocator.alloc()) soinfo(name, file_stat, file_offset, rtld_flags); in soinfo_alloc()
245 static void soinfo_free(soinfo* si) { in soinfo_free()
254 soinfo *prev = nullptr, *trav; in soinfo_free()
281 si->~soinfo(); in soinfo_free()
350 for (soinfo* si = solist; si != 0; si = si->next) { in dl_unwind_find_exidx()
366 for (soinfo* si = solist; si != nullptr; si = si->next) { in do_dl_iterate_phdr()
380 const ElfW(Versym)* soinfo::get_versym(size_t n) const { in ElfW()
388 ElfW(Addr) soinfo::get_verneed_ptr() const { in ElfW()
396 size_t soinfo::get_verneed_cnt() const { in get_verneed_cnt()
404 ElfW(Addr) soinfo::get_verdef_ptr() const { in ElfW()
412 size_t soinfo::get_verdef_cnt() const { in get_verdef_cnt()
421 static bool for_each_verdef(const soinfo* si, F functor) { in for_each_verdef()
468 bool soinfo::find_verdef_version_index(const version_info* vi, ElfW(Versym)* versym) const { in find_verdef_version_index()
489 bool soinfo::find_symbol_by_name(SymbolName& symbol_name, in find_symbol_by_name()
505 static bool is_symbol_global_and_defined(const soinfo* si, const ElfW(Sym)* s) { in is_symbol_global_and_defined()
531 bool soinfo::gnu_lookup(SymbolName& symbol_name, in gnu_lookup()
600 bool soinfo::elf_lookup(SymbolName& symbol_name, in elf_lookup()
643 soinfo::soinfo(const char* realpath, const struct stat* file_stat, in soinfo() function in soinfo
698 bool soinfo_do_lookup(soinfo* si_from, const char* name, const version_info* vi, in soinfo_do_lookup()
699 soinfo** si_found_in, const soinfo::soinfo_list_t& global_group, in soinfo_do_lookup()
700 const soinfo::soinfo_list_t& local_group, const ElfW(Sym)** symbol) { in soinfo_do_lookup()
729 global_group.visit([&](soinfo* global_si) { in soinfo_do_lookup()
753 local_group.visit([&](soinfo* local_si) { in soinfo_do_lookup()
862 static LoadTask* create(const char* name, soinfo* needed_by) { in create()
871 soinfo* get_needed_by() const { in get_needed_by()
875 LoadTask(const char* name, soinfo* needed_by) in LoadTask()
879 soinfo* needed_by_;
889 typedef linked_list_t<soinfo> SoinfoLinkedList;
902 static bool walk_dependencies_tree(soinfo* root_soinfos[], size_t root_soinfos_size, F action) { in walk_dependencies_tree()
910 soinfo* si; in walk_dependencies_tree()
922 si->get_children().for_each([&](soinfo* child) { in walk_dependencies_tree()
931 static const ElfW(Sym)* dlsym_handle_lookup(soinfo* root, soinfo* skip_until, in ElfW()
932 soinfo** found, SymbolName& symbol_name) { in ElfW()
936 walk_dependencies_tree(&root, 1, [&](soinfo* current_soinfo) { in ElfW()
960 const ElfW(Sym)* dlsym_handle_lookup(soinfo* si, soinfo** found, const char* name) { in ElfW()
982 soinfo** found, in ElfW()
983 soinfo* caller, in ElfW()
987 soinfo* start = solist; in ElfW()
998 for (soinfo* si = start; si != nullptr; si = si->next) { in ElfW()
1033 soinfo* find_containing_library(const void* p) { in find_containing_library()
1035 for (soinfo* si = solist; si != nullptr; si = si->next) { in find_containing_library()
1043 ElfW(Sym)* soinfo::find_symbol_by_address(const void* addr) { in ElfW()
1053 ElfW(Sym)* soinfo::gnu_addr_lookup(const void* addr) { in ElfW()
1074 ElfW(Sym)* soinfo::elf_addr_lookup(const void* addr) { in ElfW()
1244 static void for_each_dt_needed(const soinfo* si, F action) { in for_each_dt_needed()
1252 static soinfo* load_library(int fd, off64_t file_offset, in load_library()
1279 for (soinfo* si = solist; si != nullptr; si = si->next) { in load_library()
1309 soinfo* si = soinfo_alloc(realpath.c_str(), &file_stat, file_offset, rtld_flags); in load_library()
1331 static soinfo* load_library(LoadTaskList& load_tasks, in load_library()
1349 soinfo* result = load_library(fd, file_offset, load_tasks, name, rtld_flags, extinfo); in load_library()
1358 static bool find_loaded_library_by_soname(const char* name, soinfo** candidate) { in find_loaded_library_by_soname()
1368 for (soinfo* si = solist; si != nullptr; si = si->next) { in find_loaded_library_by_soname()
1391 static soinfo* find_library_internal(LoadTaskList& load_tasks, const char* name, in find_library_internal()
1393 soinfo* candidate; in find_library_internal()
1404 soinfo* si = load_library(load_tasks, name, rtld_flags, extinfo); in find_library_internal()
1416 static void soinfo_unload(soinfo* si);
1425 static soinfo::soinfo_list_t make_global_group() { in make_global_group()
1426 soinfo::soinfo_list_t global_group; in make_global_group()
1427 for (soinfo* si = somain; si != nullptr; si = si->next) { in make_global_group()
1436 static bool find_libraries(soinfo* start_with, const char* const library_names[], in find_libraries()
1437 size_t library_names_count, soinfo* soinfos[], std::vector<soinfo*>* ld_preloads, in find_libraries()
1447 soinfo::soinfo_list_t global_group = make_global_group(); in find_libraries()
1457 size_t soinfos_size = sizeof(soinfo*)*library_names_count; in find_libraries()
1458 soinfos = reinterpret_cast<soinfo**>(alloca(soinfos_size)); in find_libraries()
1479 soinfo* needed_by = task->get_needed_by(); in find_libraries()
1481 soinfo* si = find_library_internal(load_tasks, task->get_name(), in find_libraries()
1512 soinfo::soinfo_list_t local_group; in find_libraries()
1516 [&] (soinfo* si) { in find_libraries()
1525 bool linked = local_group.visit([&](soinfo* si) { in find_libraries()
1547 static soinfo* find_library(const char* name, int rtld_flags, const android_dlextinfo* extinfo) { in find_library()
1548 soinfo* si; in find_library()
1559 static void soinfo_unload(soinfo* root) { in soinfo_unload()
1578 soinfo::soinfo_list_t local_unload_list; in soinfo_unload()
1579 soinfo::soinfo_list_t external_unload_list; in soinfo_unload()
1580 soinfo::soinfo_list_t depth_first_list; in soinfo_unload()
1582 soinfo* si = nullptr; in soinfo_unload()
1592 soinfo* child = nullptr; in soinfo_unload()
1614 soinfo* needed = find_library(library_name, RTLD_NOLOAD, nullptr); in soinfo_unload()
1636 local_unload_list.for_each([](soinfo* si) { in soinfo_unload()
1676 soinfo* do_dlopen(const char* name, int flags, const android_dlextinfo* extinfo) { in do_dlopen()
1695 soinfo* si = find_library(name, flags, extinfo); in do_dlopen()
1702 void do_dlclose(soinfo* si) { in do_dlclose()
1730 const soinfo* target_si) { in add_version_info()
1740 bool VersionTracker::init_verneed(const soinfo* si_from) { in init_verneed()
1761 soinfo* target_si = si_from->get_children().find_if([&](const soinfo* si) { in init_verneed()
1786 bool VersionTracker::init_verdef(const soinfo* si_from) { in init_verdef()
1796 bool VersionTracker::init(const soinfo* si_from) { in init()
1804 bool soinfo::lookup_version_info(const VersionTracker& version_tracker, ElfW(Word) sym, in lookup_version_info()
1841 bool soinfo::relocate(const VersionTracker& version_tracker, ElfRelIteratorT&& rel_iterator, in relocate()
1863 soinfo* lsi = nullptr; in relocate()
2208 void soinfo::call_array(const char* array_name __unused, linker_function_t* functions, in call_array()
2228 void soinfo::call_function(const char* function_name __unused, linker_function_t function) { in call_function()
2238 void soinfo::call_pre_init_constructors() { in call_pre_init_constructors()
2244 void soinfo::call_constructors() { in call_constructors()
2267 get_children().for_each([] (soinfo* si) { in call_constructors()
2278 void soinfo::call_destructors() { in call_destructors()
2295 void soinfo::add_child(soinfo* child) { in add_child()
2302 void soinfo::remove_all_links() { in remove_all_links()
2308 children_.for_each([&] (soinfo* child) { in remove_all_links()
2309 child->parents_.remove_if([&] (const soinfo* parent) { in remove_all_links()
2314 parents_.for_each([&] (soinfo* parent) { in remove_all_links()
2315 parent->children_.remove_if([&] (const soinfo* child) { in remove_all_links()
2325 dev_t soinfo::get_st_dev() const { in get_st_dev()
2333 ino_t soinfo::get_st_ino() const { in get_st_ino()
2341 off64_t soinfo::get_file_offset() const { in get_file_offset()
2349 uint32_t soinfo::get_rtld_flags() const { in get_rtld_flags()
2357 uint32_t soinfo::get_dt_flags_1() const { in get_dt_flags_1()
2365 void soinfo::set_dt_flags_1(uint32_t dt_flags_1) { in set_dt_flags_1()
2379 const char* soinfo::get_realpath() const { in get_realpath()
2391 const char* soinfo::get_soname() const { in get_soname()
2405 static soinfo::soinfo_list_t g_empty_list;
2407 soinfo::soinfo_list_t& soinfo::get_children() { in get_children()
2415 const soinfo::soinfo_list_t& soinfo::get_children() const { in get_children()
2423 soinfo::soinfo_list_t& soinfo::get_parents() { in get_parents()
2431 ElfW(Addr) soinfo::resolve_symbol_address(const ElfW(Sym)* s) const { in ElfW()
2439 const char* soinfo::get_string(ElfW(Word) index) const { in get_string()
2448 bool soinfo::is_gnu_hash() const { in is_gnu_hash()
2452 bool soinfo::can_unload() const { in can_unload()
2456 bool soinfo::is_linked() const { in is_linked()
2460 bool soinfo::is_main_executable() const { in is_main_executable()
2464 void soinfo::set_linked() { in set_linked()
2468 void soinfo::set_linker_flag() { in set_linker_flag()
2472 void soinfo::set_main_executable() { in set_main_executable()
2476 void soinfo::increment_ref_count() { in increment_ref_count()
2480 size_t soinfo::decrement_ref_count() { in decrement_ref_count()
2484 soinfo* soinfo::get_local_group_root() const { in get_local_group_root()
2491 uint32_t soinfo::get_target_sdk_version() const { in get_target_sdk_version()
2499 bool soinfo::prelink_image() { in prelink_image()
2924 bool soinfo::link_image(const soinfo_list_t& global_group, const soinfo_list_t& local_group, in link_image()
3083 soinfo* si = soinfo_alloc("[vdso]", nullptr, 0, 0); in add_vdso()
3092 si->link_image(g_empty_list, soinfo::soinfo_list_t::make_list(si), nullptr); in add_vdso()
3108 static uint8_t linker_soinfo_for_gdb_buf[sizeof(soinfo)] __attribute__((aligned(8)));
3109 static soinfo* linker_soinfo_for_gdb = nullptr;
3119 linker_soinfo_for_gdb = new (linker_soinfo_for_gdb_buf) soinfo(LINKER_PATH, nullptr, 0, 0); in init_linker_info_for_gdb()
3174 soinfo* si = soinfo_alloc(args.argv[0], nullptr, 0, RTLD_GLOBAL);
3261 if (!si->link_image(g_empty_list, soinfo::soinfo_list_t::make_list(si), nullptr)) {
3372 soinfo linker_so(nullptr, nullptr, 0, 0);