linker: load shims prior to dt_needed check
This allows shims to override existing symbols, not just
inject new symbols.
Change-Id: Ib9216bcc651d8d38999c593babb94d76dc1dbc95
diff --git a/linker/linker.cpp b/linker/linker.cpp
index a2442a0..229d9b8 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -1729,22 +1729,22 @@
template<typename F>
static void for_each_dt_needed(const soinfo* si, F action) {
+ for_each_matching_shim(si->get_realpath(), action);
for (const ElfW(Dyn)* d = si->dynamic; d->d_tag != DT_NULL; ++d) {
if (d->d_tag == DT_NEEDED) {
action(fix_dt_needed(si->get_string(d->d_un.d_val), si->get_realpath()));
}
}
- for_each_matching_shim(si->get_realpath(), action);
}
template<typename F>
static void for_each_dt_needed(const ElfReader& elf_reader, F action) {
+ for_each_matching_shim(elf_reader.name(), action);
for (const ElfW(Dyn)* d = elf_reader.dynamic(); d->d_tag != DT_NULL; ++d) {
if (d->d_tag == DT_NEEDED) {
action(fix_dt_needed(elf_reader.get_string(d->d_un.d_val), elf_reader.name()));
}
}
- for_each_matching_shim(elf_reader.name(), action);
}
static bool load_library(android_namespace_t* ns,