1
1
mirror of https://github.com/rui314/mold.git synced 2024-10-05 09:07:10 +03:00
This commit is contained in:
Rui Ueyama 2022-01-13 23:53:53 +09:00
parent bba506d6b4
commit 2ee2243c63
3 changed files with 20 additions and 3 deletions

View File

@ -47,6 +47,24 @@ ElfShdr<E> *InputFile<E>::find_section(i64 type) {
return nullptr; return nullptr;
} }
template <typename E>
void InputFile<E>::clear_symbols(Context<E> &ctx) {
assert(!is_alive);
for (Symbol<E> *sym : get_global_syms()) {
if (sym->file == this) {
sym->file = nullptr;
sym->input_section = nullptr;
sym->value = -1;
sym->sym_idx = -1;
sym->ver_idx = 0;
sym->is_weak = false;
sym->is_imported = false;
sym->is_exported = false;
}
}
}
template <typename E> template <typename E>
ObjectFile<E>::ObjectFile(Context<E> &ctx, MappedFile<Context<E>> *mf, ObjectFile<E>::ObjectFile(Context<E> &ctx, MappedFile<Context<E>> *mf,
std::string archive_name, bool is_in_lib) std::string archive_name, bool is_in_lib)

View File

@ -889,6 +889,7 @@ public:
ElfShdr<E> *find_section(i64 type); ElfShdr<E> *find_section(i64 type);
virtual void resolve_symbols(Context<E> &ctx) = 0; virtual void resolve_symbols(Context<E> &ctx) = 0;
virtual void clear_symbols(Context<E> &ctx);
virtual void virtual void
mark_live_objects(Context<E> &ctx, mark_live_objects(Context<E> &ctx,

View File

@ -112,9 +112,7 @@ void resolve_symbols(Context<E> &ctx) {
// Remove symbols of eliminated files. // Remove symbols of eliminated files.
tbb::parallel_for_each(files, [&](InputFile<E> *file) { tbb::parallel_for_each(files, [&](InputFile<E> *file) {
if (!file->is_alive) if (!file->is_alive)
for (Symbol<E> *sym : file->get_global_syms()) file->clear_symbols(ctx);
if (sym->file == file)
new (sym) Symbol<E>(sym->name());
}); });
// Since we have turned on object files live bits, their symbols // Since we have turned on object files live bits, their symbols