@ai-ecoverse/slicc-kernel 1.7.2 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/node-process-worker.js +20 -13
- package/dist/node-process-worker.js.map +3 -3
- package/dist/process-worker.js +20 -13
- package/dist/process-worker.js.map +3 -3
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -109,7 +109,7 @@ A WASI program runs in a process worker of its own like an Emscripten one, again
|
|
|
109
109
|
|
|
110
110
|
### Program imports
|
|
111
111
|
|
|
112
|
-
A WASI command can name an ES module of its package that provides imports of its own, for host functions a program needs beyond WASI (`"imports": "host/pnpm-host.mjs"`). Each worker of the process (the process and every thread) loads it, with the same trust as Emscripten glue, and calls its `createImports(ctx)`, which returns import namespaces (`{ pnpm_host: { … } }`). It may not define `wasi_snapshot_preview1`, `wasix_32v1`, `wasi` or `env`; any other namespace the module imports is then accepted, and functions it does not provide answer `ENOSYS`. `ctx` has:
|
|
112
|
+
A WASI command can name an ES module of its package that provides imports of its own, for host functions a program needs beyond WASI (`"imports": "host/pnpm-host.mjs"`). Each worker of the process (the process and every thread) loads it, with the same trust as Emscripten glue, and calls its `createImports(ctx)`, which returns import namespaces (`{ pnpm_host: { … } }`). It may not define `wasi_snapshot_preview1`, `wasix_32v1`, `wasi` or `env`; any other namespace the module imports is then accepted, and functions it does not provide answer `ENOSYS`. A WASI program (one that imports `wasi_snapshot_preview1` or `wasix_32v1`) needs no imports module for that: without one, its function imports from namespaces of its own all answer `ENOSYS`, so the same binary runs the commands that need no host functions anywhere. A module with no WASI imports, or a foreign import that is not a function, is still refused (126). `ctx` has:
|
|
113
113
|
|
|
114
114
|
- `memory()`, `instance()` (after instantiation), `tid` (1 for the main thread), `argv`, `env`, `cwd()`;
|
|
115
115
|
- `fs`: the synchronous filesystem the WASI calls use (absolute paths);
|
|
@@ -5889,22 +5889,27 @@ __export(wasi_runtime_exports, {
|
|
|
5889
5889
|
trapMessage: () => trapMessage,
|
|
5890
5890
|
unsupportedImport: () => unsupportedImport
|
|
5891
5891
|
});
|
|
5892
|
+
function accepted(imp, scope2) {
|
|
5893
|
+
const { module, name, kind } = imp;
|
|
5894
|
+
if (module === PREVIEW1 || module === WASIX) return true;
|
|
5895
|
+
if (!RESERVED.has(module) && (scope2.extended || scope2.wasi && kind === "function")) return true;
|
|
5896
|
+
if (scope2.pie && (module === "GOT.mem" || module === "GOT.func")) return true;
|
|
5897
|
+
if (scope2.pie && module === "env" && kind !== "memory") return true;
|
|
5898
|
+
if (kind === "memory" && scope2.memory?.module === module && scope2.memory.name === name)
|
|
5899
|
+
return true;
|
|
5900
|
+
return module === "wasi" && name === "thread-spawn" && (scope2.wasix || !!scope2.memory?.shared);
|
|
5901
|
+
}
|
|
5892
5902
|
function unsupportedImport(module, memory, extended = false) {
|
|
5893
5903
|
const imports = WebAssembly.Module.imports(module);
|
|
5894
5904
|
const wasix = imports.some((i) => i.module === WASIX);
|
|
5895
|
-
const
|
|
5896
|
-
|
|
5897
|
-
|
|
5898
|
-
|
|
5899
|
-
if (
|
|
5900
|
-
|
|
5901
|
-
if (imp.kind === "memory" && memory?.module === imp.module && memory.name === imp.name)
|
|
5902
|
-
continue;
|
|
5903
|
-
if (imp.module === "wasi" && imp.name === "thread-spawn" && (wasix || memory?.shared)) continue;
|
|
5904
|
-
if (imp.kind === "memory" || imp.module === "wasi") {
|
|
5905
|
-
return `imports ${imp.module}.${imp.name}: no WASI program this host runs`;
|
|
5905
|
+
const wasi = wasix || imports.some((i) => i.module === PREVIEW1);
|
|
5906
|
+
const scope2 = { extended, wasi, wasix, pie: dylinkInfo(module) !== void 0, memory };
|
|
5907
|
+
const refused = imports.find((imp) => !accepted(imp, scope2));
|
|
5908
|
+
if (refused) {
|
|
5909
|
+
if (refused.kind === "memory" || refused.module === "wasi") {
|
|
5910
|
+
return `imports ${refused.module}.${refused.name}: no WASI program this host runs`;
|
|
5906
5911
|
}
|
|
5907
|
-
return `imports ${
|
|
5912
|
+
return `imports ${refused.module}.${refused.name}: no WASI preview1 program (an Emscripten one runs with its glue)`;
|
|
5908
5913
|
}
|
|
5909
5914
|
if (!WebAssembly.Module.exports(module).some((e) => e.name === "_start")) {
|
|
5910
5915
|
return "no WASI command (it exports no _start)";
|
|
@@ -5925,7 +5930,9 @@ function linkImports(module, preview1, wasix, memory, threads, program = {}) {
|
|
|
5925
5930
|
const ns = imports[imp.module] ??= {};
|
|
5926
5931
|
if (imp.name in ns) continue;
|
|
5927
5932
|
if (imp.kind === "memory" && memory) ns[imp.name] = memory;
|
|
5928
|
-
else if (imp.kind === "function")
|
|
5933
|
+
else if (imp.kind === "function") {
|
|
5934
|
+
ns[imp.name] = () => imp.module === "wasi" && imp.name === "thread-spawn" ? -1 : 52;
|
|
5935
|
+
}
|
|
5929
5936
|
}
|
|
5930
5937
|
return imports;
|
|
5931
5938
|
}
|