bool
find_libraries(android_namespace_t *ns,
soinfo *start_with,
const
char
*
const
library_names[],
size_t
library_names_count,
soinfo *soinfos[],
std::vector *ld_preloads,
size_t
ld_preloads_count,
int
rtld_flags,
const
android_dlextinfo *extinfo,
bool
add_as_children,
std::vector *namespaces = nullptr) {
...
std::unordered_map<
const
soinfo *, ElfReader> readers_map;
LoadTaskList load_tasks;
for
(
size_t
i = 0; i < library_names_count; ++i) {
const
char
*name = library_names[i];
LOGI(
"load task create %s "
, name);
load_tasks.push_back(LoadTask::create(name, start_with, ns, &readers_map));
}
}
...
for
(
size_t
i = 0; i < load_tasks.size(); ++i) {
LoadTask *task = load_tasks[i];
soinfo *needed_by = task->get_needed_by();
bool
is_dt_needed = needed_by != nullptr && (needed_by != start_with || add_as_children);
task->set_extinfo(is_dt_needed ? nullptr : extinfo);
task->set_dt_needed(is_dt_needed);
LOGI(
"find_libraries(ns=%s): task=%s, is_dt_needed=%d"
,
"null"
,
task->get_name(), is_dt_needed);
if
(!find_library_internal(
const_cast
(task->get_start_from()),
task,
&zip_archive_cache,
&load_tasks,
rtld_flags)) {
return
false
;
}
}