1
1
mirror of https://github.com/rui314/mold.git synced 2024-10-04 08:37:28 +03:00
This commit is contained in:
Rui Ueyama 2024-08-17 14:23:16 +09:00
parent 2eeb7b411e
commit cf38f81c39
3 changed files with 3 additions and 10 deletions

View File

@ -1551,7 +1551,6 @@ private:
template <> u64 get_eflags(Context<ARM32> &ctx); template <> u64 get_eflags(Context<ARM32> &ctx);
void create_arm_exidx_section(Context<ARM32> &ctx); void create_arm_exidx_section(Context<ARM32> &ctx);
void fixup_arm_exidx_section(Context<ARM32> &ctx);
// //
// arch-riscv.cc // arch-riscv.cc

View File

@ -1347,11 +1347,9 @@ void compute_section_sizes(Context<E> &ctx) {
Timer t(ctx, "compute_section_sizes"); Timer t(ctx, "compute_section_sizes");
if constexpr (needs_thunk<E>) { if constexpr (needs_thunk<E>) {
// Chunk<E>::compute_section_size obtains a global lock to create // We cannot use parallel-for for compute_section_size() which may
// range extension thunks. I don't know why, but using parallel_for // call create_range_extension_thunks() because that function is
// loop both inside and outside of the lock may cause a deadlock. It // not thread-safe.
// might be a bug in TBB. For now, I'll avoid using parallel_for_each
// here.
for (Chunk<E> *chunk : ctx.chunks) for (Chunk<E> *chunk : ctx.chunks)
if (chunk->shdr.sh_flags & SHF_EXECINSTR) if (chunk->shdr.sh_flags & SHF_EXECINSTR)
chunk->compute_section_size(ctx); chunk->compute_section_size(ctx);

View File

@ -167,10 +167,6 @@ static void scan_rels(Context<E> &ctx, InputSection<E> &isec,
template <> template <>
void OutputSection<E>::create_range_extension_thunks(Context<E> &ctx) { void OutputSection<E>::create_range_extension_thunks(Context<E> &ctx) {
// This function is not thread-safe because it mutates symbols' members
static std::mutex mu;
std::scoped_lock lock(mu);
std::span<InputSection<E> *> m = members; std::span<InputSection<E> *> m = members;
if (m.empty()) if (m.empty())
return; return;