diff options
author | Sam Clegg <sbc@chromium.org> | 2020-10-29 11:44:20 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-29 11:44:20 -0700 |
commit | 76f5b362bfc2665196048f8d811f259614db0072 (patch) | |
tree | 79f25c01419f8dc613f8c9ca6ebcc75b1838238a | |
parent | 8cd3ad23543b1e6d0c8e5f8a1563ca5f87960645 (diff) | |
download | binaryen-76f5b362bfc2665196048f8d811f259614db0072.tar.gz binaryen-76f5b362bfc2665196048f8d811f259614db0072.tar.bz2 binaryen-76f5b362bfc2665196048f8d811f259614db0072.zip |
Remove support for emscripten legacy PIC ABI (#3299)
-rw-r--r-- | src/passes/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/passes/EmscriptenPIC.cpp | 142 | ||||
-rw-r--r-- | src/passes/pass.cpp | 6 | ||||
-rw-r--r-- | src/passes/passes.h | 2 | ||||
-rw-r--r-- | src/shared-constants.h | 1 | ||||
-rw-r--r-- | src/tools/wasm-emscripten-finalize.cpp | 30 | ||||
-rw-r--r-- | src/wasm-emscripten.h | 3 | ||||
-rw-r--r-- | src/wasm/wasm-emscripten.cpp | 42 | ||||
-rw-r--r-- | src/wasm/wasm.cpp | 1 | ||||
-rw-r--r-- | test/lld/em_asm_shared.wat.out | 40 | ||||
-rw-r--r-- | test/lld/main_module.wat.out | 37 | ||||
-rw-r--r-- | test/lld/main_module_table.wat.out | 20 | ||||
-rw-r--r-- | test/lld/main_module_table_2.wat.out | 20 | ||||
-rw-r--r-- | test/lld/main_module_table_3.wat.out | 20 | ||||
-rw-r--r-- | test/lld/main_module_table_4.wat.out | 18 | ||||
-rw-r--r-- | test/lld/main_module_table_5.wat.out | 18 | ||||
-rw-r--r-- | test/lld/shared.wat.out | 40 | ||||
-rw-r--r-- | test/lld/shared_add_to_table.wasm.out | 50 | ||||
-rw-r--r-- | test/lld/shared_longjmp.wat.out | 42 |
19 files changed, 82 insertions, 451 deletions
diff --git a/src/passes/CMakeLists.txt b/src/passes/CMakeLists.txt index 00cbaa526..a2cb9a50c 100644 --- a/src/passes/CMakeLists.txt +++ b/src/passes/CMakeLists.txt @@ -25,7 +25,6 @@ set(passes_SOURCES DuplicateImportElimination.cpp DuplicateFunctionElimination.cpp DWARF.cpp - EmscriptenPIC.cpp ExtractFunction.cpp Flatten.cpp FuncCastEmulation.cpp diff --git a/src/passes/EmscriptenPIC.cpp b/src/passes/EmscriptenPIC.cpp deleted file mode 100644 index 51f7ead6e..000000000 --- a/src/passes/EmscriptenPIC.cpp +++ /dev/null @@ -1,142 +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 PIC ABI to emscripten ABI -// -// When generating -fPIC code llvm will generate imports call GOT.mem and -// GOT.func in order to access the addresses of external global data and -// functions. -// -// However emscripten uses a different ABI where function and data addresses -// are available at runtime via special `g$foo` and `fp$bar` function calls. -// -// Here we internalize all such wasm globals and generte code that sets their -// value based on the result of call `g$foo` and `fp$bar` functions at runtime. -// -// A function called `__assign_got_enties` is generated by this pass that -// performs all the assignments. -// - -#include "abi/js.h" -#include "asm_v_wasm.h" -#include "ir/import-utils.h" -#include "ir/table-utils.h" -#include "pass.h" -#include "shared-constants.h" -#include "support/debug.h" - -#define DEBUG_TYPE "emscripten-pic" - -namespace wasm { - -static Function* -ensureFunctionImport(Module* module, Name name, Signature sig) { - // See if its already imported. - // FIXME: O(N) - ImportInfo info(*module); - if (auto* f = info.getImportedFunction(ENV, name)) { - return f; - } - // Failing that create a new import. - auto import = new Function; - import->name = name; - import->module = ENV; - import->base = name; - import->sig = sig; - module->addFunction(import); - return import; -} - -struct EmscriptenPIC : public WalkerPass<PostWalker<EmscriptenPIC>> { - - EmscriptenPIC(bool sideModule) : sideModule(sideModule) {} - - void visitGlobal(Global* curr) { - if (!curr->imported()) { - return; - } - if (curr->module == "GOT.func") { - gotFuncEntries.push_back(curr); - } else if (curr->module == "GOT.mem") { - gotMemEntries.push_back(curr); - } else { - return; - } - // Make this an internal, non-imported, global. - curr->module.clear(); - curr->init = Builder(*getModule()).makeConst(int32_t(0)); - } - - void visitModule(Module* module) { - BYN_TRACE("generateAssignGOTEntriesFunction\n"); - if (!gotFuncEntries.size() && !gotMemEntries.size()) { - return; - } - - Builder builder(*getModule()); - Function* assignFunc = builder.makeFunction( - ASSIGN_GOT_ENTRIES, std::vector<NameType>{}, Type::none, {}); - Block* block = builder.makeBlock(); - assignFunc->body = block; - - for (Global* g : gotMemEntries) { - auto base = g->base; - Name getter(std::string("g$") + base.c_str()); - ensureFunctionImport(module, getter, Signature(Type::none, Type::i32)); - Expression* call = builder.makeCall(getter, {}, Type::i32); - GlobalSet* globalSet = builder.makeGlobalSet(g->name, call); - block->list.push_back(globalSet); - } - - ImportInfo importInfo(*module); - - for (Global* g : gotFuncEntries) { - // The function has to exist either as export or an import. - // Note that we don't search for the function by name since its internal - // name may be different. - auto* ex = module->getExportOrNull(g->base); - // This is imported create an fp$ import to get the function table index - // from the dynamic loader. - auto* f = importInfo.getImportedFunction(ENV, g->base); - if (!f) { - if (!module->getExportOrNull(g->base)) { - Fatal() << "GOT.func entry with no import/export: " << g->base; - } - f = module->getFunction(ex->value); - } - Name getter( - (std::string("fp$") + g->base.c_str() + std::string("$") + getSig(f)) - .c_str()); - ensureFunctionImport(module, getter, Signature(Type::none, Type::i32)); - auto* call = builder.makeCall(getter, {}, Type::i32); - auto* globalSet = builder.makeGlobalSet(g->name, call); - block->list.push_back(globalSet); - } - - module->addFunction(assignFunc); - } - - std::vector<Global*> gotFuncEntries; - std::vector<Global*> gotMemEntries; - bool sideModule; -}; - -Pass* createEmscriptenPICPass() { return new EmscriptenPIC(true); } - -Pass* createEmscriptenPICMainModulePass() { return new EmscriptenPIC(false); } - -} // namespace wasm diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp index 3e9429695..e6b537813 100644 --- a/src/passes/pass.cpp +++ b/src/passes/pass.cpp @@ -126,12 +126,6 @@ void PassRegistry::registerPasses() { registerPass("emit-target-features", "emit the target features section in the output", createEmitTargetFeaturesPass); - registerPass("emscripten-pic", - "Convert PIC ABI from llvm to emscripten", - createEmscriptenPICPass); - registerPass("emscripten-pic-main-module", - "Convert PIC ABI from llvm to emscripten", - createEmscriptenPICMainModulePass); registerPass("extract-function", "leaves just one function (useful for debugging)", createExtractFunctionPass); diff --git a/src/passes/passes.h b/src/passes/passes.h index e88dc835d..bc93cee05 100644 --- a/src/passes/passes.h +++ b/src/passes/passes.h @@ -41,8 +41,6 @@ Pass* createDWARFDumpPass(); Pass* createDuplicateImportEliminationPass(); Pass* createDuplicateFunctionEliminationPass(); Pass* createEmitTargetFeaturesPass(); -Pass* createEmscriptenPICPass(); -Pass* createEmscriptenPICMainModulePass(); Pass* createExtractFunctionPass(); Pass* createFlattenPass(); Pass* createFuncCastEmulationPass(); diff --git a/src/shared-constants.h b/src/shared-constants.h index b0fd7d625..797f60227 100644 --- a/src/shared-constants.h +++ b/src/shared-constants.h @@ -64,7 +64,6 @@ extern Name EXIT; extern Name SHARED; extern Name EVENT; extern Name ATTR; -extern Name ASSIGN_GOT_ENTRIES; } // namespace wasm diff --git a/src/tools/wasm-emscripten-finalize.cpp b/src/tools/wasm-emscripten-finalize.cpp index ecf10119d..d76bd4fc9 100644 --- a/src/tools/wasm-emscripten-finalize.cpp +++ b/src/tools/wasm-emscripten-finalize.cpp @@ -51,7 +51,6 @@ int main(int argc, const char* argv[]) { bool debugInfo = false; bool DWARF = false; bool sideModule = false; - bool legacyPIC = true; bool legalizeJavaScriptFFI = true; bool bigInt = false; bool checkStackOverflow = false; @@ -114,9 +113,7 @@ int main(int argc, const char* argv[]) { "", "Use new/llvm PIC abi", Options::Arguments::Zero, - [&legacyPIC](Options* o, const std::string& argument) { - legacyPIC = false; - }) + [&](Options* o, const std::string& argument) {}) .add("--input-source-map", "-ism", "Consume source map from the specified file", @@ -281,14 +278,6 @@ int main(int argc, const char* argv[]) { passRunner.add("stack-check"); } - if (legacyPIC) { - if (sideModule) { - passRunner.add("emscripten-pic"); - } else { - passRunner.add("emscripten-pic-main-module"); - } - } - if (!noDynCalls && !standaloneWasm) { // If not standalone wasm then JS is relevant and we need dynCalls. if (onlyI64DynCalls) { @@ -318,20 +307,13 @@ int main(int argc, const char* argv[]) { if (sideModule) { BYN_TRACE("finalizing as side module\n"); - generator.generatePostInstantiateFunction(); + // The emscripten PIC ABI still expects a function named + // __post_instantiate to be exported by side module. + if (auto* e = wasm.getExportOrNull(WASM_CALL_CTORS)) { + e->name = "__post_instantiate"; + } } else { BYN_TRACE("finalizing as regular module\n"); - if (legacyPIC) { - // For side modules these gets called via __post_instantiate - if (Function* F = wasm.getFunctionOrNull(ASSIGN_GOT_ENTRIES)) { - auto* ex = new Export(); - ex->value = F->name; - ex->name = F->name; - ex->kind = ExternalKind::Function; - wasm.addExport(ex); - initializerFunctions.push_back(F->name); - } - } // Costructors get called from crt1 in wasm standalone mode. // Unless there is no entry point. if (!standaloneWasm || !wasm.getExportOrNull("_start")) { diff --git a/src/wasm-emscripten.h b/src/wasm-emscripten.h index 8275f7bc8..d0e2d8cb3 100644 --- a/src/wasm-emscripten.h +++ b/src/wasm-emscripten.h @@ -33,9 +33,6 @@ public: : wasm(wasm), builder(wasm), stackPointerOffset(stackPointerOffset), useStackPointerGlobal(stackPointerOffset == 0) {} - Function* generateAssignGOTEntriesFunction(); - void generatePostInstantiateFunction(); - 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 7f7b227cf..a1a53af7e 100644 --- a/src/wasm/wasm-emscripten.cpp +++ b/src/wasm/wasm-emscripten.cpp @@ -38,7 +38,6 @@ cashew::IString EM_ASM_PREFIX("emscripten_asm_const"); cashew::IString EM_JS_PREFIX("__em_js__"); static Name STACK_INIT("stack$init"); -static Name POST_INSTANTIATE("__post_instantiate"); void addExportedFunction(Module& wasm, Function* function) { wasm.addFunction(function); @@ -75,47 +74,6 @@ Global* getStackPointerGlobal(Module& wasm) { return nullptr; } -// For emscripten SIDE_MODULE we generate a single exported function called -// __post_instantiate which calls two functions: -// -// - __assign_got_enties -// - __wasm_call_ctors -// -// The former is function we generate here which calls imported g$XXX functions -// order to assign values to any globals imported from GOT.func or GOT.mem. -// These globals hold address of functions and globals respectively. -// -// The later is the constructor function generaed by lld which performs any -// fixups on the memory section and calls static constructors. -void EmscriptenGlueGenerator::generatePostInstantiateFunction() { - BYN_TRACE("generatePostInstantiateFunction\n"); - Builder builder(wasm); - Function* post_instantiate = builder.makeFunction( - POST_INSTANTIATE, std::vector<NameType>{}, Type::none, {}); - wasm.addFunction(post_instantiate); - - if (Function* F = wasm.getFunctionOrNull(ASSIGN_GOT_ENTRIES)) { - // call __assign_got_enties from post_instantiate - Expression* call = builder.makeCall(F->name, {}, Type::none); - post_instantiate->body = builder.blockify(post_instantiate->body, call); - } - - // The names of standard imports/exports used by lld doesn't quite match that - // expected by emscripten. - // TODO(sbc): Unify these - if (auto* e = wasm.getExportOrNull(WASM_CALL_CTORS)) { - Expression* call = builder.makeCall(e->value, {}, Type::none); - post_instantiate->body = builder.blockify(post_instantiate->body, call); - wasm.removeExport(WASM_CALL_CTORS); - } - - auto* ex = new Export(); - ex->value = post_instantiate->name; - ex->name = POST_INSTANTIATE; - ex->kind = ExternalKind::Function; - wasm.addExport(ex); -} - const Address UNKNOWN_OFFSET(uint32_t(-1)); std::vector<Address> getSegmentOffsets(Module& wasm) { diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp index 3db76d86e..215928793 100644 --- a/src/wasm/wasm.cpp +++ b/src/wasm/wasm.cpp @@ -92,7 +92,6 @@ Name EXIT("exit"); Name SHARED("shared"); Name EVENT("event"); Name ATTR("attr"); -Name ASSIGN_GOT_ENTRIES("__assign_got_enties"); // Expressions diff --git a/test/lld/em_asm_shared.wat.out b/test/lld/em_asm_shared.wat.out index ddf87cf9b..5ee4e48fb 100644 --- a/test/lld/em_asm_shared.wat.out +++ b/test/lld/em_asm_shared.wat.out @@ -9,22 +9,19 @@ (import "env" "__stack_pointer" (global $gimport$2 (mut i32))) (import "env" "__memory_base" (global $gimport$3 i32)) (import "env" "__table_base" (global $gimport$4 i32)) + (import "GOT.mem" "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE" (global $gimport$6 (mut i32))) + (import "GOT.mem" "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiiEEE6bufferE" (global $gimport$7 (mut i32))) + (import "GOT.mem" "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiEEE6bufferE" (global $gimport$8 (mut i32))) (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i32 i32 i32) (result i32))) - (import "env" "g$_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE" (func $g$_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE (result i32))) - (import "env" "g$_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiiEEE6bufferE" (func $g$_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiiEEE6bufferE (result i32))) - (import "env" "g$_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiEEE6bufferE" (func $g$_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiEEE6bufferE (result i32))) - (global $gimport$6 (mut i32) (i32.const 0)) - (global $gimport$7 (mut i32) (i32.const 0)) - (global $gimport$8 (mut i32) (i32.const 0)) (global $global$0 i32 (i32.const 33)) (global $global$1 i32 (i32.const 54)) (global $global$2 i32 (i32.const 88)) + (export "__post_instantiate" (func $__wasm_call_ctors)) (export "__original_main" (func $__original_main)) (export "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE" (global $global$0)) (export "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiiEEE6bufferE" (global $global$1)) (export "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiEEE6bufferE" (global $global$2)) (export "main" (func $main)) - (export "__post_instantiate" (func $__post_instantiate)) (func $__wasm_call_ctors (call $__wasm_apply_relocs) ) @@ -93,21 +90,6 @@ (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) - (func $__assign_got_enties - (global.set $gimport$6 - (call $g$_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE) - ) - (global.set $gimport$7 - (call $g$_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiiEEE6bufferE) - ) - (global.set $gimport$8 - (call $g$_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiEEE6bufferE) - ) - ) - (func $__post_instantiate - (call $__assign_got_enties) - (call $__wasm_call_ctors) - ) ) (; --BEGIN METADATA -- @@ -120,20 +102,20 @@ "staticBump": 0, "tableSize": 0, "declares": [ - "emscripten_asm_const_int", - "g$_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE", - "g$_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiiEEE6bufferE", - "g$_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiEEE6bufferE" + "emscripten_asm_const_int" ], "externs": [ "___stack_pointer", "___memory_base", - "___table_base" + "___table_base", + "__ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE", + "__ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiiEEE6bufferE", + "__ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiEEE6bufferE" ], "exports": [ + "__post_instantiate", "__original_main", - "main", - "__post_instantiate" + "main" ], "namedGlobals": { "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE" : "33", diff --git a/test/lld/main_module.wat.out b/test/lld/main_module.wat.out index 98db00719..810a8010b 100644 --- a/test/lld/main_module.wat.out +++ b/test/lld/main_module.wat.out @@ -1,6 +1,6 @@ (module - (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) + (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "memory" (memory $0 0)) (data (global.get $gimport$2) "Hello, world\00\00\00\00\00\00\00\00\00\00\00\00") @@ -8,13 +8,10 @@ (import "env" "__stack_pointer" (global $sp (mut i32))) (import "env" "__memory_base" (global $gimport$2 i32)) (import "env" "__table_base" (global $gimport$3 i32)) + (import "GOT.mem" "external_var" (global $gimport$5 (mut i32))) + (import "GOT.func" "puts" (global $gimport$6 (mut i32))) + (import "GOT.func" "_Z13print_messagev" (global $gimport$7 (mut i32))) (import "env" "puts" (func $puts (param i32) (result i32))) - (import "env" "g$external_var" (func $g$external_var (result i32))) - (import "env" "fp$puts$ii" (func $fp$puts$ii (result i32))) - (import "env" "fp$_Z13print_messagev$i" (func $fp$_Z13print_messagev$i (result i32))) - (global $gimport$5 (mut i32) (i32.const 0)) - (global $gimport$6 (mut i32) (i32.const 0)) - (global $gimport$7 (mut i32) (i32.const 0)) (global $global$0 i32 (i32.const 16)) (global $global$1 i32 (i32.const 20)) (global $global i32 (i32.const 42)) @@ -23,7 +20,6 @@ (export "ptr_puts" (global $global$0)) (export "ptr_local_func" (global $global$1)) (export "__data_end" (global $global)) - (export "__assign_got_enties" (func $__assign_got_enties)) (func $__wasm_call_ctors (call $__wasm_apply_relocs) ) @@ -56,17 +52,6 @@ (global.get $gimport$5) ) ) - (func $__assign_got_enties - (global.set $gimport$5 - (call $g$external_var) - ) - (global.set $gimport$6 - (call $fp$puts$ii) - ) - (global.set $gimport$7 - (call $fp$_Z13print_messagev$i) - ) - ) ) (; --BEGIN METADATA -- @@ -74,24 +59,22 @@ "staticBump": 4294966770, "tableSize": 0, "initializers": [ - "__assign_got_enties", "__wasm_call_ctors" ], "declares": [ - "puts", - "g$external_var", - "fp$puts$ii", - "fp$_Z13print_messagev$i" + "puts" ], "externs": [ "___stack_pointer", "___memory_base", - "___table_base" + "___table_base", + "_external_var", + "_puts", + "__Z13print_messagev" ], "exports": [ "__wasm_call_ctors", - "_Z13print_messagev", - "__assign_got_enties" + "_Z13print_messagev" ], "namedGlobals": { "ptr_puts" : "16", diff --git a/test/lld/main_module_table.wat.out b/test/lld/main_module_table.wat.out index 62ba29010..dfe3a1d6b 100644 --- a/test/lld/main_module_table.wat.out +++ b/test/lld/main_module_table.wat.out @@ -1,39 +1,27 @@ (module (type $none_=>_none (func)) - (type $none_=>_i32 (func (result i32))) (import "env" "__stack_pointer" (global $sp (mut i32))) - (import "env" "fp$__stdio_write$v" (func $fp$__stdio_write$v (result i32))) - (global $gimport$9 (mut i32) (i32.const 0)) + (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (global $global i32 (i32.const 42)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) - (export "__assign_got_enties" (func $__assign_got_enties)) (func $__stdio_write (nop) ) - (func $__assign_got_enties - (global.set $gimport$9 - (call $fp$__stdio_write$v) - ) - ) ) (; --BEGIN METADATA -- { "staticBump": 4294966770, "tableSize": 0, - "initializers": [ - "__assign_got_enties" - ], "declares": [ - "fp$__stdio_write$v" ], "externs": [ - "___stack_pointer" + "___stack_pointer", + "___stdio_write" ], "exports": [ - "__stdio_write", - "__assign_got_enties" + "__stdio_write" ], "namedGlobals": { "__data_end" : "42" diff --git a/test/lld/main_module_table_2.wat.out b/test/lld/main_module_table_2.wat.out index 1a0cceed6..23e406953 100644 --- a/test/lld/main_module_table_2.wat.out +++ b/test/lld/main_module_table_2.wat.out @@ -1,40 +1,28 @@ (module (type $none_=>_none (func)) - (type $none_=>_i32 (func (result i32))) (import "env" "table" (table $timport$9 1 funcref)) (import "env" "__stack_pointer" (global $sp (mut i32))) - (import "env" "fp$__stdio_write$v" (func $fp$__stdio_write$v (result i32))) - (global $gimport$9 (mut i32) (i32.const 0)) + (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (global $global i32 (i32.const 42)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) - (export "__assign_got_enties" (func $__assign_got_enties)) (func $__stdio_write (nop) ) - (func $__assign_got_enties - (global.set $gimport$9 - (call $fp$__stdio_write$v) - ) - ) ) (; --BEGIN METADATA -- { "staticBump": 4294966770, "tableSize": 1, - "initializers": [ - "__assign_got_enties" - ], "declares": [ - "fp$__stdio_write$v" ], "externs": [ - "___stack_pointer" + "___stack_pointer", + "___stdio_write" ], "exports": [ - "__stdio_write", - "__assign_got_enties" + "__stdio_write" ], "namedGlobals": { "__data_end" : "42" diff --git a/test/lld/main_module_table_3.wat.out b/test/lld/main_module_table_3.wat.out index 1a0cceed6..23e406953 100644 --- a/test/lld/main_module_table_3.wat.out +++ b/test/lld/main_module_table_3.wat.out @@ -1,40 +1,28 @@ (module (type $none_=>_none (func)) - (type $none_=>_i32 (func (result i32))) (import "env" "table" (table $timport$9 1 funcref)) (import "env" "__stack_pointer" (global $sp (mut i32))) - (import "env" "fp$__stdio_write$v" (func $fp$__stdio_write$v (result i32))) - (global $gimport$9 (mut i32) (i32.const 0)) + (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (global $global i32 (i32.const 42)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) - (export "__assign_got_enties" (func $__assign_got_enties)) (func $__stdio_write (nop) ) - (func $__assign_got_enties - (global.set $gimport$9 - (call $fp$__stdio_write$v) - ) - ) ) (; --BEGIN METADATA -- { "staticBump": 4294966770, "tableSize": 1, - "initializers": [ - "__assign_got_enties" - ], "declares": [ - "fp$__stdio_write$v" ], "externs": [ - "___stack_pointer" + "___stack_pointer", + "___stdio_write" ], "exports": [ - "__stdio_write", - "__assign_got_enties" + "__stdio_write" ], "namedGlobals": { "__data_end" : "42" diff --git a/test/lld/main_module_table_4.wat.out b/test/lld/main_module_table_4.wat.out index 35f5e2ea1..e3ba217b2 100644 --- a/test/lld/main_module_table_4.wat.out +++ b/test/lld/main_module_table_4.wat.out @@ -1,42 +1,30 @@ (module (type $none_=>_none (func)) - (type $none_=>_i32 (func (result i32))) (import "env" "table" (table $timport$9 1 funcref)) (import "env" "__stack_pointer" (global $sp (mut i32))) + (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (import "env" "__table_base" (global $tb i32)) - (import "env" "fp$__stdio_write$v" (func $fp$__stdio_write$v (result i32))) - (global $gimport$9 (mut i32) (i32.const 0)) (global $global i32 (i32.const 42)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) - (export "__assign_got_enties" (func $__assign_got_enties)) (func $__stdio_write (nop) ) - (func $__assign_got_enties - (global.set $gimport$9 - (call $fp$__stdio_write$v) - ) - ) ) (; --BEGIN METADATA -- { "staticBump": 4294966770, "tableSize": 1, - "initializers": [ - "__assign_got_enties" - ], "declares": [ - "fp$__stdio_write$v" ], "externs": [ "___stack_pointer", + "___stdio_write", "___table_base" ], "exports": [ - "__stdio_write", - "__assign_got_enties" + "__stdio_write" ], "namedGlobals": { "__data_end" : "42" diff --git a/test/lld/main_module_table_5.wat.out b/test/lld/main_module_table_5.wat.out index a2526fc48..67abcbbff 100644 --- a/test/lld/main_module_table_5.wat.out +++ b/test/lld/main_module_table_5.wat.out @@ -1,18 +1,15 @@ (module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) - (type $none_=>_i32 (func (result i32))) (import "env" "table" (table $timport$9 1 funcref)) (elem (global.get $tb) $other $stuff) (import "env" "__stack_pointer" (global $sp (mut i32))) + (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (import "env" "__table_base" (global $tb i32)) - (import "env" "fp$__stdio_write$v" (func $fp$__stdio_write$v (result i32))) - (global $gimport$9 (mut i32) (i32.const 0)) (global $global i32 (i32.const 42)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) (export "dynCall_v" (func $dynCall_v)) - (export "__assign_got_enties" (func $__assign_got_enties)) (func $__stdio_write (nop) ) @@ -22,11 +19,6 @@ (func $stuff (nop) ) - (func $__assign_got_enties - (global.set $gimport$9 - (call $fp$__stdio_write$v) - ) - ) (func $dynCall_v (param $fptr i32) (call_indirect (type $none_=>_none) (local.get $fptr) @@ -38,20 +30,16 @@ { "staticBump": 4294966770, "tableSize": 1, - "initializers": [ - "__assign_got_enties" - ], "declares": [ - "fp$__stdio_write$v" ], "externs": [ "___stack_pointer", + "___stdio_write", "___table_base" ], "exports": [ "__stdio_write", - "dynCall_v", - "__assign_got_enties" + "dynCall_v" ], "namedGlobals": { "__data_end" : "42" diff --git a/test/lld/shared.wat.out b/test/lld/shared.wat.out index 46265dba6..1b00d5642 100644 --- a/test/lld/shared.wat.out +++ b/test/lld/shared.wat.out @@ -7,19 +7,16 @@ (import "env" "__indirect_function_table" (table $timport$1 0 funcref)) (import "env" "__memory_base" (global $gimport$2 i32)) (import "env" "__table_base" (global $gimport$3 i32)) + (import "GOT.mem" "external_var" (global $gimport$5 (mut i32))) + (import "GOT.func" "puts" (global $gimport$6 (mut i32))) + (import "GOT.func" "_Z13print_messagev" (global $gimport$7 (mut i32))) (import "env" "puts" (func $puts (param i32) (result i32))) - (import "env" "g$external_var" (func $g$external_var (result i32))) - (import "env" "fp$puts$ii" (func $fp$puts$ii (result i32))) - (import "env" "fp$_Z13print_messagev$i" (func $fp$_Z13print_messagev$i (result i32))) - (global $gimport$5 (mut i32) (i32.const 0)) - (global $gimport$6 (mut i32) (i32.const 0)) - (global $gimport$7 (mut i32) (i32.const 0)) (global $global$0 i32 (i32.const 16)) (global $global$1 i32 (i32.const 20)) + (export "__post_instantiate" (func $__wasm_call_ctors)) (export "_Z13print_messagev" (func $print_message\28\29)) (export "ptr_puts" (global $global$0)) (export "ptr_local_func" (global $global$1)) - (export "__post_instantiate" (func $__post_instantiate)) (func $__wasm_call_ctors (call $__wasm_apply_relocs) ) @@ -52,21 +49,6 @@ (global.get $gimport$5) ) ) - (func $__assign_got_enties - (global.set $gimport$5 - (call $g$external_var) - ) - (global.set $gimport$6 - (call $fp$puts$ii) - ) - (global.set $gimport$7 - (call $fp$_Z13print_messagev$i) - ) - ) - (func $__post_instantiate - (call $__assign_got_enties) - (call $__wasm_call_ctors) - ) ) (; --BEGIN METADATA -- @@ -74,18 +56,18 @@ "staticBump": 0, "tableSize": 0, "declares": [ - "puts", - "g$external_var", - "fp$puts$ii", - "fp$_Z13print_messagev$i" + "puts" ], "externs": [ "___memory_base", - "___table_base" + "___table_base", + "_external_var", + "_puts", + "__Z13print_messagev" ], "exports": [ - "_Z13print_messagev", - "__post_instantiate" + "__post_instantiate", + "_Z13print_messagev" ], "namedGlobals": { "ptr_puts" : "16", diff --git a/test/lld/shared_add_to_table.wasm.out b/test/lld/shared_add_to_table.wasm.out index 22a608f1b..711d7dc99 100644 --- a/test/lld/shared_add_to_table.wasm.out +++ b/test/lld/shared_add_to_table.wasm.out @@ -1,7 +1,7 @@ (module - (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "memory" (memory $mimport$0 0)) (data (global.get $gimport$1) "*\00\00\00") @@ -9,24 +9,20 @@ (import "env" "__stack_pointer" (global $gimport$0 (mut i32))) (import "env" "__memory_base" (global $gimport$1 i32)) (import "env" "__table_base" (global $gimport$2 i32)) + (import "GOT.func" "_Z16waka_func_theirsi" (global $gimport$3 (mut i32))) + (import "GOT.func" "_Z14waka_func_minei" (global $gimport$4 (mut i32))) + (import "GOT.mem" "waka_mine" (global $gimport$5 (mut i32))) + (import "GOT.mem" "waka_others" (global $gimport$6 (mut i32))) (import "env" "_Z16waka_func_theirsi" (func $waka_func_theirs\28int\29 (param i32) (result i32))) - (import "env" "g$waka_mine" (func $g$waka_mine (result i32))) - (import "env" "g$waka_others" (func $g$waka_others (result i32))) - (import "env" "fp$_Z16waka_func_theirsi$ii" (func $fp$_Z16waka_func_theirsi$ii (result i32))) - (import "env" "fp$_Z14waka_func_minei$ii" (func $fp$_Z14waka_func_minei$ii (result i32))) - (global $gimport$3 (mut i32) (i32.const 0)) - (global $gimport$4 (mut i32) (i32.const 0)) - (global $gimport$5 (mut i32) (i32.const 0)) - (global $gimport$6 (mut i32) (i32.const 0)) (global $global$0 i32 (i32.const 0)) (global $global$1 i32 (i32.const 0)) + (export "__post_instantiate" (func $__wasm_call_ctors)) (export "__wasm_apply_relocs" (func $__wasm_apply_relocs)) (export "_Z14waka_func_minei" (func $waka_func_mine\28int\29)) (export "__original_main" (func $__original_main)) (export "waka_mine" (global $global$0)) (export "main" (func $main)) (export "__dso_handle" (global $global$1)) - (export "__post_instantiate" (func $__post_instantiate)) (func $__wasm_call_ctors (call $__wasm_apply_relocs) ) @@ -65,24 +61,6 @@ (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) - (func $__assign_got_enties - (global.set $gimport$5 - (call $g$waka_mine) - ) - (global.set $gimport$6 - (call $g$waka_others) - ) - (global.set $gimport$3 - (call $fp$_Z16waka_func_theirsi$ii) - ) - (global.set $gimport$4 - (call $fp$_Z14waka_func_minei$ii) - ) - ) - (func $__post_instantiate - (call $__assign_got_enties) - (call $__wasm_call_ctors) - ) ;; dylink section ;; memorysize: 4 ;; memoryalignment: 2 @@ -96,23 +74,23 @@ "staticBump": 0, "tableSize": 0, "declares": [ - "_Z16waka_func_theirsi", - "g$waka_mine", - "g$waka_others", - "fp$_Z16waka_func_theirsi$ii", - "fp$_Z14waka_func_minei$ii" + "_Z16waka_func_theirsi" ], "externs": [ "___stack_pointer", "___memory_base", - "___table_base" + "___table_base", + "__Z16waka_func_theirsi", + "__Z14waka_func_minei", + "_waka_mine", + "_waka_others" ], "exports": [ + "__post_instantiate", "__wasm_apply_relocs", "_Z14waka_func_minei", "__original_main", - "main", - "__post_instantiate" + "main" ], "namedGlobals": { "waka_mine" : "0", diff --git a/test/lld/shared_longjmp.wat.out b/test/lld/shared_longjmp.wat.out index 587e039b4..605317b6d 100644 --- a/test/lld/shared_longjmp.wat.out +++ b/test/lld/shared_longjmp.wat.out @@ -1,9 +1,9 @@ (module (type $none_=>_none (func)) - (type $none_=>_i32 (func (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) @@ -12,6 +12,9 @@ (import "env" "__indirect_function_table" (table $timport$1 0 funcref)) (import "env" "__memory_base" (global $gimport$2 i32)) (import "env" "__table_base" (global $gimport$3 i32)) + (import "GOT.mem" "__THREW__" (global $gimport$12 (mut i32))) + (import "GOT.func" "emscripten_longjmp" (global $gimport$13 (mut i32))) + (import "GOT.mem" "__threwValue" (global $gimport$14 (mut i32))) (import "env" "malloc" (func $fimport$4 (param i32) (result i32))) (import "env" "saveSetjmp" (func $fimport$5 (param i32 i32 i32 i32) (result i32))) (import "env" "getTempRet0" (func $fimport$6 (result i32))) @@ -20,19 +23,13 @@ (import "env" "testSetjmp" (func $fimport$9 (param i32 i32 i32) (result i32))) (import "env" "setTempRet0" (func $fimport$10 (param i32))) (import "env" "free" (func $fimport$11 (param i32))) - (import "env" "g$__THREW__" (func $g$__THREW__ (result i32))) - (import "env" "g$__threwValue" (func $g$__threwValue (result i32))) - (import "env" "fp$emscripten_longjmp$vii" (func $fp$emscripten_longjmp$vii (result i32))) - (global $gimport$12 (mut i32) (i32.const 0)) - (global $gimport$13 (mut i32) (i32.const 0)) - (global $gimport$14 (mut i32) (i32.const 0)) (global $global$0 i32 (i32.const 0)) (global $global$1 i32 (i32.const 4)) + (export "__post_instantiate" (func $0)) (export "_start" (func $2)) (export "__THREW__" (global $global$0)) (export "__threwValue" (global $global$1)) (export "dynCall_vii" (func $dynCall_vii)) - (export "__post_instantiate" (func $__post_instantiate)) (func $0 (call $1) ) @@ -142,17 +139,6 @@ ) (unreachable) ) - (func $__assign_got_enties - (global.set $gimport$12 - (call $g$__THREW__) - ) - (global.set $gimport$14 - (call $g$__threwValue) - ) - (global.set $gimport$13 - (call $fp$emscripten_longjmp$vii) - ) - ) (func $dynCall_vii (param $fptr i32) (param $0 i32) (param $1 i32) (call_indirect (type $i32_i32_=>_none) (local.get $0) @@ -160,10 +146,6 @@ (local.get $fptr) ) ) - (func $__post_instantiate - (call $__assign_got_enties) - (call $0) - ) ) (; --BEGIN METADATA -- @@ -177,19 +159,19 @@ "emscripten_longjmp", "testSetjmp", "setTempRet0", - "free", - "g$__THREW__", - "g$__threwValue", - "fp$emscripten_longjmp$vii" + "free" ], "externs": [ "___memory_base", - "___table_base" + "___table_base", + "___THREW__", + "_emscripten_longjmp", + "___threwValue" ], "exports": [ + "__post_instantiate", "_start", - "dynCall_vii", - "__post_instantiate" + "dynCall_vii" ], "namedGlobals": { "__THREW__" : "0", |