summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/tools/wasm-ctor-eval.cpp57
1 files changed, 2 insertions, 55 deletions
diff --git a/src/tools/wasm-ctor-eval.cpp b/src/tools/wasm-ctor-eval.cpp
index a44ea3ceb..f03bbec1d 100644
--- a/src/tools/wasm-ctor-eval.cpp
+++ b/src/tools/wasm-ctor-eval.cpp
@@ -112,18 +112,6 @@ public:
Iterator end() { return Iterator(); }
};
-// Use a ridiculously large stack size.
-static Index STACK_SIZE = 32 * 1024 * 1024;
-
-// Start the stack at a ridiculously large location, and do so in
-// a way that works regardless if the stack goes up or down.
-static Index STACK_START = 1024 * 1024 * 1024 + STACK_SIZE;
-
-// Bound the stack location in both directions, so we have bounds
-// that do not depend on the direction it grows.
-static Index STACK_LOWER_LIMIT = STACK_START - STACK_SIZE;
-static Index STACK_UPPER_LIMIT = STACK_START + STACK_SIZE;
-
class EvallingModuleInstance
: public ModuleInstanceBase<EvallingGlobalManager, EvallingModuleInstance> {
public:
@@ -136,36 +124,12 @@ public:
// global import, which we don't have, and is illegal to use
ModuleUtils::iterDefinedGlobals(wasm, [&](Global* global) {
if (!global->init->is<Const>()) {
- // some constants are ok to use
- if (auto* get = global->init->dynCast<GlobalGet>()) {
- auto name = get->name;
- auto* import = wasm.getGlobal(name);
- if (import->module == Name(ENV) &&
- (import->base ==
- STACKTOP || // stack constants are special, we handle them
- import->base == STACK_MAX)) {
- return; // this is fine
- }
- }
// this global is dangerously initialized by an import, so if it is
// used, we must fail
globals.addDangerous(global->name);
}
});
}
-
- std::vector<char> stack;
-
- // create C stack space for us to use. We do *NOT* care about their contents,
- // assuming the stack top was unwound. the memory may have been modified,
- // but it should not be read afterwards, doing so would be undefined behavior
- void setupEnvironment() {
- // prepare scratch memory
- stack.resize(2 * STACK_SIZE);
- // tell the module to accept writes up to the stack end
- auto total = STACK_START + STACK_SIZE;
- memorySize = total / Memory::kPageSize;
- }
};
// Build an artificial `env` module based on a module's imports, so that the
@@ -207,11 +171,7 @@ std::unique_ptr<Module> buildEnvModule(Module& wasm) {
copied->base = Name();
Builder builder(*env);
- if (global->base == STACKTOP || global->base == STACK_MAX) {
- copied->init = builder.makeConst(STACK_START);
- } else {
- copied->init = builder.makeConst(Literal::makeZero(global->type));
- }
+ copied->init = builder.makeConst(Literal::makeZero(global->type));
env->addExport(
builder.makeExport(global->base, copied->name, ExternalKind::Global));
}
@@ -405,17 +365,7 @@ private:
// TODO: handle unaligned too, see shell-interface
template<typename T> T* getMemory(Address address) {
- // if memory is on the stack, use the stack
- if (address >= STACK_LOWER_LIMIT) {
- if (address >= STACK_UPPER_LIMIT) {
- throw FailToEvalException("stack usage too high");
- }
- Address relative = address - STACK_LOWER_LIMIT;
- // in range, all is good, use the stack
- return (T*)(&instance->stack[relative]);
- }
-
- // otherwise, this must be in the singleton segment. resize as needed
+ // this must be in the singleton segment. resize as needed
if (wasm->memory.segments.size() == 0) {
std::vector<char> temp;
Builder builder(*wasm);
@@ -452,7 +402,6 @@ void evalCtors(Module& wasm, std::vector<std::string> ctors) {
CtorEvalExternalInterface envInterface;
auto envInstance =
std::make_shared<EvallingModuleInstance>(*envModule, &envInterface);
- envInstance->setupEnvironment();
std::map<Name, std::shared_ptr<EvallingModuleInstance>> linkedInstances;
linkedInstances["env"] = envInstance;
@@ -466,8 +415,6 @@ void evalCtors(Module& wasm, std::vector<std::string> ctors) {
// create an instance for evalling
EvallingModuleInstance instance(wasm, &interface, linkedInstances);
- // set up the stack area and other environment details
- instance.setupEnvironment();
// we should not add new globals from here on; as a result, using
// an imported global will fail, as it is missing and so looks new
instance.globals.seal();