* commit 'fee054f3ecd7c26705f544ecf0d76ce4ec57a2d4': Remove unnecessary lookups during relocations
This commit is contained in:
		@@ -530,6 +530,11 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c
 | 
				
			|||||||
  // 3. Look for it in the local group
 | 
					  // 3. Look for it in the local group
 | 
				
			||||||
  if (s == nullptr) {
 | 
					  if (s == nullptr) {
 | 
				
			||||||
    local_group.visit([&](soinfo* local_si) {
 | 
					    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);
 | 
					      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);
 | 
					      s = soinfo_elf_lookup(local_si, elf_hash, name);
 | 
				
			||||||
      if (s != nullptr) {
 | 
					      if (s != nullptr) {
 | 
				
			||||||
@@ -541,28 +546,6 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // 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) {
 | 
					  if (s != nullptr) {
 | 
				
			||||||
    TRACE_TYPE(LOOKUP, "si %s sym %s s->st_value = %p, "
 | 
					    TRACE_TYPE(LOOKUP, "si %s sym %s s->st_value = %p, "
 | 
				
			||||||
               "found in %s, base = %p, load bias = %p",
 | 
					               "found in %s, base = %p, load bias = %p",
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user