@volter/browser-wali 0.1.166 → 0.1.168
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/LICENSE +8 -0
- package/README.md +9 -0
- package/dist/browser-wali-command.d.ts +7 -0
- package/dist/browser-wali-command.d.ts.map +1 -1
- package/dist/browser-wali-command.js +70 -18
- package/dist/browser-wali-command.js.map +1 -1
- package/dist/bulk-memory.d.ts +4 -2
- package/dist/bulk-memory.d.ts.map +1 -1
- package/dist/bulk-memory.js +32 -9
- package/dist/bulk-memory.js.map +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +6 -2
- package/dist/capabilities.js.map +1 -1
- package/dist/child-processes.d.ts +2 -0
- package/dist/child-processes.d.ts.map +1 -1
- package/dist/child-processes.js +9 -1
- package/dist/child-processes.js.map +1 -1
- package/dist/clocks.d.ts +3 -0
- package/dist/clocks.d.ts.map +1 -0
- package/dist/clocks.js +44 -0
- package/dist/clocks.js.map +1 -0
- package/dist/coherent-file-locks.d.ts.map +1 -1
- package/dist/coherent-file-locks.js +2 -1
- package/dist/coherent-file-locks.js.map +1 -1
- package/dist/credentials.d.ts +4 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +46 -0
- package/dist/credentials.js.map +1 -0
- package/dist/descriptors.d.ts +14 -0
- package/dist/descriptors.d.ts.map +1 -1
- package/dist/descriptors.js +45 -5
- package/dist/descriptors.js.map +1 -1
- package/dist/environment.d.ts +4 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +23 -0
- package/dist/environment.js.map +1 -0
- package/dist/epoll-ready.d.ts +27 -0
- package/dist/epoll-ready.d.ts.map +1 -0
- package/dist/epoll-ready.js +88 -0
- package/dist/epoll-ready.js.map +1 -0
- package/dist/events.d.ts +1 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +55 -24
- package/dist/events.js.map +1 -1
- package/dist/filesystem-host-session.d.ts +65 -0
- package/dist/filesystem-host-session.d.ts.map +1 -0
- package/dist/filesystem-host-session.js +951 -0
- package/dist/filesystem-host-session.js.map +1 -0
- package/dist/filesystem-host.d.ts +13 -81
- package/dist/filesystem-host.d.ts.map +1 -1
- package/dist/filesystem-host.js +14 -882
- package/dist/filesystem-host.js.map +1 -1
- package/dist/filesystem-protocol.d.ts +3 -1
- package/dist/filesystem-protocol.d.ts.map +1 -1
- package/dist/filesystem-remote.d.ts +8 -3
- package/dist/filesystem-remote.d.ts.map +1 -1
- package/dist/filesystem-remote.js +43 -20
- package/dist/filesystem-remote.js.map +1 -1
- package/dist/filesystem-service-client.d.ts +4 -0
- package/dist/filesystem-service-client.d.ts.map +1 -0
- package/dist/filesystem-service-client.js +16 -0
- package/dist/filesystem-service-client.js.map +1 -0
- package/dist/filesystem.d.ts +26 -4
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +633 -175
- package/dist/filesystem.js.map +1 -1
- package/dist/fork-memory.d.ts +23 -0
- package/dist/fork-memory.d.ts.map +1 -0
- package/dist/fork-memory.js +93 -0
- package/dist/fork-memory.js.map +1 -0
- package/dist/fork-worker.js +32 -11
- package/dist/fork-worker.js.map +1 -1
- package/dist/jumps.d.ts +7 -0
- package/dist/jumps.d.ts.map +1 -1
- package/dist/jumps.js +19 -1
- package/dist/jumps.js.map +1 -1
- package/dist/kernel-filesystem-worker.d.ts +2 -0
- package/dist/kernel-filesystem-worker.d.ts.map +1 -0
- package/dist/kernel-filesystem-worker.js +28 -0
- package/dist/kernel-filesystem-worker.js.map +1 -0
- package/dist/kernel-filesystem.d.ts +12 -0
- package/dist/kernel-filesystem.d.ts.map +1 -0
- package/dist/kernel-filesystem.js +45 -0
- package/dist/kernel-filesystem.js.map +1 -0
- package/dist/kernel-network-worker.d.ts +2 -0
- package/dist/kernel-network-worker.d.ts.map +1 -0
- package/dist/kernel-network-worker.js +14 -0
- package/dist/kernel-network-worker.js.map +1 -0
- package/dist/kernel-network.d.ts +14 -0
- package/dist/kernel-network.d.ts.map +1 -0
- package/dist/kernel-network.js +50 -0
- package/dist/kernel-network.js.map +1 -0
- package/dist/kernel-process-client.d.ts +6 -1
- package/dist/kernel-process-client.d.ts.map +1 -1
- package/dist/kernel-process-client.js +10 -1
- package/dist/kernel-process-client.js.map +1 -1
- package/dist/module-layout.d.ts +8 -0
- package/dist/module-layout.d.ts.map +1 -1
- package/dist/module-layout.js +263 -2
- package/dist/module-layout.js.map +1 -1
- package/dist/network-host.d.ts +6 -0
- package/dist/network-host.d.ts.map +1 -0
- package/dist/network-host.js +1582 -0
- package/dist/network-host.js.map +1 -0
- package/dist/network-protocol.d.ts +9 -2
- package/dist/network-protocol.d.ts.map +1 -1
- package/dist/network-protocol.js +3 -0
- package/dist/network-protocol.js.map +1 -1
- package/dist/network-service-client.d.ts +4 -0
- package/dist/network-service-client.d.ts.map +1 -0
- package/dist/network-service-client.js +16 -0
- package/dist/network-service-client.js.map +1 -0
- package/dist/network-worker.js +5 -1150
- package/dist/network-worker.js.map +1 -1
- package/dist/network.d.ts +13 -1
- package/dist/network.d.ts.map +1 -1
- package/dist/network.js +175 -48
- package/dist/network.js.map +1 -1
- package/dist/paths.d.ts +11 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +97 -0
- package/dist/paths.js.map +1 -0
- package/dist/process-bridge.d.ts +12 -4
- package/dist/process-bridge.d.ts.map +1 -1
- package/dist/process-bridge.js +53 -17
- package/dist/process-bridge.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +8 -0
- package/dist/program.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +150 -92
- package/dist/runtime.js.map +1 -1
- package/dist/shared-buffer-pool.d.ts +18 -5
- package/dist/shared-buffer-pool.d.ts.map +1 -1
- package/dist/shared-buffer-pool.js +86 -14
- package/dist/shared-buffer-pool.js.map +1 -1
- package/dist/shared-file-layer.d.ts +3 -1
- package/dist/shared-file-layer.d.ts.map +1 -1
- package/dist/shared-file-layer.js +150 -35
- package/dist/shared-file-layer.js.map +1 -1
- package/dist/shared-pipes.d.ts +3 -1
- package/dist/shared-pipes.d.ts.map +1 -1
- package/dist/shared-pipes.js +105 -33
- package/dist/shared-pipes.js.map +1 -1
- package/dist/signal-interruption.d.ts +9 -0
- package/dist/signal-interruption.d.ts.map +1 -0
- package/dist/signal-interruption.js +6 -0
- package/dist/signal-interruption.js.map +1 -0
- package/dist/signals.d.ts +17 -6
- package/dist/signals.d.ts.map +1 -1
- package/dist/signals.js +101 -22
- package/dist/signals.js.map +1 -1
- package/dist/snapshot-filesystem.d.ts +12 -1
- package/dist/snapshot-filesystem.d.ts.map +1 -1
- package/dist/snapshot-filesystem.js +241 -73
- package/dist/snapshot-filesystem.js.map +1 -1
- package/dist/socket-flags.d.ts +3 -0
- package/dist/socket-flags.d.ts.map +1 -0
- package/dist/socket-flags.js +9 -0
- package/dist/socket-flags.js.map +1 -0
- package/dist/special-files.d.ts +6 -0
- package/dist/special-files.d.ts.map +1 -0
- package/dist/special-files.js +56 -0
- package/dist/special-files.js.map +1 -0
- package/dist/stdin.d.ts.map +1 -1
- package/dist/stdin.js +13 -5
- package/dist/stdin.js.map +1 -1
- package/dist/symlink.d.ts +2 -1
- package/dist/symlink.d.ts.map +1 -1
- package/dist/symlink.js +25 -93
- package/dist/symlink.js.map +1 -1
- package/dist/system.d.ts +2 -4
- package/dist/system.d.ts.map +1 -1
- package/dist/system.js +46 -29
- package/dist/system.js.map +1 -1
- package/dist/thread-coordinator-worker.js +58 -24
- package/dist/thread-coordinator-worker.js.map +1 -1
- package/dist/thread-lifecycle.d.ts +9 -0
- package/dist/thread-lifecycle.d.ts.map +1 -0
- package/dist/thread-lifecycle.js +30 -0
- package/dist/thread-lifecycle.js.map +1 -0
- package/dist/thread-worker.js +125 -44
- package/dist/thread-worker.js.map +1 -1
- package/dist/threads.d.ts +6 -0
- package/dist/threads.d.ts.map +1 -1
- package/dist/threads.js +46 -6
- package/dist/threads.js.map +1 -1
- package/dist/tty-job-control.d.ts +13 -0
- package/dist/tty-job-control.d.ts.map +1 -0
- package/dist/tty-job-control.js +56 -0
- package/dist/tty-job-control.js.map +1 -0
- package/dist/tty-settings.d.ts +3 -0
- package/dist/tty-settings.d.ts.map +1 -0
- package/dist/tty-settings.js +25 -0
- package/dist/tty-settings.js.map +1 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/wait-state.d.ts +8 -0
- package/dist/wait-state.d.ts.map +1 -1
- package/dist/wait-state.js +15 -0
- package/dist/wait-state.js.map +1 -1
- package/dist/worker-program-protocol.d.ts +22 -2
- package/dist/worker-program-protocol.d.ts.map +1 -1
- package/dist/worker-program-worker.js +31 -9
- package/dist/worker-program-worker.js.map +1 -1
- package/dist/worker-program.d.ts +12 -2
- package/dist/worker-program.d.ts.map +1 -1
- package/dist/worker-program.js +214 -36
- package/dist/worker-program.js.map +1 -1
- package/dist/write-vector.d.ts +3 -0
- package/dist/write-vector.d.ts.map +1 -0
- package/dist/write-vector.js +35 -0
- package/dist/write-vector.js.map +1 -0
- package/package.json +1 -1
package/dist/program.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { realtimeMilliseconds } from "./monotonic-clock.js";
|
|
2
2
|
import { normalizeProcessFilesystemPolicy } from "@volter/browser-runtime/browser-process-filesystem-policy.js";
|
|
3
3
|
import { BrowserByteVault } from "@volter/browser-runtime/browser-byte-vault.js";
|
|
4
|
+
import { setBrowserFileTimes } from "@volter/browser-runtime/browser-file-times.js";
|
|
4
5
|
import { installProgramResources } from "@volter/browser-runtime/browser-program-resources.js";
|
|
5
6
|
import { BrowserWaliWorkerProgram } from "./worker-program.js";
|
|
6
7
|
/** Where the host puts each program's marker; the programs themselves are its parent's other children. */
|
|
@@ -82,6 +83,13 @@ class PrivateFileOverlay {
|
|
|
82
83
|
}
|
|
83
84
|
file.mtimeMs = typeof mtime === "number" ? mtime : Number(mtime);
|
|
84
85
|
}
|
|
86
|
+
utimesMsSync(path, atimeMs, mtimeMs) {
|
|
87
|
+
const file = this.privateFile(path);
|
|
88
|
+
if (file)
|
|
89
|
+
file.mtimeMs = mtimeMs;
|
|
90
|
+
else
|
|
91
|
+
setBrowserFileTimes(this.shared, path, atimeMs, mtimeMs);
|
|
92
|
+
}
|
|
85
93
|
privateFile(path) {
|
|
86
94
|
return this.files.find((file) => file.path === path);
|
|
87
95
|
}
|
package/dist/program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAGV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAWpB,qBAAa,0BAA2B,SAAQ,KAAK;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;gBAA1B,OAAO,EAAE,SAAS,MAAM,EAAE;CAIhD;AA+CD,qBAAa,kBAAkB;IACvB,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;CA46B1F"}
|
package/dist/runtime.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import { waliRaisesBrokenPipe } from "./socket-flags.js";
|
|
2
|
+
import { waliTerminalAccess, waliTerminalOperation, waliTerminalSettingsIoctl } from "./tty-job-control.js";
|
|
3
|
+
import { setWaliSignalInterruption } from "./signal-interruption.js";
|
|
1
4
|
import { resolveWaliExec } from "./exec-format.js";
|
|
5
|
+
import { createWaliEnvironmentImports } from "./environment.js";
|
|
6
|
+
import { captureWaliForkMemory, restoreWaliForkMemory } from "./fork-memory.js";
|
|
7
|
+
import { gatherWaliWriteVector } from "./write-vector.js";
|
|
2
8
|
import { WaliKernelProcessClient, forkKernelProcessIdentity, kernelTerminalIoctl, parkWaliStopped } from "./kernel-process-client.js";
|
|
3
9
|
import { releaseWaliSharedBuffers } from "./shared-buffer-pool.js";
|
|
4
10
|
import { hostWait, setHostIdle } from "./host-idle.js";
|
|
@@ -28,7 +34,7 @@ import { applyProcessFilesystemPatch, createBrowserProcessSharedState, closeShar
|
|
|
28
34
|
import { BrowserFileLockClient } from "@volter/browser-runtime/browser-file-locks.js";
|
|
29
35
|
import { BrowserFileCoherenceClient } from "@volter/browser-runtime/browser-file-coherence.js";
|
|
30
36
|
import { WaliCoherentFileLockClient } from "./coherent-file-locks.js";
|
|
31
|
-
import {
|
|
37
|
+
import { realtimeMilliseconds } from "./monotonic-clock.js";
|
|
32
38
|
const EBADF = 9n;
|
|
33
39
|
const EINVAL = 22n;
|
|
34
40
|
const encoder = new TextEncoder();
|
|
@@ -182,10 +188,14 @@ export class BrowserWaliRuntime {
|
|
|
182
188
|
* things about who decided.
|
|
183
189
|
*/
|
|
184
190
|
const exit = (status, name = "SYS_exit_group") => {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
191
|
+
// Only a process with pthreads has another thread that could have ended it;
|
|
192
|
+
// without one, every exit (each fork's included) printed and relayed this.
|
|
193
|
+
if (threadPool) {
|
|
194
|
+
const notice = `[WALI] ${name}(${status & 0xff}) on the MAIN thread -- the process is ending here,`
|
|
195
|
+
+ ` not in a pthread. If the program did not ask to exit, this is the caller to find.`;
|
|
196
|
+
console.error(notice);
|
|
197
|
+
options.onDiagnostic?.(notice);
|
|
198
|
+
}
|
|
189
199
|
throw new WaliProcessExit(status & 0xff);
|
|
190
200
|
};
|
|
191
201
|
const signalSelf = (signal) => {
|
|
@@ -193,12 +203,12 @@ export class BrowserWaliRuntime {
|
|
|
193
203
|
return -22n;
|
|
194
204
|
if (signal === 0)
|
|
195
205
|
return 0n;
|
|
196
|
-
// blocked
|
|
206
|
+
// A blocked default action is pending too; delivery consults the thread mask.
|
|
197
207
|
if (signal !== 9 && (signalHost.mask & (1n << BigInt(signal - 1))) !== 0n) {
|
|
198
|
-
new WaliSignals(signalState).raise(signal);
|
|
208
|
+
new WaliSignals(signalState).raise(signal, 0, 0, 0, true);
|
|
199
209
|
return 0n;
|
|
200
210
|
}
|
|
201
|
-
const disposition = signal === 9
|
|
211
|
+
const disposition = signal === 9 ? "default" : new WaliSignals(signalState).raise(signal);
|
|
202
212
|
if (disposition === "default" && defaultStops(signal) && kernelProcesses)
|
|
203
213
|
return kernelProcesses.call("kill", pid, signal);
|
|
204
214
|
if (disposition === "default" && defaultTerminates(signal))
|
|
@@ -245,7 +255,7 @@ export class BrowserWaliRuntime {
|
|
|
245
255
|
...(options.filesystemUpdatePort ? { updatePort: options.filesystemUpdatePort } : {}),
|
|
246
256
|
...(options.fileLocks ? { fileLocks: options.fileLocks } : {}),
|
|
247
257
|
...(options.fileCoherence ? { fileCoherence: options.fileCoherence } : {}),
|
|
248
|
-
});
|
|
258
|
+
}, filesystemOnMainThread ? undefined : await options.filesystemService?.());
|
|
249
259
|
}
|
|
250
260
|
if (filesystemPolicy && threaded && !filesystemCoordinator && !inheritedDescriptors)
|
|
251
261
|
throw new Error("Confined WALI threads require the shared filesystem owner.");
|
|
@@ -262,6 +272,11 @@ export class BrowserWaliRuntime {
|
|
|
262
272
|
...(runtimeFilesystem ? { filesystem: runtimeFilesystem } : {}),
|
|
263
273
|
cwd: options.cwd ?? "/",
|
|
264
274
|
stdin,
|
|
275
|
+
...(options.terminalStdin ? { terminalStdin: options.terminalStdin } : {}),
|
|
276
|
+
...(options.onTerminalOutput ? { emitTerminal: (value) => {
|
|
277
|
+
options.onTerminalOutput(value.slice());
|
|
278
|
+
return BigInt(value.byteLength);
|
|
279
|
+
} } : {}),
|
|
265
280
|
executablePath,
|
|
266
281
|
memory,
|
|
267
282
|
emit,
|
|
@@ -280,19 +295,34 @@ export class BrowserWaliRuntime {
|
|
|
280
295
|
...(options.onDiagnostic ? { onDiagnostic: options.onDiagnostic } : {}),
|
|
281
296
|
});
|
|
282
297
|
const fileDescriptorImports = fileDescriptors.imports();
|
|
283
|
-
|
|
298
|
+
// A fork child resumes inside the parent's image, whose environ is already
|
|
299
|
+
// in memory; libc reads the environment file only at startup, so a fork
|
|
300
|
+
// would write and remove one no one reads (four filesystem round trips).
|
|
301
|
+
const directEnvironment = waliDescriptors.some((descriptor) => descriptor.name === "__cl_get_envc");
|
|
302
|
+
const environmentFile = options.forkState || directEnvironment ? undefined : fileDescriptors.writeEnvironmentFile(options.env ?? {}, pid);
|
|
284
303
|
const sharedFileClient = inheritedDescriptors ?? filesystemCoordinator?.filesystem();
|
|
285
304
|
const sharedFileHost = sharedFileClient
|
|
286
305
|
? new WaliSharedFileDescriptorHost(sharedFileClient, stdioAliasRegistry, sharedPipeState, memory) : undefined;
|
|
287
306
|
const memoryManager = new WaliMemoryManager(memory, (fd, offset, length) => sharedFileHost?.readForMapping(fd, offset, length)
|
|
288
307
|
?? fileDescriptors.readForMapping(fd, offset, length), mmapCursor, (fd) => sharedFileHost?.mappingPath(fd) ?? fileDescriptors.mappingPath(fd), (path, offset, value) => sharedFileHost?.writeForMapping(path, offset, value)
|
|
289
308
|
?? fileDescriptors.writeForMapping(path, offset, value), sharedMmapRegistry, options.onDiagnostic, () => imageExtent ?? memory().buffer.byteLength);
|
|
290
|
-
const signalHost = new WaliSignalHost(new WaliSignals(signalState), memory, () => instance?.exports.__indirect_function_table, () => Number(memoryManager.imports().SYS_mmap(0, 4096, 3, 0x22, -1, 0)), privateTreeHeld(() => instance?.exports, memory)
|
|
309
|
+
const signalHost = new WaliSignalHost(new WaliSignals(signalState), memory, () => instance?.exports.__indirect_function_table, () => Number(memoryManager.imports().SYS_mmap(0, 4096, 3, 0x22, -1, 0)), privateTreeHeld(() => instance?.exports, memory), signal => {
|
|
310
|
+
if (defaultStops(signal)) {
|
|
311
|
+
if (!kernelProcesses)
|
|
312
|
+
throw new Error("ENOSYS: default stop needs the kernel process owner.");
|
|
313
|
+
kernelProcesses.call("stop", signal);
|
|
314
|
+
parkWaliStopped(options.processIdentity);
|
|
315
|
+
}
|
|
316
|
+
else if (defaultTerminates(signal))
|
|
317
|
+
exit(128 + signal, `signal ${signal}`);
|
|
318
|
+
}, true);
|
|
291
319
|
signalHost.mask = options.forkState?.signalMask ?? 0n;
|
|
292
320
|
// The same number the thread pool is built with below, so the CPU count
|
|
293
321
|
// the guest is told about can never exceed the workers that exist.
|
|
294
322
|
const threadPoolSize = options.threadPoolSize ?? 18;
|
|
295
|
-
|
|
323
|
+
if (sharedFileClient)
|
|
324
|
+
fileDescriptors.descriptors.descriptorLimits = sharedFileClient.descriptorLimits;
|
|
325
|
+
const systemHost = new WaliSystemHost(memory, pid, stdin, pthreadFatal, options.terminal, threadPoolSize, () => memoryManager.growAhead(), fileDescriptors.descriptors.descriptorLimits);
|
|
296
326
|
const hostDoorbell = filesystemOnMainThread ? filesystemCoordinator?.doorbell() : undefined;
|
|
297
327
|
// ADR-0046: every wait of this thread answers the other threads and the page from here on.
|
|
298
328
|
setHostIdle(hostDoorbell ? { pump: () => filesystemCoordinator.pump(true), doorbell: hostDoorbell } : undefined);
|
|
@@ -307,7 +337,7 @@ export class BrowserWaliRuntime {
|
|
|
307
337
|
// hundredth copy of the notice buries the first.
|
|
308
338
|
let threadPoolExhaustionReported = false;
|
|
309
339
|
if (options.network || childDoor) {
|
|
310
|
-
networkCoordinator = await WaliNetworkCoordinator.create(options.network, sharedPipeState, stdin instanceof SharedWaliStdinReader ? stdin.buffer : undefined, stdioAliasRegistry.buffer, signalState, options.waitAgent?.activity);
|
|
340
|
+
networkCoordinator = await WaliNetworkCoordinator.create(options.network, sharedPipeState, stdin instanceof SharedWaliStdinReader ? stdin.buffer : undefined, stdioAliasRegistry.buffer, signalState, options.waitAgent?.activity, options.networkService ? await options.networkService() : undefined, !options.forkState, fileDescriptors.descriptors.descriptorLimits, options.terminalStdin instanceof SharedWaliStdinReader ? options.terminalStdin.buffer : undefined);
|
|
311
341
|
}
|
|
312
342
|
const networkHost = networkCoordinator ? new WaliNetworkHost(memory, networkCoordinator.createChannel(), signalHost, options.processIdentity) : undefined;
|
|
313
343
|
const sharedPipeHost = new WaliSharedPipeHost(memory, sharedPipeState, sharedFileClient ? undefined : localDescriptors, sharedFileClient);
|
|
@@ -530,11 +560,12 @@ export class BrowserWaliRuntime {
|
|
|
530
560
|
const image = resolveWaliExec(runtimeFilesystem, path, readCStringArray(argvPointer), currentCwd());
|
|
531
561
|
if (typeof image === "number")
|
|
532
562
|
return BigInt(image);
|
|
533
|
-
//
|
|
534
|
-
|
|
563
|
+
// Linux treats NULL envp as an empty vector. A null-prototype record
|
|
564
|
+
// also retains names such as __proto__ without object setter rules.
|
|
565
|
+
const env = Object.create(null);
|
|
535
566
|
for (const entry of readCStringArray(envPointer)) {
|
|
536
567
|
const separator = entry.indexOf("=");
|
|
537
|
-
if (separator
|
|
568
|
+
if (separator >= 0)
|
|
538
569
|
env[entry.slice(0, separator)] = entry.slice(separator + 1);
|
|
539
570
|
}
|
|
540
571
|
sharedFileClient.prepareSpawn();
|
|
@@ -542,7 +573,7 @@ export class BrowserWaliRuntime {
|
|
|
542
573
|
const stdin = exportPipe(0, "reader");
|
|
543
574
|
const stdout = exportPipe(1, "writer");
|
|
544
575
|
const stderr = exportPipe(2, "writer");
|
|
545
|
-
const completion = options.forkState ?? createBrowserProcessSharedState();
|
|
576
|
+
const completion = options.execCompletion ?? options.forkState ?? createBrowserProcessSharedState();
|
|
546
577
|
options.browserProcess.spawn({
|
|
547
578
|
// The kernel's exec: the image changes, the process does not. The pid
|
|
548
579
|
// and the parent go across, and the child numbers ITS children from
|
|
@@ -557,13 +588,17 @@ export class BrowserWaliRuntime {
|
|
|
557
588
|
...(filesystemPolicy ? { filesystemPolicy } : {}),
|
|
558
589
|
...(stdin ? { stdin } : {}), ...(stdout ? { stdout } : {}), ...(stderr ? { stderr } : {}),
|
|
559
590
|
});
|
|
560
|
-
|
|
591
|
+
// An inherited image forwards the existing process completion to its
|
|
592
|
+
// successor. It owns no coordinator which needs keeping alive, and
|
|
593
|
+
// must not wait on a private record or publish an intermediate exit.
|
|
594
|
+
if (options.forkState || options.execCompletion)
|
|
561
595
|
throw new WaliProcessReplaced();
|
|
562
596
|
// A root owns the descriptor coordinator the replacement borrows.
|
|
563
597
|
// Keep servicing it until completion; never resume the old guest image.
|
|
564
598
|
const control = new Int32Array(completion.control);
|
|
565
599
|
while (Atomics.load(control, 0) === 0)
|
|
566
600
|
hostWait(control, 0, 0);
|
|
601
|
+
const exitCode = Atomics.load(control, 1);
|
|
567
602
|
const patch = decodeProcessSnapshot(completion);
|
|
568
603
|
releaseWaliSharedBuffers(completion.bufferLease, 2);
|
|
569
604
|
if (patch) {
|
|
@@ -574,9 +609,10 @@ export class BrowserWaliRuntime {
|
|
|
574
609
|
if (snapshot)
|
|
575
610
|
options.browserProcess.restore?.(snapshot);
|
|
576
611
|
}
|
|
577
|
-
throw new WaliProcessExit(
|
|
612
|
+
throw new WaliProcessExit(exitCode);
|
|
578
613
|
};
|
|
579
614
|
const builtins = {
|
|
615
|
+
...createWaliEnvironmentImports(options.env ?? {}, memory),
|
|
580
616
|
__init: () => 0,
|
|
581
617
|
__deinit: () => 0,
|
|
582
618
|
__proc_exit: (status) => exit(Number(status)),
|
|
@@ -593,28 +629,14 @@ export class BrowserWaliRuntime {
|
|
|
593
629
|
? fileDescriptors.copyCString(Number(pointer), environmentFile, Number(size)) : 0,
|
|
594
630
|
SYS_write: (fd, pointer, length) => emit(Number(fd), copyOut(Number(pointer), Number(length))),
|
|
595
631
|
SYS_writev: (fd, iovPointer, iovCount) => {
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
const offset = Number(iovPointer) + index * 8;
|
|
599
|
-
assertMemoryRange(memory(), offset, 8);
|
|
600
|
-
const pointer = view().getUint32(offset, true);
|
|
601
|
-
const length = view().getUint32(offset + 4, true);
|
|
602
|
-
const result = emit(Number(fd), copyOut(pointer, length));
|
|
603
|
-
if (result < 0n)
|
|
604
|
-
return result;
|
|
605
|
-
written += result;
|
|
606
|
-
}
|
|
607
|
-
return written;
|
|
632
|
+
const value = gatherWaliWriteVector(memory(), Number(iovPointer), Number(iovCount));
|
|
633
|
+
return typeof value === "bigint" ? value : emit(Number(fd), value);
|
|
608
634
|
},
|
|
609
635
|
SYS_exit: (status) => exit(Number(status), "SYS_exit"),
|
|
610
636
|
SYS_exit_group: (status) => exit(Number(status), "SYS_exit_group"),
|
|
611
637
|
SYS_getpid: () => BigInt(pid),
|
|
612
638
|
SYS_getppid: () => BigInt(parentProcessId),
|
|
613
639
|
SYS_gettid: () => BigInt(pid),
|
|
614
|
-
SYS_getuid: () => 1000n,
|
|
615
|
-
SYS_geteuid: () => 1000n,
|
|
616
|
-
SYS_getgid: () => 1000n,
|
|
617
|
-
SYS_getegid: () => 1000n,
|
|
618
640
|
SYS_set_tid_address: () => BigInt(pid),
|
|
619
641
|
SYS_sched_yield: () => 0n,
|
|
620
642
|
SYS_sched_setscheduler: () => 0n,
|
|
@@ -692,13 +714,6 @@ export class BrowserWaliRuntime {
|
|
|
692
714
|
}
|
|
693
715
|
return tid;
|
|
694
716
|
},
|
|
695
|
-
SYS_clock_gettime: (clockId, pointer) => {
|
|
696
|
-
const nowNanoseconds = clockNanoseconds(Number(clockId));
|
|
697
|
-
if (nowNanoseconds === undefined)
|
|
698
|
-
return -EINVAL;
|
|
699
|
-
writeTimespec(view(), Number(pointer), nowNanoseconds);
|
|
700
|
-
return 0n;
|
|
701
|
-
},
|
|
702
717
|
SYS_gettimeofday: (pointer) => {
|
|
703
718
|
if (Number(pointer) !== 0) {
|
|
704
719
|
const microseconds = BigInt(Math.floor(realtimeMilliseconds() * 1_000));
|
|
@@ -723,11 +738,26 @@ export class BrowserWaliRuntime {
|
|
|
723
738
|
// epoll, eventfd, and timerfd. Root and pthread instances must share it:
|
|
724
739
|
// Tokio passes waker descriptors across those instance boundaries.
|
|
725
740
|
...(networkHost ? networkHost.imports({ ...pipeImports, ...eventImports }) : eventImports),
|
|
726
|
-
SYS_ioctl: (fd, request, argument) =>
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
741
|
+
SYS_ioctl: (fd, request, argument) => {
|
|
742
|
+
if (fileDescriptors.terminalFd(Number(fd)) && (Number(request) >>> 0) === 0x541b)
|
|
743
|
+
return fileDescriptors.terminalAvailable(Number(argument));
|
|
744
|
+
if (networkHost?.isNetworkFd(Number(fd)))
|
|
745
|
+
return networkHost.ioctl(Number(fd), Number(request) >>> 0, Number(argument));
|
|
746
|
+
const operation = Number(request) >>> 0;
|
|
747
|
+
const stream = fileDescriptors.stdioFd(Number(fd));
|
|
748
|
+
if (stream === undefined || operation === 0x5421 || operation === 0x5451 || operation === 0x5450) {
|
|
749
|
+
return pipeImports.SYS_ioctl(fd, request, argument);
|
|
750
|
+
}
|
|
751
|
+
if (kernelProcesses && options.terminal) {
|
|
752
|
+
const settings = waliTerminalSettingsIoctl(kernelProcesses, memory(), operation, Number(argument));
|
|
753
|
+
if (settings !== undefined)
|
|
754
|
+
return settings;
|
|
755
|
+
}
|
|
756
|
+
if (kernelProcesses && options.terminal && (operation === 0x540f || operation === 0x5410)) {
|
|
757
|
+
return kernelTerminalIoctl(kernelProcesses, memory(), Number(request), Number(argument));
|
|
758
|
+
}
|
|
759
|
+
return systemImports.SYS_ioctl(stream, request, argument);
|
|
760
|
+
},
|
|
731
761
|
// Every other prctl is a no-op, as the capability table advertises. ADR-0047's
|
|
732
762
|
// handshake goes to the table that holds the files: the filesystem's host,
|
|
733
763
|
// or this thread's own. After the spreads, since a threaded program's thin
|
|
@@ -770,20 +800,46 @@ export class BrowserWaliRuntime {
|
|
|
770
800
|
const timed = !sampled || (spent.calls & (SAMPLE_EVERY - 1)) === 0;
|
|
771
801
|
const began = timed ? performance.now() : 0;
|
|
772
802
|
try {
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
803
|
+
for (;;) {
|
|
804
|
+
const result = waliCall(descriptor.name, () => {
|
|
805
|
+
const request = descriptor.name === "SYS_ioctl" ? Number(args[1]) >>> 0 : 0;
|
|
806
|
+
const candidate = waliTerminalOperation(descriptor.name, request);
|
|
807
|
+
const terminal = (candidate !== undefined || descriptor.name === "SYS_ioctl")
|
|
808
|
+
&& options.terminal && kernelProcesses && fileDescriptors.stdioFd(Number(args[0])) !== undefined;
|
|
809
|
+
const operation = terminal ? candidate : undefined;
|
|
810
|
+
if (operation && kernelProcesses) {
|
|
811
|
+
const access = waliTerminalAccess(kernelProcesses, options.processIdentity, signalHost, operation);
|
|
812
|
+
if (access !== 0n)
|
|
813
|
+
return access;
|
|
814
|
+
}
|
|
815
|
+
const value = handler(...args);
|
|
816
|
+
if ((descriptor.name === "SYS_open" || descriptor.name === "SYS_openat")
|
|
817
|
+
&& typeof value === "bigint" && value >= 0n && fileDescriptors.terminalFd(Number(value))) {
|
|
818
|
+
const attached = kernelProcesses?.call("ttyopen") ?? (options.terminal ? 0n : -6n);
|
|
819
|
+
if (attached < 0n) {
|
|
820
|
+
pipeImports.SYS_close(value);
|
|
821
|
+
return attached;
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
return value;
|
|
825
|
+
}, args);
|
|
826
|
+
options.onSyscallResult?.(descriptor.name, result);
|
|
827
|
+
if (!jumps.isCapturing()) {
|
|
828
|
+
// Linux pipe.c anon_pipe_write sends SIGPIPE to the writer as
|
|
829
|
+
// well as returning EPIPE. Raise it in the calling guest, after
|
|
830
|
+
// descriptor routing (including remote inherited descriptors),
|
|
831
|
+
// before libc can turn the error into a builtin diagnostic.
|
|
832
|
+
// Socket send calls suppress the signal only with MSG_NOSIGNAL.
|
|
833
|
+
if (result === -32n && waliRaisesBrokenPipe(descriptor.name, args))
|
|
834
|
+
signalSelf(13);
|
|
835
|
+
const restart = signalHost.deliver(result === -4n);
|
|
836
|
+
if (result === -4n && restart && (RESTARTABLE_STREAM_CALLS.has(descriptor.name)
|
|
837
|
+
|| waliTerminalOperation(descriptor.name, Number(args[1]) >>> 0) === "change"))
|
|
838
|
+
continue;
|
|
839
|
+
}
|
|
840
|
+
parkWaliStopped(options.processIdentity);
|
|
841
|
+
return result;
|
|
784
842
|
}
|
|
785
|
-
parkWaliStopped(options.processIdentity);
|
|
786
|
-
return result;
|
|
787
843
|
}
|
|
788
844
|
finally {
|
|
789
845
|
spent.calls += 1;
|
|
@@ -803,13 +859,7 @@ export class BrowserWaliRuntime {
|
|
|
803
859
|
env,
|
|
804
860
|
});
|
|
805
861
|
if (options.forkState) {
|
|
806
|
-
|
|
807
|
-
bytes().set(new Uint8Array(snapshot));
|
|
808
|
-
// This transferred image has one consumer. A live child needs its
|
|
809
|
-
// restored memory, not a second full image retained by forkState.
|
|
810
|
-
// The browser baseline supplies ES2024 transfer; this package's
|
|
811
|
-
// declaration lib remains ES2023 for its other APIs.
|
|
812
|
-
snapshot.transfer(0);
|
|
862
|
+
restoreWaliForkMemory(memory(), options.forkState);
|
|
813
863
|
for (const [name, value] of Object.entries(options.forkState.globals)) {
|
|
814
864
|
const global = instance.exports[name];
|
|
815
865
|
if (!(global instanceof WebAssembly.Global))
|
|
@@ -817,7 +867,9 @@ export class BrowserWaliRuntime {
|
|
|
817
867
|
global.value = value;
|
|
818
868
|
}
|
|
819
869
|
memoryManager.restoreFork(options.forkState.mappings);
|
|
820
|
-
|
|
870
|
+
// The owner's copy of this table already holds the umask; only the local
|
|
871
|
+
// table needs it, so setting it is no round trip.
|
|
872
|
+
localFileImports.SYS_umask(options.forkState.umask);
|
|
821
873
|
}
|
|
822
874
|
else if (typeof instance.exports.asyncify_start_unwind === "function") {
|
|
823
875
|
const stack = instance.exports.__stack_pointer;
|
|
@@ -869,6 +921,7 @@ export class BrowserWaliRuntime {
|
|
|
869
921
|
...(options.processIdentity ? { processIdentity: options.processIdentity } : {}),
|
|
870
922
|
executablePath,
|
|
871
923
|
argv,
|
|
924
|
+
env: options.env ?? {},
|
|
872
925
|
cwd: fileDescriptors.currentWorkingDirectory(),
|
|
873
926
|
stdioAliasRegistry: stdioAliasRegistry.buffer,
|
|
874
927
|
sharedPipes: sharedPipeState,
|
|
@@ -879,7 +932,9 @@ export class BrowserWaliRuntime {
|
|
|
879
932
|
...(options.browserProcess?.filesystemPolicyVersion === 1 ? { childFilesystemPolicyVersion: 1 } : {}),
|
|
880
933
|
...(options.threadOutputPorts ? { outputPorts: options.threadOutputPorts } : {}),
|
|
881
934
|
...(stdin instanceof SharedWaliStdinReader ? { stdin: stdin.buffer } : {}),
|
|
935
|
+
...(options.terminalStdin instanceof SharedWaliStdinReader ? { terminalStdin: options.terminalStdin.buffer } : {}),
|
|
882
936
|
terminal: options.terminal === true,
|
|
937
|
+
...(options.onTerminalOutput ? { onTerminalOutput: options.onTerminalOutput } : {}),
|
|
883
938
|
onStdout: (chunk) => { emit(1, chunk); },
|
|
884
939
|
onStderr: (chunk) => { emit(2, chunk); },
|
|
885
940
|
...(networkCoordinator ? { network: networkCoordinator } : {}),
|
|
@@ -898,6 +953,11 @@ export class BrowserWaliRuntime {
|
|
|
898
953
|
let exitCode = 0;
|
|
899
954
|
let replaced = false;
|
|
900
955
|
const rootStackPointer = Number(instance.exports.__stack_pointer?.value ?? 0);
|
|
956
|
+
setWaliSignalInterruption(() => {
|
|
957
|
+
const words = signalHost.signals.words, generation = Atomics.load(words, 1);
|
|
958
|
+
return { pending: (signalHost.signals.pending() & ~signalHost.mask) !== 0n,
|
|
959
|
+
guards: [{ words, index: 1, value: generation }] };
|
|
960
|
+
});
|
|
901
961
|
try {
|
|
902
962
|
try {
|
|
903
963
|
if (rewinding)
|
|
@@ -938,19 +998,26 @@ export class BrowserWaliRuntime {
|
|
|
938
998
|
childWaitControls.set(forkResult, new Int32Array(control));
|
|
939
999
|
if (registered < 0)
|
|
940
1000
|
throw new Error(`Fork child registration failed: ${registered}`);
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
1001
|
+
// Rewind reads the Asyncify data only up to its current position. With
|
|
1002
|
+
// the stack lowest in memory (layout.stackTop), below the stack pointer
|
|
1003
|
+
// is unused stack; one page under it is kept as margin.
|
|
1004
|
+
const stackPointer = Number(globals.__stack_pointer ?? 0);
|
|
1005
|
+
const unused = [{ start: view().getUint32(asyncifyData, true), end: view().getUint32(asyncifyData + 4, true) },
|
|
1006
|
+
...(layout.stackTop !== undefined && stackPointer > 0 && stackPointer <= layout.stackTop
|
|
1007
|
+
? [{ start: 0, end: stackPointer - 65_536 }] : [])];
|
|
1008
|
+
const snapshot = captureWaliForkMemory(memory(), threaded, unused);
|
|
1009
|
+
options.onDiagnostic?.(`[WALI] fork snapshot: ${memory().buffer.byteLength} bytes, payload ${snapshot.memory.byteLength} bytes, Asyncify stack ${view().getUint32(asyncifyData, true) - asyncifyData - 8} bytes.`);
|
|
1010
|
+
const forked = sharedFileClient.copyForForkChannel();
|
|
944
1011
|
options.browserProcess.fork({
|
|
945
1012
|
module, memoryLayout: layout, pid: forkResult, ...completion,
|
|
946
|
-
descriptorTable:
|
|
1013
|
+
descriptorTable: forked.channel,
|
|
947
1014
|
childPidAllocator: nextChildPid.buffer,
|
|
948
|
-
argv, env: { ...options.env }, cwd:
|
|
1015
|
+
argv, env: { ...options.env }, cwd: forked.cwd, executablePath,
|
|
949
1016
|
...(filesystemPolicy ? { filesystemPolicy } : {}),
|
|
950
|
-
forkState: { ...completion,
|
|
1017
|
+
forkState: { ...completion, ...snapshot, globals,
|
|
951
1018
|
allocator: memoryManager.allocatorControl().slice(0), mappings: memoryManager.forkSnapshot(),
|
|
952
1019
|
signalState: forkSignals.state, signalMask: forkSignals.mask,
|
|
953
|
-
asyncifyData, jumps: jumps.forkSnapshot(), umask:
|
|
1020
|
+
asyncifyData, jumps: jumps.forkSnapshot(), umask: forked.umask, parentPid: pid },
|
|
954
1021
|
});
|
|
955
1022
|
rewinding = true;
|
|
956
1023
|
asyncify("asyncify_start_rewind", asyncifyData);
|
|
@@ -974,6 +1041,7 @@ export class BrowserWaliRuntime {
|
|
|
974
1041
|
}
|
|
975
1042
|
finally {
|
|
976
1043
|
// First, so a teardown step that throws cannot leave a process's pipe buffers held (review of 945655a).
|
|
1044
|
+
setWaliSignalInterruption(undefined);
|
|
977
1045
|
forgetWaliSharedPipeState();
|
|
978
1046
|
setWaliWaitPublisher(undefined);
|
|
979
1047
|
threadPool?.terminate();
|
|
@@ -988,6 +1056,10 @@ export class BrowserWaliRuntime {
|
|
|
988
1056
|
}
|
|
989
1057
|
else
|
|
990
1058
|
syncFilesystem();
|
|
1059
|
+
// Inherited images have no private filesystem to publish at exit.
|
|
1060
|
+
// Flush the one owner's writes before closing this image's table.
|
|
1061
|
+
if (inheritedDescriptors)
|
|
1062
|
+
inheritedDescriptors.prepareSpawn();
|
|
991
1063
|
sharedFileClient?.closeProcess();
|
|
992
1064
|
if (!sharedFileClient)
|
|
993
1065
|
fileDescriptors.descriptors.exit();
|
|
@@ -1018,6 +1090,9 @@ export class BrowserWaliRuntime {
|
|
|
1018
1090
|
};
|
|
1019
1091
|
}
|
|
1020
1092
|
}
|
|
1093
|
+
// Linux restarts interrupted blocking stream I/O when the handler has SA_RESTART.
|
|
1094
|
+
// Timeout-bearing poll/sleep/sigtimedwait calls are deliberately not retried here.
|
|
1095
|
+
const RESTARTABLE_STREAM_CALLS = new Set(["SYS_read", "SYS_write", "SYS_readv", "SYS_writev", "SYS_recv", "SYS_recvfrom", "SYS_recvmsg"]);
|
|
1021
1096
|
/** The calls through which a process makes a child: fork, exec, the browser's spawn door, and the wait for one. */
|
|
1022
1097
|
const CHILD_PROCESS_SYSCALLS = new Set(["SYS_fork", "SYS_execve", "SYS_browser_spawn", "SYS_browser_spawn_confined_v1", "SYS_wait4"]);
|
|
1023
1098
|
/** A run longer than this prints where its time went (`[wali-profile]`). */
|
|
@@ -1067,23 +1142,6 @@ function concatenate(chunks) {
|
|
|
1067
1142
|
}
|
|
1068
1143
|
return result;
|
|
1069
1144
|
}
|
|
1070
|
-
function clockNanoseconds(clockId) {
|
|
1071
|
-
if (clockId === 0) {
|
|
1072
|
-
const milliseconds = typeof performance === "undefined"
|
|
1073
|
-
? Date.now() : performance.timeOrigin + performance.now();
|
|
1074
|
-
return BigInt(Math.floor(milliseconds * 1_000_000));
|
|
1075
|
-
}
|
|
1076
|
-
if (clockId === 1 || clockId === 4) {
|
|
1077
|
-
return BigInt(Math.floor(monotonicMilliseconds() * 1_000_000));
|
|
1078
|
-
}
|
|
1079
|
-
return undefined;
|
|
1080
|
-
}
|
|
1081
|
-
function writeTimespec(view, pointer, nanoseconds) {
|
|
1082
|
-
if (pointer < 0 || pointer + 16 > view.byteLength)
|
|
1083
|
-
throw new WebAssembly.RuntimeError("WALI timespec pointer is out of bounds.");
|
|
1084
|
-
view.setBigInt64(pointer, nanoseconds / 1000000000n, true);
|
|
1085
|
-
view.setBigInt64(pointer + 8, nanoseconds % 1000000000n, true);
|
|
1086
|
-
}
|
|
1087
1145
|
function fillRandom(destination) {
|
|
1088
1146
|
if (!globalThis.crypto?.getRandomValues)
|
|
1089
1147
|
throw new Error("Web Crypto is required for SYS_getrandom.");
|