summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/CMakeLists.txt1
-rw-r--r--src/passes/ReplaceStackPointer.cpp103
-rw-r--r--src/passes/pass.cpp4
-rw-r--r--src/passes/passes.h1
-rw-r--r--src/tools/wasm-emscripten-finalize.cpp7
-rw-r--r--src/wasm-emscripten.h4
-rw-r--r--src/wasm/wasm-emscripten.cpp26
7 files changed, 0 insertions, 146 deletions
diff --git a/src/passes/CMakeLists.txt b/src/passes/CMakeLists.txt
index d352e841b..1551ba256 100644
--- a/src/passes/CMakeLists.txt
+++ b/src/passes/CMakeLists.txt
@@ -65,7 +65,6 @@ set(passes_SOURCES
RemoveImports.cpp
RemoveMemory.cpp
RemoveNonJSOps.cpp
- ReplaceStackPointer.cpp
RemoveUnusedBrs.cpp
RemoveUnusedNames.cpp
RemoveUnusedModuleElements.cpp
diff --git a/src/passes/ReplaceStackPointer.cpp b/src/passes/ReplaceStackPointer.cpp
deleted file mode 100644
index da57f8c3d..000000000
--- a/src/passes/ReplaceStackPointer.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2020 WebAssembly Community Group participants
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//
-// Convert llvm's stack pointer usage from from global.get/global.set into
-// cals to external stackSave/stackRestore.
-// This is needed to emscripten SIDE_MODULE code where mutable global imports
-// are not yet permitted by default.
-//
-
-#include "abi/js.h"
-#include "ir/import-utils.h"
-#include "pass.h"
-#include "support/debug.h"
-#include "wasm-emscripten.h"
-
-#define DEBUG_TYPE "replace-stack-pointer"
-
-namespace wasm {
-
-static Name STACK_SAVE("stackSave");
-static Name STACK_RESTORE("stackRestore");
-
-struct ReplaceStackPointer
- : public WalkerPass<PostWalker<ReplaceStackPointer>> {
- void visitGlobalGet(GlobalGet* curr) {
- if (getModule()->getGlobalOrNull(curr->name) == stackPointer) {
- needStackSave = true;
- if (!builder) {
- builder = make_unique<Builder>(*getModule());
- }
- replaceCurrent(builder->makeCall(STACK_SAVE, {}, Type::i32));
- }
- }
-
- void visitGlobalSet(GlobalSet* curr) {
- if (getModule()->getGlobalOrNull(curr->name) == stackPointer) {
- needStackRestore = true;
- if (!builder) {
- builder = make_unique<Builder>(*getModule());
- }
- replaceCurrent(
- builder->makeCall(STACK_RESTORE, {curr->value}, Type::none));
- }
- }
-
- void doWalkModule(Module* module) {
- stackPointer = getStackPointerGlobal(*module);
- if (!stackPointer) {
- BYN_DEBUG(std::cerr << "no stack pointer found\n");
- return;
- }
- BYN_DEBUG(std::cerr << "stack pointer found\n");
- super::doWalkModule(module);
- if (needStackSave) {
- ensureFunctionImport(
- module, STACK_SAVE, Signature(Type::none, Type::i32));
- }
- if (needStackRestore) {
- ensureFunctionImport(
- module, STACK_RESTORE, Signature(Type::i32, Type::none));
- }
- // Finally remove the stack pointer global itself. This avoids importing
- // a mutable global.
- module->removeGlobal(stackPointer->name);
- }
-
- void ensureFunctionImport(Module* module, Name name, Signature sig) {
- ImportInfo info(*module);
- if (info.getImportedFunction(ENV, name)) {
- return;
- }
- auto import = new Function;
- import->name = name;
- import->module = ENV;
- import->base = name;
- import->sig = sig;
- module->addFunction(import);
- }
-
-private:
- std::unique_ptr<Builder> builder;
- Global* stackPointer = nullptr;
- bool needStackSave = false;
- bool needStackRestore = false;
-};
-
-Pass* createReplaceStackPointerPass() { return new ReplaceStackPointer; }
-
-} // namespace wasm
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp
index 9b56fa54d..67e1ca53b 100644
--- a/src/passes/pass.cpp
+++ b/src/passes/pass.cpp
@@ -303,10 +303,6 @@ void PassRegistry::registerPasses() {
registerPass("rereloop",
"re-optimize control flow using the relooper algorithm",
createReReloopPass);
- registerPass("replace-stack-pointer",
- "Replace llvm-generated stack pointer global with calls with "
- "imported functions.",
- createReplaceStackPointerPass);
registerPass(
"rse", "remove redundant local.sets", createRedundantSetEliminationPass);
registerPass("roundtrip",
diff --git a/src/passes/passes.h b/src/passes/passes.h
index 434b6e382..a36aeb7c3 100644
--- a/src/passes/passes.h
+++ b/src/passes/passes.h
@@ -100,7 +100,6 @@ Pass* createRemoveUnusedNonFunctionModuleElementsPass();
Pass* createRemoveUnusedNamesPass();
Pass* createReorderFunctionsPass();
Pass* createReorderLocalsPass();
-Pass* createReplaceStackPointerPass();
Pass* createReReloopPass();
Pass* createRedundantSetEliminationPass();
Pass* createRoundTripPass();
diff --git a/src/tools/wasm-emscripten-finalize.cpp b/src/tools/wasm-emscripten-finalize.cpp
index e79bafa32..2c21d49ca 100644
--- a/src/tools/wasm-emscripten-finalize.cpp
+++ b/src/tools/wasm-emscripten-finalize.cpp
@@ -289,10 +289,6 @@ int main(int argc, const char* argv[]) {
passRunner.add("stack-check");
}
- if (sideModule && !mutableSP) {
- passRunner.add("replace-stack-pointer");
- }
-
if (legacyPIC) {
if (sideModule) {
passRunner.add("emscripten-pic");
@@ -334,9 +330,6 @@ int main(int argc, const char* argv[]) {
} else {
BYN_TRACE("finalizing as regular module\n");
if (legacyPIC) {
- if (!mutableSP) {
- generator.internalizeStackPointerGlobal();
- }
// For side modules these gets called via __post_instantiate
if (Function* F = wasm.getFunctionOrNull(ASSIGN_GOT_ENTRIES)) {
auto* ex = new Export();
diff --git a/src/wasm-emscripten.h b/src/wasm-emscripten.h
index dd5c2009f..8275f7bc8 100644
--- a/src/wasm-emscripten.h
+++ b/src/wasm-emscripten.h
@@ -36,10 +36,6 @@ public:
Function* generateAssignGOTEntriesFunction();
void generatePostInstantiateFunction();
- // Remove the import of a mutable __stack_pointer and instead initialize the
- // stack pointer from an immutable import.
- void internalizeStackPointerGlobal();
-
std::string
generateEmscriptenMetadata(Address staticBump,
std::vector<Name> const& initializerFunctions);
diff --git a/src/wasm/wasm-emscripten.cpp b/src/wasm/wasm-emscripten.cpp
index dec824331..7f7b227cf 100644
--- a/src/wasm/wasm-emscripten.cpp
+++ b/src/wasm/wasm-emscripten.cpp
@@ -116,32 +116,6 @@ void EmscriptenGlueGenerator::generatePostInstantiateFunction() {
wasm.addExport(ex);
}
-// lld can sometimes produce a build with an imported mutable __stack_pointer
-// (i.e. when linking with -fpie). This method internalizes the
-// __stack_pointer and initializes it from an immutable global instead.
-// For -shared builds we instead call replaceStackPointerGlobal.
-void EmscriptenGlueGenerator::internalizeStackPointerGlobal() {
- Global* stackPointer = getStackPointerGlobal(wasm);
- if (!stackPointer || !stackPointer->imported() || !stackPointer->mutable_) {
- return;
- }
-
- Name internalName = stackPointer->name;
- Name externalName = internalName.c_str() + std::string("_import");
-
- // Rename the imported global, and make it immutable
- stackPointer->name = externalName;
- stackPointer->mutable_ = false;
- wasm.updateMaps();
-
- // Create a new global with the old name that is not imported.
- Builder builder(wasm);
- auto* init = builder.makeGlobalGet(externalName, stackPointer->type);
- auto* sp = builder.makeGlobal(
- internalName, stackPointer->type, init, Builder::Mutable);
- wasm.addGlobal(sp);
-}
-
const Address UNKNOWN_OFFSET(uint32_t(-1));
std::vector<Address> getSegmentOffsets(Module& wasm) {