rtdl: Use frg::hash_map for strings
This commit is contained in:
parent
976139f364
commit
c45be70388
|
@ -372,18 +372,18 @@ void posixClose(int fd) {
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
|
|
||||||
ObjectRepository::ObjectRepository()
|
ObjectRepository::ObjectRepository()
|
||||||
: _nameMap{frigg::DefaultHasher<frigg::StringView>{}, *allocator} { }
|
: _nameMap{frg::hash<frg::string_view>{}, *allocator} { }
|
||||||
|
|
||||||
SharedObject *ObjectRepository::injectObjectFromDts(frg::string_view name,
|
SharedObject *ObjectRepository::injectObjectFromDts(frg::string_view name,
|
||||||
uintptr_t base_address, Elf64_Dyn *dynamic, uint64_t rts) {
|
uintptr_t base_address, Elf64_Dyn *dynamic, uint64_t rts) {
|
||||||
assert(!_nameMap.get(csv(name)));
|
assert(!_nameMap.get(name));
|
||||||
|
|
||||||
auto object = frg::construct<SharedObject>(*allocator, name.data(), false, rts);
|
auto object = frg::construct<SharedObject>(*allocator, name.data(), false, rts);
|
||||||
object->baseAddress = base_address;
|
object->baseAddress = base_address;
|
||||||
object->dynamic = dynamic;
|
object->dynamic = dynamic;
|
||||||
_parseDynamic(object);
|
_parseDynamic(object);
|
||||||
|
|
||||||
_nameMap.insert(csv(name), object);
|
_nameMap.insert(name, object);
|
||||||
_discoverDependencies(object, rts);
|
_discoverDependencies(object, rts);
|
||||||
|
|
||||||
return object;
|
return object;
|
||||||
|
@ -392,20 +392,20 @@ SharedObject *ObjectRepository::injectObjectFromDts(frg::string_view name,
|
||||||
SharedObject *ObjectRepository::injectObjectFromPhdrs(frg::string_view name,
|
SharedObject *ObjectRepository::injectObjectFromPhdrs(frg::string_view name,
|
||||||
void *phdr_pointer, size_t phdr_entry_size, size_t num_phdrs, void *entry_pointer,
|
void *phdr_pointer, size_t phdr_entry_size, size_t num_phdrs, void *entry_pointer,
|
||||||
uint64_t rts) {
|
uint64_t rts) {
|
||||||
assert(!_nameMap.get(csv(name)));
|
assert(!_nameMap.get(name));
|
||||||
|
|
||||||
auto object = frg::construct<SharedObject>(*allocator, name.data(), true, rts);
|
auto object = frg::construct<SharedObject>(*allocator, name.data(), true, rts);
|
||||||
_fetchFromPhdrs(object, phdr_pointer, phdr_entry_size, num_phdrs, entry_pointer);
|
_fetchFromPhdrs(object, phdr_pointer, phdr_entry_size, num_phdrs, entry_pointer);
|
||||||
_parseDynamic(object);
|
_parseDynamic(object);
|
||||||
|
|
||||||
_nameMap.insert(csv(name), object);
|
_nameMap.insert(name, object);
|
||||||
_discoverDependencies(object, rts);
|
_discoverDependencies(object, rts);
|
||||||
|
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
SharedObject *ObjectRepository::requestObjectWithName(frg::string_view name, uint64_t rts) {
|
SharedObject *ObjectRepository::requestObjectWithName(frg::string_view name, uint64_t rts) {
|
||||||
auto it = _nameMap.get(csv(name));
|
auto it = _nameMap.get(name);
|
||||||
if(it)
|
if(it)
|
||||||
return *it;
|
return *it;
|
||||||
|
|
||||||
|
@ -425,7 +425,7 @@ SharedObject *ObjectRepository::requestObjectWithName(frg::string_view name, uin
|
||||||
|
|
||||||
_parseDynamic(object);
|
_parseDynamic(object);
|
||||||
|
|
||||||
_nameMap.insert(csv(name), object);
|
_nameMap.insert(name, object);
|
||||||
_discoverDependencies(object, rts);
|
_discoverDependencies(object, rts);
|
||||||
|
|
||||||
return object;
|
return object;
|
||||||
|
@ -433,7 +433,7 @@ SharedObject *ObjectRepository::requestObjectWithName(frg::string_view name, uin
|
||||||
|
|
||||||
SharedObject *ObjectRepository::requestObjectAtPath(frg::string_view path, uint64_t rts) {
|
SharedObject *ObjectRepository::requestObjectAtPath(frg::string_view path, uint64_t rts) {
|
||||||
// TODO: Support SONAME correctly.
|
// TODO: Support SONAME correctly.
|
||||||
auto it = _nameMap.get(csv(path));
|
auto it = _nameMap.get(path);
|
||||||
if(it)
|
if(it)
|
||||||
return *it;
|
return *it;
|
||||||
|
|
||||||
|
@ -447,7 +447,7 @@ SharedObject *ObjectRepository::requestObjectAtPath(frg::string_view path, uint6
|
||||||
|
|
||||||
_parseDynamic(object);
|
_parseDynamic(object);
|
||||||
|
|
||||||
_nameMap.insert(csv(path), object);
|
_nameMap.insert(path, object);
|
||||||
_discoverDependencies(object, rts);
|
_discoverDependencies(object, rts);
|
||||||
|
|
||||||
return object;
|
return object;
|
||||||
|
|
|
@ -3,8 +3,6 @@
|
||||||
#include <frg/optional.hpp>
|
#include <frg/optional.hpp>
|
||||||
#include <frg/string.hpp>
|
#include <frg/string.hpp>
|
||||||
#include <frg/vector.hpp>
|
#include <frg/vector.hpp>
|
||||||
#include <frigg/hashmap.hpp>
|
|
||||||
#include <frigg/string.hpp>
|
|
||||||
|
|
||||||
struct ObjectRepository;
|
struct ObjectRepository;
|
||||||
struct Scope;
|
struct Scope;
|
||||||
|
@ -53,8 +51,8 @@ private:
|
||||||
|
|
||||||
void _discoverDependencies(SharedObject *object, uint64_t rts);
|
void _discoverDependencies(SharedObject *object, uint64_t rts);
|
||||||
|
|
||||||
frigg::Hashmap<frigg::StringView, SharedObject *,
|
frg::hash_map<frg::string_view, SharedObject *,
|
||||||
frigg::DefaultHasher<frigg::StringView>, Allocator> _nameMap;
|
frg::hash<frg::string_view>, Allocator> _nameMap;
|
||||||
};
|
};
|
||||||
|
|
||||||
// FIXME: Do not depend on the initial universe everywhere.
|
// FIXME: Do not depend on the initial universe everywhere.
|
||||||
|
|
Loading…
Reference in a new issue