summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-emscripten.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/wasm-emscripten.cpp')
-rw-r--r--src/wasm/wasm-emscripten.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/wasm/wasm-emscripten.cpp b/src/wasm/wasm-emscripten.cpp
index c61e40b1d..14104c1eb 100644
--- a/src/wasm/wasm-emscripten.cpp
+++ b/src/wasm/wasm-emscripten.cpp
@@ -44,6 +44,8 @@ void addExportedFunction(Module& wasm, Function* function) {
Global* EmscriptenGlueGenerator::getStackPointerGlobal() {
// Assumption: first global is __stack_pointer
+ // TODO(sbc): Once mutable globals are a thing we shouldn't need this
+ // at all since we can simply export __stack_pointer.
return wasm.globals[0].get();
}
@@ -308,9 +310,14 @@ void EmscriptenGlueGenerator::generateJSCallThunks(
std::vector<Address> getSegmentOffsets(Module& wasm) {
std::vector<Address> segmentOffsets;
for (unsigned i = 0; i < wasm.memory.segments.size(); ++i) {
- Const* addrConst = wasm.memory.segments[i].offset->cast<Const>();
- auto address = addrConst->value.geti32();
- segmentOffsets.push_back(address);
+ if (auto* addrConst = wasm.memory.segments[i].offset->dynCast<Const>()) {
+ auto address = addrConst->value.geti32();
+ segmentOffsets.push_back(address);
+ } else {
+ // TODO(sbc): Wasm shared libraries have data segments with non-const
+ // offset.
+ segmentOffsets.push_back(0);
+ }
}
return segmentOffsets;
}
@@ -552,12 +559,6 @@ EmJsWalker fixEmJsFuncsAndReturnWalker(Module& wasm) {
return walker;
}
-void EmscriptenGlueGenerator::fixEmAsmConsts() {
- fixEmAsmConstsAndReturnWalker(wasm);
- fixEmJsFuncsAndReturnWalker(wasm);
-}
-
-
// Fixes function name hacks caused by LLVM exception & setjmp/longjmp
// handling pass for wasm.
// This does two things: