summaryrefslogtreecommitdiffstats
path: root/lld/wasm/Symbols.h
diff options
context:
space:
mode:
Diffstat (limited to 'lld/wasm/Symbols.h')
-rw-r--r--lld/wasm/Symbols.h14
1 files changed, 11 insertions, 3 deletions
diff --git a/lld/wasm/Symbols.h b/lld/wasm/Symbols.h
index 8556d32bcf8..b2ec1e8c66e 100644
--- a/lld/wasm/Symbols.h
+++ b/lld/wasm/Symbols.h
@@ -91,10 +91,13 @@ public:
WasmSymbolType getWasmType() const;
+ // True if this symbol was referenced by a regular (non-bitcode) object.
+ unsigned IsUsedInRegularObj : 1;
+
protected:
Symbol(StringRef Name, Kind K, uint32_t Flags, InputFile *F)
- : Name(Name), SymbolKind(K), Flags(Flags), File(F),
- Referenced(!Config->GcSections) {}
+ : IsUsedInRegularObj(false), Name(Name), SymbolKind(K), Flags(Flags),
+ File(F), Referenced(!Config->GcSections) {}
StringRef Name;
Kind SymbolKind;
@@ -332,7 +335,12 @@ T *replaceSymbol(Symbol *S, ArgT &&... Arg) {
"SymbolUnion not aligned enough");
assert(static_cast<Symbol *>(static_cast<T *>(nullptr)) == nullptr &&
"Not a Symbol");
- return new (S) T(std::forward<ArgT>(Arg)...);
+
+ Symbol SymCopy = *S;
+
+ T *S2 = new (S) T(std::forward<ArgT>(Arg)...);
+ S2->IsUsedInRegularObj = SymCopy.IsUsedInRegularObj;
+ return S2;
}
} // namespace wasm
OpenPOWER on IntegriCloud