Revert "Revert "Remove unnecessary lookups during relocations""
This reverts commit eae09772558016836f1356816f4d1d0be498d74c.
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 48093f9..e6fc9ec 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -530,6 +530,11 @@
// 3. Look for it in the local group
if (s == nullptr) {
local_group.visit([&](soinfo* local_si) {
+ if (local_si == si && si->has_DT_SYMBOLIC) {
+ // we already did this - skip
+ return true;
+ }
+
DEBUG("%s: looking up %s in %s (from local group)", si->name, name, local_si->name);
s = soinfo_elf_lookup(local_si, elf_hash, name);
if (s != nullptr) {
@@ -541,28 +546,6 @@
});
}
- // 4. Look for it in this library (unless we already did it because of DT_SYMBOLIC)
- if (s == nullptr && !si->has_DT_SYMBOLIC) {
- DEBUG("%s: looking up %s in local scope", si->name, name);
- s = soinfo_elf_lookup(si, elf_hash, name);
- if (s != nullptr) {
- *lsi = si;
- }
- }
-
- // 5. Dependencies
- if (s == nullptr) {
- si->get_children().visit([&](soinfo* child) {
- DEBUG("%s: looking up %s in %s", si->name, name, child->name);
- s = soinfo_elf_lookup(child, elf_hash, name);
- if (s != nullptr) {
- *lsi = child;
- return false;
- }
- return true;
- });
- }
-
if (s != nullptr) {
TRACE_TYPE(LOOKUP, "si %s sym %s s->st_value = %p, "
"found in %s, base = %p, load bias = %p",