1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 01:07:36 +00:00

LibELF: Cache the DynamicObject in DynamicLoader

This avoids reparsing the same dynamic library file multiple times.
This commit is contained in:
Andreas Kling 2021-01-25 13:16:39 +01:00
parent 41d8734288
commit adcc1c1eff
2 changed files with 17 additions and 12 deletions

View file

@ -106,7 +106,7 @@ private:
};
static void* do_mmap(int fd, size_t size, const String& name);
RefPtr<DynamicObject> dynamic_object_from_image() const;
const DynamicObject& dynamic_object() const;
explicit DynamicLoader(const char* filename, int fd, size_t file_size);
@ -153,12 +153,14 @@ private:
size_t m_tls_size { 0 };
Vector<DynamicObject::Relocation> m_unresolved_relocations;
mutable RefPtr<DynamicObject> m_cached_dynamic_object;
};
template<typename F>
void DynamicLoader::for_each_needed_library(F func) const
{
dynamic_object_from_image()->for_each_needed_library(move(func));
dynamic_object().for_each_needed_library(move(func));
}
} // end namespace ELF