Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 13 additions & 10 deletions src/lib/libwasi.js
Original file line number Diff line number Diff line change
Expand Up @@ -593,27 +593,30 @@ var WasiLibrary = {
}
#endif

#if ENVIRONMENT_MAY_BE_AUDIO_WORKLET
// Audio worklets don't support crypto.getRandomValues
if (ENVIRONMENT_IS_AUDIO_WORKLET) { //!globalThis.crypto) {
return () => {{{ cDefs.ENOTSUP }}};
}
#endif

#if SHARED_MEMORY
// like with most Web APIs, we can't use Web Crypto API directly on shared memory,
// so we need to create an intermediate buffer and copy it to the destination
return (view) => view.set(crypto.getRandomValues(new Uint8Array(view.byteLength)));
return (view) => (view.set(crypto.getRandomValues(new Uint8Array(view.byteLength))), 0);
#else
return (view) => crypto.getRandomValues(view);
return (view) => (crypto.getRandomValues(view), 0);
#endif
},

$randomFill__deps: ['$initRandomFill'],
$randomFill: (view) => {
// Lazily init on the first invocation.
(randomFill = initRandomFill())(view);
},
// Lazily init on the first invocation.
$randomFill: (view) => (randomFill = initRandomFill())(view),

random_get__proxy: 'none',
random_get__nothrow: true,
random_get__deps: ['$randomFill'],
random_get: (buffer, size) => {
randomFill(HEAPU8.subarray(buffer, buffer + size));
return 0;
},
random_get: (buffer, size) => randomFill(HEAPU8.subarray(buffer, buffer + size)),
};

for (var x in WasiLibrary) {
Expand Down
6 changes: 3 additions & 3 deletions system/lib/libc/musl/src/misc/getentropy.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ int getentropy(void *buffer, size_t len)
return -1;
}

pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);

#ifdef __EMSCRIPTEN__
ret = __wasi_syscall_ret(__wasi_random_get(buffer, len));
#else
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);

while (len) {
ret = getrandom(pos, len, 0);
if (ret < 0) {
Expand All @@ -33,9 +33,9 @@ int getentropy(void *buffer, size_t len)
len -= ret;
ret = 0;
}
#endif

pthread_setcancelstate(cs, 0);
#endif

return ret;
}
78 changes: 40 additions & 38 deletions test/codesize/audio_worklet_wasm.expected.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ if (p) {
var H = 0;
for (f of g) H += f.length;
n += H * this.s;
var N = 0;
for (f in e) ++N, k += 8, n += e[f].byteLength;
var U = C(), B = k + n + 15 & -16;
var O = 0;
for (f in e) ++O, k += 8, n += e[f].byteLength;
var V = C(), B = k + n + 15 & -16;
k = D(B);
n = k + (B - n);
B = k;
Expand All @@ -61,8 +61,8 @@ if (p) {
e = k;
for (f of g) G[k >> 2] = f.length, G[k + 4 >> 2] = this.u, G[k + 8 >> 2] = n, k += 12,
n += this.s * f.length;
if (l = this.v(l, B, q, e, N, d, this.A)) for (f of g) for (r of f) r.set(this.B[--H]);
F(U);
if (l = this.v(l, B, q, e, O, d, this.A)) for (f of g) for (r of f) r.set(this.B[--H]);
F(V);
return !!l;
}
}
Expand Down Expand Up @@ -109,9 +109,9 @@ var K = [], L = a => {
}, M = a => {
K.push(a);
}, P = (a, c, b, h) => {
c = O[c];
O[a].connect(c.destination || c, b, h);
}, O = {}, Q = 0, R = globalThis.TextDecoder && new TextDecoder, S = (a = 0) => {
c = N[c];
N[a].connect(c.destination || c, b, h);
}, N = {}, Q = 0, R = globalThis.TextDecoder && new TextDecoder, S = (a = 0) => {
for (var c = I, b = a, h = b + void 0; c[b] && !(b >= h); ) ++b;
if (16 < b - a && c.buffer && R) return R.decode(c.slice(a, b));
for (h = ""; a < b; ) {
Expand All @@ -138,9 +138,9 @@ var K = [], L = a => {
};
} else a = void 0;
a = new AudioContext(a);
O[++Q] = a;
N[++Q] = a;
return Q;
}, V = (a, c, b, h, d) => {
}, U = (a, c, b, h, d) => {
var g = b ? J[b + 4 >> 2] : 0;
if (b) {
var e = J[b >> 2], l = G[b + 8 >> 2], q = g;
Expand All @@ -159,14 +159,14 @@ var K = [], L = a => {
processorOptions: {
v: h,
A: d,
u: O[a].renderQuantumSize || 128
u: N[a].renderQuantumSize || 128
}
};
} else b = void 0;
a = new AudioWorkletNode(O[a], c ? S(c) : "", b);
O[++Q] = a;
a = new AudioWorkletNode(N[a], c ? S(c) : "", b);
N[++Q] = a;
return Q;
}, W = (a, c, b, h) => {
}, aa = (a, c, b, h) => {
var d = (d = G[c >> 2]) ? S(d) : "", g = J[c + 4 >> 2];
c = G[c + 8 >> 2];
for (var e = [], l = 0; g--; ) e.push({
Expand All @@ -176,19 +176,19 @@ var K = [], L = a => {
maxValue: E[c + 8 >> 2],
automationRate: (J[c + 12 >> 2] ? "k" : "a") + "-rate"
}), c += 16;
O[a].audioWorklet.port.postMessage({
N[a].audioWorklet.port.postMessage({
_wpn: d,
I: e,
J: a,
v: b,
A: h
});
}, aa = () => !1, ba = 1, ca = a => {
}, ba = () => !1, ca = 1, da = a => {
a = a.data;
var c = a._wsc;
c && A.get(c)(...a.C);
}, da = (a, c, b, h, d) => {
var g = O[a], e = g.audioWorklet, l = () => {
}, ea = (a, c, b, h, d) => {
var g = N[a], e = g.audioWorklet, l = () => {
A.get(h)(a, 0, d);
};
if (!e) return l();
Expand All @@ -204,50 +204,52 @@ var K = [], L = a => {
});
e.port.postMessage({
_boot: 1,
M: ba++,
M: ca++,
G: m.wasm,
H: w,
K: c,
F: b
});
e.port.onmessage = ca;
e.port.onmessage = da;
A.get(h)(a, 1, d);
})).catch(l);
};
}, fa = () => p ? () => 138 : a => (a.set(crypto.getRandomValues(new Uint8Array(a.byteLength))),
0), W = a => (W = fa())(a), ha = (a, c) => W(I.subarray(a, a + c));

function ea(a) {
function ia(a) {
let c = document.createElement("button");
c.innerHTML = "Toggle playback";
document.body.appendChild(c);
a = O[a];
a = N[a];
c.onclick = () => {
"running" != a.state ? a.resume() : a.suspend();
};
}

function y() {
Z = {
f: ea,
g: P,
d: T,
h: V,
e: W,
b: aa,
c: da,
a: w
g: ia,
h: P,
e: T,
i: U,
f: aa,
b: ba,
d: ea,
a: w,
c: ha
};
z = WebAssembly.instantiate(m.wasm, {
a: Z
}).then((a => {
a = (a.instance || a).exports;
X = a.j;
F = a.l;
D = a.m;
C = a.n;
Y = a.o;
A = a.k;
X = a.k;
F = a.m;
D = a.n;
C = a.o;
Y = a.p;
A = a.l;
t ? (Y(u.M, u.K, u.F), p || (removeEventListener("message", M), K = K.forEach(L),
addEventListener("message", L))) : a.i();
addEventListener("message", L))) : a.j();
t || X();
}));
}
Expand Down
8 changes: 4 additions & 4 deletions test/codesize/test_codesize_cxx_ctors1.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"a.out.js": 19193,
"a.out.js.gz": 7970,
"a.out.js": 19195,
"a.out.js.gz": 7973,
"a.out.nodebug.wasm": 132638,
"a.out.nodebug.wasm.gz": 49927,
"total": 151831,
"total_gz": 57897,
"total": 151833,
"total_gz": 57900,
"sent": [
"__cxa_throw",
"_abort_js",
Expand Down
8 changes: 4 additions & 4 deletions test/codesize/test_codesize_cxx_ctors2.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"a.out.js": 19170,
"a.out.js.gz": 7957,
"a.out.js": 19172,
"a.out.js.gz": 7960,
"a.out.nodebug.wasm": 132064,
"a.out.nodebug.wasm.gz": 49586,
"total": 151234,
"total_gz": 57543,
"total": 151236,
"total_gz": 57546,
"sent": [
"__cxa_throw",
"_abort_js",
Expand Down
8 changes: 4 additions & 4 deletions test/codesize/test_codesize_cxx_except.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"a.out.js": 23173,
"a.out.js.gz": 8962,
"a.out.js": 23175,
"a.out.js.gz": 8964,
"a.out.nodebug.wasm": 172516,
"a.out.nodebug.wasm.gz": 57438,
"total": 195689,
"total_gz": 66400,
"total": 195691,
"total_gz": 66402,
"sent": [
"__cxa_begin_catch",
"__cxa_end_catch",
Expand Down
4 changes: 2 additions & 2 deletions test/codesize/test_codesize_cxx_except_wasm.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"a.out.js": 19025,
"a.out.js": 19027,
"a.out.js.gz": 7908,
"a.out.nodebug.wasm": 147922,
"a.out.nodebug.wasm.gz": 55312,
"total": 166947,
"total": 166949,
"total_gz": 63220,
"sent": [
"_abort_js",
Expand Down
8 changes: 4 additions & 4 deletions test/codesize/test_codesize_cxx_except_wasm_legacy.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"a.out.js": 19099,
"a.out.js.gz": 7930,
"a.out.js": 19101,
"a.out.js.gz": 7933,
"a.out.nodebug.wasm": 145729,
"a.out.nodebug.wasm.gz": 54945,
"total": 164828,
"total_gz": 62875,
"total": 164830,
"total_gz": 62878,
"sent": [
"_abort_js",
"_tzset_js",
Expand Down
8 changes: 4 additions & 4 deletions test/codesize/test_codesize_cxx_lto.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"a.out.js": 18562,
"a.out.js.gz": 7668,
"a.out.js": 18564,
"a.out.js.gz": 7670,
"a.out.nodebug.wasm": 101954,
"a.out.nodebug.wasm.gz": 39462,
"total": 120516,
"total_gz": 47130,
"total": 120518,
"total_gz": 47132,
"sent": [
"a (emscripten_resize_heap)",
"b (_setitimer_js)",
Expand Down
8 changes: 4 additions & 4 deletions test/codesize/test_codesize_cxx_mangle.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"a.out.js": 23223,
"a.out.js.gz": 8984,
"a.out.js": 23225,
"a.out.js.gz": 8986,
"a.out.nodebug.wasm": 238957,
"a.out.nodebug.wasm.gz": 79847,
"total": 262180,
"total_gz": 88831,
"total": 262182,
"total_gz": 88833,
"sent": [
"__cxa_begin_catch",
"__cxa_end_catch",
Expand Down
8 changes: 4 additions & 4 deletions test/codesize/test_codesize_cxx_noexcept.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"a.out.js": 19193,
"a.out.js.gz": 7970,
"a.out.js": 19195,
"a.out.js.gz": 7973,
"a.out.nodebug.wasm": 134661,
"a.out.nodebug.wasm.gz": 50777,
"total": 153854,
"total_gz": 58747,
"total": 153856,
"total_gz": 58750,
"sent": [
"__cxa_throw",
"_abort_js",
Expand Down
12 changes: 6 additions & 6 deletions test/codesize/test_codesize_cxx_wasmfs.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"a.out.js": 7033,
"a.out.js.gz": 3310,
"a.out.nodebug.wasm": 172736,
"a.out.nodebug.wasm.gz": 63329,
"total": 179769,
"total_gz": 66639,
"a.out.js": 7024,
"a.out.js.gz": 3312,
"a.out.nodebug.wasm": 172714,
"a.out.nodebug.wasm.gz": 63316,
"total": 179738,
"total_gz": 66628,
"sent": [
"__cxa_throw",
"_abort_js",
Expand Down
7 changes: 2 additions & 5 deletions test/codesize/test_codesize_file_preload.expected.js
Original file line number Diff line number Diff line change
Expand Up @@ -625,13 +625,10 @@ var initRandomFill = () => {
var nodeCrypto = require("node:crypto");
return view => nodeCrypto.randomFillSync(view);
}
return view => crypto.getRandomValues(view);
return view => (crypto.getRandomValues(view), 0);
};

var randomFill = view => {
// Lazily init on the first invocation.
(randomFill = initRandomFill())(view);
};
var randomFill = view => (randomFill = initRandomFill())(view);

var PATH_FS = {
resolve: (...args) => {
Expand Down
8 changes: 4 additions & 4 deletions test/codesize/test_codesize_file_preload.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"a.out.js": 22140,
"a.out.js.gz": 9186,
"a.out.js": 22142,
"a.out.js.gz": 9188,
"a.out.nodebug.wasm": 1648,
"a.out.nodebug.wasm.gz": 939,
"total": 23788,
"total_gz": 10125,
"total": 23790,
"total_gz": 10127,
"sent": [
"a (fd_write)"
],
Expand Down
Loading
Loading