[lld] [lld][WebAssembly] Reset context object after each link (PR #78770)
Sam Clegg via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 19 11:52:52 PST 2024
https://github.com/sbc100 created https://github.com/llvm/llvm-project/pull/78770
This mirrors who the ELF linker works. I wasn't able to find anywhere where this is currently tested.
Followup to #78640, which triggered a regression.
>From e0dadc72f74a0184df98b7ae8eea091528a99bb6 Mon Sep 17 00:00:00 2001
From: Sam Clegg <sbc at chromium.org>
Date: Fri, 19 Jan 2024 19:48:07 +0000
Subject: [PATCH] [lld][WebAssembly] Reset context object after each link
This mirrors who the ELF linker works. I wasn't able to find anywhere
where this is currently tested.
Followup to #78640, which triggered a regression.
---
lld/ELF/Driver.cpp | 2 +-
lld/wasm/Config.h | 2 ++
lld/wasm/Driver.cpp | 13 +++++++++++++
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 5ccc65600dcb91..9c040de1e47e66 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -130,7 +130,7 @@ bool link(ArrayRef<const char *> args, llvm::raw_ostream &stdoutOS,
ctx->e.initialize(stdoutOS, stderrOS, exitEarly, disableOutput);
ctx->e.cleanupCallback = []() {
- elf::ctx.reset();
+ //elf::ctx.reset();
symtab = SymbolTable();
outputSections.clear();
diff --git a/lld/wasm/Config.h b/lld/wasm/Config.h
index dc7ca265e9a2cb..308f8ab3eb0ebe 100644
--- a/lld/wasm/Config.h
+++ b/lld/wasm/Config.h
@@ -138,6 +138,8 @@ struct Ctx {
llvm::SmallVector<std::tuple<std::string, const InputFile *, const Symbol &>,
0>
whyExtractRecords;
+
+ void reset();
};
extern Ctx ctx;
diff --git a/lld/wasm/Driver.cpp b/lld/wasm/Driver.cpp
index 4a4f9a96227946..96a214f76ebd70 100644
--- a/lld/wasm/Driver.cpp
+++ b/lld/wasm/Driver.cpp
@@ -47,6 +47,16 @@ namespace lld::wasm {
Configuration *config;
Ctx ctx;
+void Ctx::reset() {
+ objectFiles.clear();
+ stubFiles.clear();
+ sharedFiles.clear();
+ bitcodeFiles.clear();
+ syntheticFunctions.clear();
+ syntheticGlobals.clear();
+ syntheticTables.clear();
+}
+
namespace {
// Create enum with OPT_xxx values for each option in Options.td
@@ -90,6 +100,9 @@ bool link(ArrayRef<const char *> args, llvm::raw_ostream &stdoutOS,
auto *ctx = new CommonLinkerContext;
ctx->e.initialize(stdoutOS, stderrOS, exitEarly, disableOutput);
+ ctx->e.cleanupCallback = []() {
+ wasm::ctx.reset();
+ };
ctx->e.logName = args::getFilenameWithoutExe(args[0]);
ctx->e.errorLimitExceededMsg = "too many errors emitted, stopping now (use "
"-error-limit=0 to see all errors)";
More information about the llvm-commits
mailing list