1
1
mirror of https://github.com/rui314/mold.git synced 2024-09-21 18:08:01 +03:00
This commit is contained in:
Rui Ueyama 2021-04-06 18:13:53 +09:00
parent acad56a4c7
commit 60d142102a
3 changed files with 14 additions and 3 deletions

View File

@ -65,7 +65,7 @@ static ObjectFile<E> *new_object_file(Context<E> &ctx, MemoryMappedFile<E> *mb,
template <typename E>
static SharedFile<E> *new_shared_file(Context<E> &ctx, MemoryMappedFile<E> *mb) {
SharedFile<E> *file = new SharedFile<E>(ctx, mb);
SharedFile<E> *file = SharedFile<E>::create(ctx, mb);
ctx.tg.run([file, &ctx]() { file->parse(ctx); });
if (ctx.arg.trace)
SyncOut(ctx) << "trace: " << *file;

7
mold.h
View File

@ -915,7 +915,8 @@ private:
template <typename E>
class SharedFile : public InputFile<E> {
public:
SharedFile(Context<E> &ctx, MemoryMappedFile<E> *mb);
static SharedFile<E> *create(Context<E> &ctx, MemoryMappedFile<E> *mb);
void parse(Context<E> &ctx);
void resolve_symbols(Context<E> &ctx);
std::vector<Symbol<E> *> find_aliases(Symbol<E> *sym);
@ -927,6 +928,8 @@ public:
std::vector<const ElfSym<E> *> elf_syms;
private:
SharedFile(Context<E> &ctx, MemoryMappedFile<E> *mb);
std::string_view get_soname(Context<E> &ctx);
void maybe_override_symbol(Symbol<E> &sym, const ElfSym<E> &esym);
std::vector<std::string_view> read_verdef(Context<E> &ctx);
@ -1299,7 +1302,7 @@ struct Context {
FileCache<E, SharedFile<E>> dso_cache;
tbb::concurrent_vector<std::unique_ptr<ObjectFile<E>>> owning_objs;
tbb::concurrent_vector<std::unique_ptr<ObjectFile<E>>> owning_dsos;
tbb::concurrent_vector<std::unique_ptr<SharedFile<E>>> owning_dsos;
tbb::concurrent_vector<std::unique_ptr<std::vector<u8>>> owning_bufs;
// Symbol auxiliary data

View File

@ -1110,6 +1110,14 @@ std::ostream &operator<<(std::ostream &out, const InputFile<E> &file) {
return out;
}
template <typename E>
SharedFile<E> *
SharedFile<E>::create(Context<E> &ctx, MemoryMappedFile<E> *mb) {
SharedFile<E> *obj = new SharedFile(ctx, mb);
ctx.owning_dsos.push_back(std::unique_ptr<SharedFile<E>>(obj));
return obj;
}
template <typename E>
SharedFile<E>::SharedFile(Context<E> &ctx, MemoryMappedFile<E> *mb)
: InputFile<E>(ctx, mb) {