summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Clegg <sbc@chromium.org>2020-10-29 11:44:20 -0700
committerGitHub <noreply@github.com>2020-10-29 11:44:20 -0700
commit76f5b362bfc2665196048f8d811f259614db0072 (patch)
tree79f25c01419f8dc613f8c9ca6ebcc75b1838238a
parent8cd3ad23543b1e6d0c8e5f8a1563ca5f87960645 (diff)
downloadbinaryen-76f5b362bfc2665196048f8d811f259614db0072.tar.gz
binaryen-76f5b362bfc2665196048f8d811f259614db0072.tar.bz2
binaryen-76f5b362bfc2665196048f8d811f259614db0072.zip
Remove support for emscripten legacy PIC ABI (#3299)
-rw-r--r--src/passes/CMakeLists.txt1
-rw-r--r--src/passes/EmscriptenPIC.cpp142
-rw-r--r--src/passes/pass.cpp6
-rw-r--r--src/passes/passes.h2
-rw-r--r--src/shared-constants.h1
-rw-r--r--src/tools/wasm-emscripten-finalize.cpp30
-rw-r--r--src/wasm-emscripten.h3
-rw-r--r--src/wasm/wasm-emscripten.cpp42
-rw-r--r--src/wasm/wasm.cpp1
-rw-r--r--test/lld/em_asm_shared.wat.out40
-rw-r--r--test/lld/main_module.wat.out37
-rw-r--r--test/lld/main_module_table.wat.out20
-rw-r--r--test/lld/main_module_table_2.wat.out20
-rw-r--r--test/lld/main_module_table_3.wat.out20
-rw-r--r--test/lld/main_module_table_4.wat.out18
-rw-r--r--test/lld/main_module_table_5.wat.out18
-rw-r--r--test/lld/shared.wat.out40
-rw-r--r--test/lld/shared_add_to_table.wasm.out50
-rw-r--r--test/lld/shared_longjmp.wat.out42
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",