summaryrefslogtreecommitdiff
path: root/wasm/LTO.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'wasm/LTO.cpp')
-rw-r--r--wasm/LTO.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/wasm/LTO.cpp b/wasm/LTO.cpp
index f15551da8b80e..96a947e29d412 100644
--- a/wasm/LTO.cpp
+++ b/wasm/LTO.cpp
@@ -36,8 +36,6 @@
#include <vector>
using namespace llvm;
-using namespace llvm::object;
-
using namespace lld;
using namespace lld::wasm;
@@ -55,6 +53,14 @@ static std::unique_ptr<lto::LTO> createLTO() {
C.DisableVerify = Config->DisableVerify;
C.DiagHandler = diagnosticHandler;
C.OptLevel = Config->LTOO;
+ C.MAttrs = GetMAttrs();
+
+ if (Config->Relocatable)
+ C.RelocModel = None;
+ else if (Config->Pic)
+ C.RelocModel = Reloc::PIC_;
+ else
+ C.RelocModel = Reloc::Static;
if (Config->SaveTemps)
checkError(C.addSaveTemps(Config->OutputFile.str() + ".",
@@ -72,10 +78,11 @@ BitcodeCompiler::BitcodeCompiler() : LTOObj(createLTO()) {}
BitcodeCompiler::~BitcodeCompiler() = default;
static void undefine(Symbol *S) {
- if (isa<DefinedFunction>(S))
- replaceSymbol<UndefinedFunction>(S, S->getName(), 0);
+ if (auto F = dyn_cast<DefinedFunction>(S))
+ replaceSymbol<UndefinedFunction>(F, F->getName(), 0, F->getFile(),
+ F->Signature);
else if (isa<DefinedData>(S))
- replaceSymbol<UndefinedData>(S, S->getName(), 0);
+ replaceSymbol<UndefinedData>(S, S->getName(), 0, S->getFile());
else
llvm_unreachable("unexpected symbol kind");
}