)]}'
{
  "log": [
    {
      "commit": "92b541348ed8f38cf4638f8c4c6cebc4b076fb67",
      "tree": "1197b83b3f1958c903e0f784e95969591bf315d3",
      "parents": [
        "b4ba31c281eecb0079983f562b7dcabdee8023e3"
      ],
      "author": {
        "name": "Grégoire Pineau",
        "email": "lyrixx@lyrixx.info",
        "time": "Mon Nov 02 17:29:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 02 17:29:55 2026"
      },
      "message": "Add a posix_spawnp stub, and return the error from posix_spawn (#28135)\n\nposix_spawnp had no stub: a call fails to link, or aborts at runtime\n(`missing function: posix_spawnp`) with\n`-sERROR_ON_UNDEFINED_SYMBOLS\u003d0`, as PHP\u0027s `proc_open()` does.\nposix_spawn returned -1 and set errno, but POSIX has it return the error\nnumber: callers printed `strerror(-1)`."
    },
    {
      "commit": "b4ba31c281eecb0079983f562b7dcabdee8023e3",
      "tree": "2b1a1c50703e48aef02c9a8d063779f8ebf76fe9",
      "parents": [
        "a19d0256b8bbcdec75fc9071f81e38bba0aeb545"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Nov 02 15:40:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 02 15:40:43 2026"
      },
      "message": "[deps]: Bump the development-dependencies group with 6 updates (#28132)\n\nBumps the development-dependencies group with 6 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [eslint](https://github.com/eslint/eslint) | `10.11.0` | `10.13.0` |\n| [globals](https://github.com/sindresorhus/globals) | `17.12.0` |\n`17.13.0` |\n| [prettier](https://github.com/prettier/prettier) | `3.9.9` | `3.9.10`\n|\n| [rollup](https://github.com/rollup/rollup) | `4.63.5` | `4.66.0` |\n| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) |\n`8.3.1` | `8.3.5` |\n| [webpack](https://github.com/webpack/webpack) | `5.111.1` | `5.112.2`\n|"
    },
    {
      "commit": "a19d0256b8bbcdec75fc9071f81e38bba0aeb545",
      "tree": "ee959bd2c75ede8b37b99725fde988b744adfb9a",
      "parents": [
        "faa4855700e7dda86ce5d0d9beb932dd6a118d2c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Nov 02 15:39:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 02 15:39:55 2026"
      },
      "message": "[deps]: Bump github/codeql-action/upload-sarif from 4.38.2 to 4.39.1 (#28133)"
    },
    {
      "commit": "faa4855700e7dda86ce5d0d9beb932dd6a118d2c",
      "tree": "59641bbd7a768f6daeeffae8b9b8cac3add682f7",
      "parents": [
        "e825540d6374e5ca5c6b7a6e6054eb00eba94d9a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Nov 02 15:39:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 02 15:39:30 2026"
      },
      "message": "[deps]: Bump ossf/scorecard-action from 2.4.4 to 2.5.0 (#28134)"
    },
    {
      "commit": "e825540d6374e5ca5c6b7a6e6054eb00eba94d9a",
      "tree": "1f79c1c836ae262bb8dfc5cb28db49a3eb1b10e1",
      "parents": [
        "51ed9553f4941b044fba9dede90f954aab4627a1"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Sun Nov 01 17:40:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Nov 01 17:40:22 2026"
      },
      "message": "Update emsdk version from eccc0ded to 811a854f (#28128)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: eccc0ded \u003d\u003e 811a854f\n\nThe following revisions were included in this update:\n\n```\n- 811a854f Roll llvm-project from 99a148b807da to eeac84828e18 (27 revisions)\n- 32d2b5c1 Roll llvm-project from 7efb1638f7cb to 99a148b807da (27 revisions)\n- f309f1ee Roll emscripten from 42f5867653ea to 51ed9553f494 (2 revisions)\n- 111a54c3 Roll binaryen from a6ed9adf2c9b to 677ad3185797 (1 revision)\n- 2ed513bc Roll emscripten from 91d14a4c6729 to 42f5867653ea (1 revision)\n- e409014b Roll llvm-project from 33e1c2c1b8a6 to 7efb1638f7cb (20 revisions)\n- eae43d90 Roll llvm-project from e98b16a2710b to 33e1c2c1b8a6 (6 revisions)\n- 4792670d Roll llvm-project from 8d3d02b2fc9c to e98b16a2710b (23 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/eccc0ded..811a854f\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "51ed9553f4941b044fba9dede90f954aab4627a1",
      "tree": "97c829213691e12437ff9bd46bdeb0d603118ff3",
      "parents": [
        "edd970826f8164fad070fe03907ca1c15e1b2b91"
      ],
      "author": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Sat Oct 31 18:56:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 31 18:56:03 2026"
      },
      "message": "Update mimalloc to 3.6.1 (#28121)"
    },
    {
      "commit": "edd970826f8164fad070fe03907ca1c15e1b2b91",
      "tree": "3ada7261c76482837e527c4d3097b0bcf77e76b0",
      "parents": [
        "42f5867653eac6a1294d9c9998ce79d3021b715e"
      ],
      "author": {
        "name": "Clément Péron",
        "email": "peron.clem@gmail.com",
        "time": "Sat Oct 31 18:14:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 31 18:14:31 2026"
      },
      "message": "Fix flakiness in test_pthread_dylink_tls_free (#28120)\n\n`test_pthread_dylink_tls_free`, added in #28051, is flaky on the\nemscripten-releases bot (`test_core.cores`), as reported in\nhttps://github.com/emscripten-core/emscripten/pull/28051#issuecomment-6535791281:\n\n```\nAssertion failed: after \u003c before + NUM_THREADS * 4096 / 2, at: test/core/pthread/test_pthread_dylink_tls_free.c,43,main\n```\n\nThe test compares `mallinfo()` before and after 100\n`pthread_create`/`pthread_join` cycles and allows 200 KiB of growth.\nUnder `PROXY_TO_PTHREAD`, `main()` runs on a pthread, and there\n`pthread_join()` doesn\u0027t free the joined thread\u0027s own block (64 KiB\nstack + guard + TLS + pthread struct, about 73 KiB):\n`_emscripten_thread_cleanup()` posts `CMD_CLEANUP_THREAD` to the main\nthread, which frees it later. The next `pthread_create()` reaches the\nmain thread through its mailbox rather than through that message queue,\nso the main thread can fall several joins behind. Three not-yet-freed\nblocks are enough to exceed the allowance.\n\nThis drops `PROXY_TO_PTHREAD` for this test. On the main runtime thread,\n`_emscripten_thread_cleanup()` calls `cleanupThread()` directly, so the\njoined thread\u0027s block is freed before `pthread_join()` returns and the\nmeasurement no longer depends on timing. The side-module TLS leak fixed\nin #28051 (about 400 KiB over 100 threads) is still caught.\n`test_pthread_dlopen` already uses `dlopen` plus\n`pthread_create`/`pthread_join` on the main thread under node in the\nsame way.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01EuYUd1U1jgeJHaduQBgcKA\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "42f5867653eac6a1294d9c9998ce79d3021b715e",
      "tree": "400e207e56bed6769178bdbb935dab3f5ca4fdec",
      "parents": [
        "91d14a4c6729752ed146751416fe96598cac3dc7"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Sat Oct 31 17:47:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 31 17:47:41 2026"
      },
      "message": "Update emsdk version from 66b6dc5a to eccc0ded (#28122)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 66b6dc5a \u003d\u003e eccc0ded\n\nThe following revisions were included in this update:\n\n```\n- eccc0ded Roll binaryen from 7d20763429af to a6ed9adf2c9b (1 revision)\n- ad70a487 Roll llvm-project from 29474e1a3a72 to 8d3d02b2fc9c (16 revisions)\n- 39b2263b Delete local LLVM testsuite patches removing COMMON symbols\n- 1a504f7f Roll emscripten from d3a6376f16bf to 91d14a4c6729 (2 revisions)\n- 1968c5b6 Roll emscripten from e35fcb3beded to d3a6376f16bf (5 revisions)\n- 50424dc3 Roll llvm-project from c41549e296d4 to 29474e1a3a72 (39 revisions)\n- bad4bde0 Roll binaryen from c3848522eb57 to 7d20763429af (2 revisions)\n- c712e446 Roll emscripten from 6356188fc060 to e35fcb3beded (2 revisions)\n- b376a659 Roll llvm-project from 3fa53fc0e1b2 to c41549e296d4 (115 revisions)\n- fc0f0d53 Roll emscripten from 878cc3d77f8b to 6356188fc060 (4 revisions)\n- 55591c81 Roll llvm-project from 961dc902843d to 3fa53fc0e1b2 (51 revisions)\n- 3d8c25cd Roll llvm-project from 035d649dce56 to 961dc902843d (94 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/66b6dc5a..eccc0ded\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "91d14a4c6729752ed146751416fe96598cac3dc7",
      "tree": "86ea5597df12fee4c03001de2b6fc559535bdc5c",
      "parents": [
        "d489094eddfdc061d1634584561a3ce07a1f491c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Sat Oct 31 00:29:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 31 00:29:03 2026"
      },
      "message": "Enable `NODE_COMPILE_CACHE` when running JS compiler tools (#28116)\n\nSet `NODE_COMPILE_CACHE` to `cache.get_path(\u0027node_compile_cache\u0027)` in\n`shared.run_js_tool` when `FROZEN_CACHE` is not set, and route\n`building.acorn_optimizer` through `shared.run_js_tool` so\n`tools/acorn-optimizer.mjs` also benefits from Node\u0027s V8 compile cache.\n\nOn a local `emcc -O2 hello_world.o` link (20 runs), this reduces total\nlink time by ~20 ms (~3.3%, from 602.3 ms to 582.3 ms median; and from\n787.8 ms to 768.3 ms when `compiler.mjs` also runs), with\n`acorn-optimizer.mjs` itself dropping from 174.4 ms to 161.3 ms (~7.5%)."
    },
    {
      "commit": "d489094eddfdc061d1634584561a3ce07a1f491c",
      "tree": "8cf9e78644c82cd9386b9bb669fb298ba5d7e036",
      "parents": [
        "d3a6376f16bfa4e4493ed702e2b1c1e713a51085"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Sat Oct 31 00:13:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 31 00:13:55 2026"
      },
      "message": "Add `__const` JS library decorator and `defineConsts` helpers (#27981)\n\nPreviously, pthread and wasm worker message type constants (`CMD_LOAD`,\netc., added in #26987) were defined as compile-time constants in\n`{{{ ... }}}` preprocessor blocks.\n\nThis adds support for a `__const` JS library decorator (emitting `const`\ninstead of `var` in `jsifier.mjs`) along with `defineConsts` and\n`defineInternalConsts` helpers, allowing constants to be normal JS\nlibrary symbols that participate in `__deps` tracking while still being\ninlined and eliminated by Closure Compiler (`--closure\u003d1`).\n\nAlso update `autoAddDeps` in `libcore.js` to skip `__const` symbols so\nthat constants defined in libraries using `autoAddDeps` (such as\n`libpthread.js`) do not gain circular dependencies on the library object\nitself.\n\nThe advantage of doing things this way is twofold:\n\n1. It allows better readability of library source code (`MY_CONST` vs\n   `{{{ MY_CONST }}}`).\n2. It allows for better readability / debug-ability of debug code since\n   `const MY_CONST \u003d 123;` shows up in the generated code (in debug\n   builds).\n\nAs a followup I plan to make all cDefs available in this way. e.g. So\nyou\ncan just write `EINVAL` instead of `{{{ cDefs.EINVAL }}}`."
    },
    {
      "commit": "d3a6376f16bfa4e4493ed702e2b1c1e713a51085",
      "tree": "d0ebeb82bf3ccc697f9c0631f7383e91223aad43",
      "parents": [
        "5258fded93048e5920f194d1a7d4eec144318778"
      ],
      "author": {
        "name": "project516",
        "email": "138796702+Project516@users.noreply.github.com",
        "time": "Fri Oct 30 23:32:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 30 23:32:57 2026"
      },
      "message": "Avoid copying the wasm binary in getWasmBinary under node (#28110)\n\nUnder node, `readAsync` returns the `Buffer` from `fs.readFileSync`, and\n`getWasmBinary` wrapped it in `new Uint8Array(...)`, which copies the\nwhole file. On the web `readAsync` returns an `ArrayBuffer`, where the\nwrap only makes a view. `WebAssembly.instantiate` accepts either, so\nreturn what `readAsync` returns.\n\nFor a 40 MB module this takes about 50 ms and 40 MB of peak memory off\nstartup under node.\n\n`test_node_wasm_binary_not_copied` checks that `WebAssembly.instantiate`\nreceives the `Buffer` under node. It fails without this change. Code\nsize expectations are rebaselined: the JS output is slightly smaller,\nand no wasm size changed."
    },
    {
      "commit": "5258fded93048e5920f194d1a7d4eec144318778",
      "tree": "dd81662de6e8d660b8274c1557f9ce3e93bae1b4",
      "parents": [
        "09bbe368f12217b3513dee45de224f1612631d95"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Oct 30 23:31:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 30 23:31:46 2026"
      },
      "message": "Fix typo in `preprocess` error message in `src/parseTools.mjs` (#28115)\n\nFix a leftover `$` and `\u0027` from a template literal conversion in\n`preprocess` (`${showStack.length$}\u0027` -\u003e `${showStack.length}`)."
    },
    {
      "commit": "09bbe368f12217b3513dee45de224f1612631d95",
      "tree": "70a29dc3e220b6a226d98e0db167ef9efcb20b21",
      "parents": [
        "ce1cd6061d1ec93c54cd86c7f8a59e98bbe13883"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Oct 30 23:11:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 30 23:11:48 2026"
      },
      "message": "[test] Update firefox bug number. NFC (#28114)\n\nThe bug that we were referencing here was closed as a duplicate but the\noriginal is still open.\nSee: https://bugzilla.mozilla.org/show_bug.cgi?id\u003d1992576\nAnd: https://bugzilla.mozilla.org/show_bug.cgi?id\u003d1991282"
    },
    {
      "commit": "ce1cd6061d1ec93c54cd86c7f8a59e98bbe13883",
      "tree": "9facc50fd8c0bb109c23c849ddaf3fa19f321dbd",
      "parents": [
        "d78a0261cbba516834ad158d964f765c1dd82903"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Oct 30 22:35:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 30 22:35:32 2026"
      },
      "message": "[pthreads] Move `runtime_pthread.js` from preamble to postamble. NFC (#28111)\n\n`runtime_pthread.js` contains the worker-thread message handler and\nstartup logic, which calls into JS library functions and postamble\nfunctions (`PThread`, `establishStackSpace`, `invokeEntryPoint`,\n`checkMailbox`, `createWasm`, `run`, etc.).\n\nMoving it from `runtime_common.js` (included in `preamble.js` and\n`preamble_minimal.js`) to `postamble.js` and `postamble_minimal.js`\nplaces it after the JS library code.\n\nAlso move the `var workerID \u003d 0` declaration to `runtime_debug.js`\n(where it is read by `getLogPrefix`) so that it is initialized before\nany early `dbg()` calls run prior to the postamble.\n\nSplit out from #27981"
    },
    {
      "commit": "d78a0261cbba516834ad158d964f765c1dd82903",
      "tree": "538ab18d77678b7c7183b764056051aa7374ae75",
      "parents": [
        "e35fcb3beded6de0bd7748466e114b6d7d47a5a3"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Oct 30 20:48:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 30 20:48:17 2026"
      },
      "message": "[JS] Fix Closure compiler arity and type warnings with `-sEXPORT_ES6` (#28100)\n\nFollowup to #27749.\n\nMake all remaining JS libraries compatible with Closure compiler in\nES6 module mode (`-sEXPORT_ES6`).\n\n- Change loop variables in `$miniTempWebGLFloatBuffers__postset` and\n  `$miniTempWebGLIntBuffers__postset` from `var` to `let` to prevent\n  duplicate top-level `var` declaration collisions in ES module scope.\n- Remove duplicate forward `var` declarations in\n  `$GLEmulation__postset` and `fogColor: null` initializer on\n  `$GLEmulation`.\n- Provide default values for optional arguments across `libbrowser.js`,\n  `libfs_shared.js`, `libglemu.js`, `libglfw.js`, `libhtml5.js`,\n  `liblz4.js`, `libopenal.js`, `libproxyfs.js`, `libsdl.js`,\n  `libwasmfs.js`, and `libworkerfs.js`.\n- Remove unused parameter from `GLImmediate.createRenderer`.\n- Remove undefined `SDL.music.source` reference in `libsdl.js`.\n- Update `test_closure_full_js_library` to run with `-sEXPORT_ES6` and\n  remove temporary `test_closure_fs_es6`.\n\nSee: #27747"
    },
    {
      "commit": "e35fcb3beded6de0bd7748466e114b6d7d47a5a3",
      "tree": "adf351f2dfb0b1decb94eac1aa020cbcfea7c990",
      "parents": [
        "ccd156ac317d163dfcd4d7c911853c90acfde550"
      ],
      "author": {
        "name": "Clément Péron",
        "email": "cpe@outsight.tech",
        "time": "Fri Oct 30 18:31:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 30 18:31:30 2026"
      },
      "message": "Keep the JS sources that go into the output Latin-1 (#28106)\n\nIf a script has any character outside Latin-1, V8 stores all of its\nsource as UTF-16, which doubles the memory used for it. Every pthread\nworker loads the generated JS as its own script, so each one holds its\nown copy.\n\nNote: This does not effect user JS code, which can still contain arbitrary chars."
    },
    {
      "commit": "ccd156ac317d163dfcd4d7c911853c90acfde550",
      "tree": "3d7c1161e3b522fb2f78c058f017d6da17d50341",
      "parents": [
        "6356188fc060aea761acfdb2da82d8512a45db1e"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Fri Oct 30 18:19:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 30 18:19:55 2026"
      },
      "message": "Update libcxxabi from LLVM 22.1.8 to 23.1.3 (#28108)\n\nThis updates libcxxabi from 22.1.8 to LLVM 23.1.3:\nhttps://github.com/llvm/llvm-project/releases/tag/llvmorg-23.1.3"
    },
    {
      "commit": "6356188fc060aea761acfdb2da82d8512a45db1e",
      "tree": "1432ec0f44eafe99c70073cf2078fc8b557d3800",
      "parents": [
        "8385d681880895c221d08dc5c541925c82144816"
      ],
      "author": {
        "name": "piandtheradians-glitch",
        "email": "piandtheradians@gmail.com",
        "time": "Fri Oct 30 16:29:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 30 16:29:44 2026"
      },
      "message": "SINGLE_FILE_BINARY_ENCODE: report a non-UTF-8 read clearly under ASSERTIONS (#28066)\n\nWith `-sSINGLE_FILE` and the default `SINGLE_FILE_BINARY_ENCODE\u003d1`, a\n`.js` that is read in an encoding other than UTF-8 (for example from a\npage with no `\u003cmeta charset\u003e` loaded from `file://`) mangles the\nembedded Wasm binary, and fails with an error about the Wasm rather than\nthe encoding, such as `CompileError: WebAssembly.instantiate(): unknown\ntype form: 85`.\n\nAs discussed in #28048, under `ASSERTIONS` the embedded binary\u0027s length\nis now checked once before decoding, by a separate `checkBinaryLength()`\nin `runtime_common.js`. Read as UTF-8, each byte of the binary is one\ncharacter of the string, so a different length means the file was read\nin another encoding. It then aborts with:\n\n\u003e The embedded Wasm binary is 16265 characters long, but should be\n14895: this file was not read as UTF-8. See the documentation on\nSINGLE_FILE_BINARY_ENCODE for ways to address this issue\n\nBuilds without `ASSERTIONS` are unchanged (byte-identical output checked\nfor `-O0 -sASSERTIONS\u003d0`, `-O2` and `-sMINIMAL_RUNTIME -O2`).\n\nTests:\n- `other.test_single_file_not_utf8`: re-encodes the output as Latin-1\n(what a Windows-1252 read amounts to) and expects the message instead of\na `CompileError`. On `main` it fails with the `CompileError`.\n- `browser.test_single_file_not_utf8`: loads the build from a\n`windows-1252` page. On `main` it fails with the `CompileError`; with\nthis change it reports the message (checked in headless Chromium).\n- `other.test_binary_encode` and `browser.test_binary_encode` (and their\n`_strict` variants), which load `src/binaryDecode.js` without the\npreprocessor: unchanged, and passing.\n\nAlso run locally on the current head, with the emsdk version in\n`test/emsdk_version.txt`: all 43 `other.test_single_file*` tests\n(including the two `d8` shell tests, with V8 15.8 from jsvu), all 6\n`browser.test_single_file*` tests, and the\n`codesize.test_codesize_hello*`,\n`codesize.test_minimal_runtime_code_size*`,\n`codesize.test_unoptimized_code_size` and\n`codesize.test_no_closure_code_size` tests (expectations unchanged).\nChecked by hand with `-O2`, `--closure\u003d1`, `-sMINIMAL_RUNTIME` and\n`-sMODULARIZE -sEXPORT_ES6`.\n\nFixes #28048\n\n*Disclosure: researched and written by Claude (Claude Code) at my\ndirection, and reviewed by me. The tests were run as described above.*"
    },
    {
      "commit": "8385d681880895c221d08dc5c541925c82144816",
      "tree": "fce29649b14e94479d1d53f57c86b4336b5ada5c",
      "parents": [
        "cb547241f24cc454d2cb85f4a4d6112fb4a11b07"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Fri Oct 30 16:17:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 30 16:17:16 2026"
      },
      "message": "Update emsdk version from 8bdf98b4 to 66b6dc5a (#28109)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 8bdf98b4 \u003d\u003e 66b6dc5a\n\nThe following revisions were included in this update:\n\n```\n- 66b6dc5a Roll binaryen from f321a13e5cd6 to c3848522eb57 (1 revision)\n- 78141c6e Roll binaryen from 4ca7ea74edf9 to f321a13e5cd6 (3 revisions)\n- 5c4edd4e Roll emscripten from e14bc513d2e4 to 878cc3d77f8b (1 revision)\n- 8869024a Roll emscripten from a580618aba08 to e14bc513d2e4 (2 revisions)\n- 850698db Roll binaryen from 38b20e405da0 to 4ca7ea74edf9 (3 revisions)\n- 3cca2301 Roll llvm-project from 09bb8a40dfb6 to 035d649dce56 (82 revisions)\n- cb0dbb1e Roll emscripten from 1a9f4f9456b8 to a580618aba08 (1 revision)\n- fc82b3b6 Roll binaryen from bceec928479f to 38b20e405da0 (2 revisions)\n- a39e3e0b Roll emscripten from 375378095ca1 to 1a9f4f9456b8 (1 revision)\n- 6ceaa23f Roll llvm-project from a5337f923218 to 09bb8a40dfb6 (49 revisions)\n- 01e34b57 Roll llvm-project from d8cc92efab5e to a5337f923218 (39 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/8bdf98b4..66b6dc5a\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "cb547241f24cc454d2cb85f4a4d6112fb4a11b07",
      "tree": "3ddf5b8b775f2f4c9e50641df7513f07cf32e364",
      "parents": [
        "c43ed0a707c43981c2be83d4e28361ea984d9f34"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Oct 30 16:14:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 30 16:14:25 2026"
      },
      "message": "[GL] Store `GLEmulation.materialShininess` as a scalar number. NFC (#28107)\n\nUnlike the other material properties (`materialAmbient`,\n`materialDiffuse`, `materialSpecular`, and `materialEmission`), which\nare 4-component vectors passed to `GLctx.uniform4fv`,\n`materialShininess` is a single float passed to `GLctx.uniform1f`.\n\nStore `GLEmulation.materialShininess` directly as a number initialized\nto `0` (matching other scalar uniforms such as `fogStart` and\n`alphaTestRef`) instead of wrapping it in a 1-element `Float32Array`.\nThis also avoids a Closure Compiler type warning on\n`GLEmulation.materialShininess[0]` when compiling with `-sEXPORT_ES6`.\n\nSplit out from #27747"
    },
    {
      "commit": "c43ed0a707c43981c2be83d4e28361ea984d9f34",
      "tree": "37e07829839172e64fbea6b53d227d887d8a8ce7",
      "parents": [
        "878cc3d77f8b141b1379fc9408135a0f77667912"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Oct 30 16:14:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 30 16:14:00 2026"
      },
      "message": "[GL] Support cross-library alias targets in recordGLProcAddressGet (#28104)\n\nWhen `recordGLProcAddressGet` processes `LibraryGLEmulation`, alias\ntargets such as `glGenFramebuffers` live in `LibraryGL` (which has\nalready been merged into `LibraryManager.library`), not in `lib`.\n\nCheck `LibraryManager.library` in addition to `lib` so that targets like\n`glGenFramebuffers` in `emscripten_glGenFramebuffersOES` are updated to\npoint to `emscripten_glGenFramebuffers`.\n\nSee: #27852"
    },
    {
      "commit": "878cc3d77f8b141b1379fc9408135a0f77667912",
      "tree": "bb246bd86bf1bb189cc0fd516ff8eb9ec5d83eff",
      "parents": [
        "e14bc513d2e4a5eef525593860a79c2c5263d433"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Oct 29 22:04:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 29 22:04:40 2026"
      },
      "message": "[FS] Only generate `FS_\u003csymbol\u003e` library aliases for functions (#28101)\n\nIn #24116, a loop was added at the end of `src/lib/libfs.js` to generate\n`$FS_\u003csymbol\u003e` wrapper functions (`(...args) \u003d\u003e FS.foo(...)`) for `FS`\nAPI methods. While the comment noted that non-functions should be\nskipped, the condition only checked `key[0] !\u003d\u003d key[0].toLowerCase()`\n(which filters out uppercase classes like `ErrnoError`, `FSStream`, and\n`FSNode`), assuming all lowercase properties on `LibraryFS.$FS` were\nfunctions.\n\nIn practice, `LibraryFS.$FS` also contains lowercase state and object\nproperties (`root`, `mounts`, `devices`, `streams`, `nextInode`,\n`nameTable`, `currentPath`, `initialized`, `ignorePermissions`,\n`syncFSRequests`, and `chrdev_stream_ops`). Wrapping these in `(...args)\n\u003d\u003e FS.\u003ckey\u003e(...args)` is broken:\n\n- Calling any of these generated aliases at runtime would\nunconditionally throw `TypeError: FS.\u003ckey\u003e is not a function`.\n- When compiling with `-sINCLUDE_FULL_LIBRARY` and `--closure\u003d1` (such\nas with `-sEXPORT_ES6`), Closure Compiler rejects calls to these\nnon-callable properties on `FS`.\n- In unoptimized (`-O0` / `ASSERTIONS`) builds, these bogus symbols\npollute `missingLibrarySymbols`, unnecessarily increasing JS code size.\n\nCheck `typeof LibraryFS.$FS[key] !\u003d\u003d \u0027function\u0027` alongside the existing\nlowercase check so that only actual methods on `FS` receive function\naliases.\n\nSplit out from #27747"
    },
    {
      "commit": "e14bc513d2e4a5eef525593860a79c2c5263d433",
      "tree": "3e190bf97527c1a01a471e2ec49916356a1c30be",
      "parents": [
        "9f276efec5eaa88d0841172ff8d2e3a2e8512bc3"
      ],
      "author": {
        "name": "Grant Karapetyan",
        "email": "grant.karapetyan@meshinspector.com",
        "time": "Thu Oct 29 20:11:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 29 20:11:43 2026"
      },
      "message": "Don\u0027t throw when the Pointer Lock API is missing (#28103)\n\nSince #24603, `glfwSetInputMode(..., GLFW_CURSOR_NORMAL)` calls\n`document.exitPointerLock()` unconditionally. In browsers without the\nPointer Lock API (Safari on iOS) that throws, so GLFW apps that set the\ncursor mode fail to start. Before #24603 these calls went through no-op\nfallbacks set up in `Browser.init`.\n\nMake the pointer lock calls in libglfw.js, libsdl.js and libbrowser.js\nthat #24603 left unguarded no-ops when the API is missing, and test GLFW\nwith the API removed.\n\nFixes #28102"
    },
    {
      "commit": "9f276efec5eaa88d0841172ff8d2e3a2e8512bc3",
      "tree": "5891ebbeeb958be4a7251580a0b7c57104b58e06",
      "parents": [
        "a580618aba0865504e4b447c23889b96874a3a9f"
      ],
      "author": {
        "name": "Clément Péron",
        "email": "cpe@outsight.tech",
        "time": "Thu Oct 29 18:21:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 29 18:21:12 2026"
      },
      "message": "Free side module TLS when a thread exits (#28051)\n\nWith dynamic linking, `_emscripten_tls_init` allocates a TLS block for\neach side module on every new thread, but `_emscripten_tls_free` is\nnever called. Every thread that exits leaks the TLS of every loaded side\nmodule (4 KiB per thread for a side module with a 4 KiB `thread_local`).\n\nSide modules now export `_emscripten_tls_free`, `registerTLSInit`\ncollects them, and `_emscripten_thread_exit` runs them after the\nthread\u0027s TSD destructors (so C++ `thread_local` destructors still see\ntheir data).\n\nThe new `test_pthread_dylink_tls_free` checks heap growth over 100\nthreads after `dlopen()` of such a side module; it fails on main and\npasses with this change. Over 1000 threads the heap grew by 4,108,000\nbytes before and 0 after.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---------\n\nCo-authored-by: Claude Opus 5.5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "a580618aba0865504e4b447c23889b96874a3a9f",
      "tree": "f16676dc37f9b9edf5a5c785f42d29507b7cd9fb",
      "parents": [
        "1a9f4f9456b8d2e66bfcdd2dbcf2d13a8851abd4"
      ],
      "author": {
        "name": "Ioulios P.",
        "email": "ipat@hotmail.gr",
        "time": "Thu Oct 29 16:11:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 29 16:11:21 2026"
      },
      "message": "[WasmFS] Use readwrite-unsafe access handles in the OPFS backend (#27937)\n\nThe OPFS backend used exclusive sync access handles for files opened for\nwriting and Blobs for files opened read-only, so that several tabs could\nread the same file. Reads through a Blob are slow, especially from\nseveral threads (#27134), and a file open for writing blocks every other\ntab and worker.\n\nThis change opens all files with `{mode: \u0027readwrite-unsafe\u0027}` when\nsupported by the browser, which allows several handles on the same file.\nRead-only opens now also use an access handle in that case.\n\nBrowsers without support for `mode` (Firefox and Safari currently)\naccept the option silently and return an exclusive handle, so we can\u0027t\ntell if it is supported just from the result. Instead, the first open\npasses an options object with a getter for `mode` and checks whether the\nbrowser read it. If the browser reads `mode` but rejects the value with\na `TypeError`, the backend treats it as unsupported.\n\nIf not supported, write opens use an exclusive handle and read-only\nopens use a Blob just as before.\n\nThis only affects builds with pthreads, since only those use sync access\nhandles.\n\nBehavior changes in browsers that support `mode`:\n- Several tabs or workers can open the same file for writing at the same\ntime. Previously the second open returned `EACCES`.\n- `open` with `O_RDONLY | O_TRUNC` now truncates the file as on Linux\nand in the JS FS. Previously the truncation did not happen because the\nfile was read through a Blob.\n\nAlso removes the `createSyncAccessHandle.length` check and its `{mode:\n\u0027in-place\u0027}` branch. `length` is 0 in all current browsers because the\noptions argument is optional, so that branch never ran.\n\nTests:\n- `test_wasmfs_opfs` expects the `O_RDONLY | O_TRUNC` truncation to\nsucceed in pthreads builds running in Chrome 121 or newer, and to fail\nas before otherwise.\n- New `test_wasmfs_opfs_shared` checks that WasmFS can open a file in\nevery mode while another context holds a `readwrite-unsafe` handle for\nit.\n\n**Open questions**\n\n1. Unlink and rename while a file is open read-only.\n\nBecause read-only opens now hold an access handle, OPFS refuses to\nremove or move the file while it is open. In Chromium with this change,\n`unlink` or `rename` on a file that has an open read-only fd fails with\n`EIO`. Previously this only happened for files open for writing.\n\nA related, smaller effect: a read-only open now holds a lock that blocks\ncontexts needing an exclusive handle, for example, a `truncate` on a\nfile with no open fd in another tab (which uses `createWritable`).\n\nIs this a reasonable limitation that can just be documented (this\nhappens anyway for files open for writing), or do you prefer a different\napproach?\n\n2. Should this get a ChangeLog entry? I can add something like: \"The\nWasmFS OPFS backend now uses `readwrite-unsafe` sync access handles in\npthreads builds if supported by the browser. Files can then be opened by\nseveral tabs or workers at the same time, and files opened read-only are\nread much faster from multiple threads.\"\n\nFixes #21869\nShould help with #27134"
    },
    {
      "commit": "1a9f4f9456b8d2e66bfcdd2dbcf2d13a8851abd4",
      "tree": "10f38aa6e740d7172ee0eead08ea6d410da99660",
      "parents": [
        "375378095ca1efc6adc44515e672ad92a98413d0"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Thu Oct 29 16:09:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 29 16:09:43 2026"
      },
      "message": "Update emsdk version from 7e98daff to 8bdf98b4 (#28099)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 7e98daff \u003d\u003e 8bdf98b4\n\nThe following revisions were included in this update:\n\n```\n- 8bdf98b4 Roll llvm-project from f2d853ff2f5a to d8cc92efab5e (21 revisions)\n- 8eaac1e8 Roll emscripten from 23ed4693bfcf to 375378095ca1 (1 revision)\n- 694e6991 Roll emscripten from c7391e8055c0 to 23ed4693bfcf (1 revision)\n- 3e1458da Roll v8 from 146bf1867e29 to e16f1cccf0eb (65 revisions)\n- a19614ee Roll binaryen from c117b0f52fb0 to bceec928479f (4 revisions)\n- dbb4d6b2 Roll llvm-project from 8842bbca1c07 to f2d853ff2f5a (25 revisions)\n- b47a0ee9 Roll emscripten from da7002fa9186 to c7391e8055c0 (1 revision)\n- 09a81139 Roll binaryen from 6557968a2fff to c117b0f52fb0 (3 revisions)\n- 5f2e748f Roll llvm-project from 96ab8ab33797 to 8842bbca1c07 (48 revisions)\n- 0baed85f Roll emscripten from 16a6ee719e9b to da7002fa9186 (1 revision)\n- 4f6a7247 Roll binaryen from 14fed8a1a88b to 6557968a2fff (1 revision)\n- 34d9a64b Roll llvm-project from 88c2cc8b6a2a to 96ab8ab33797 (30 revisions)\n- c29a3882 Roll llvm-project from 982197fad060 to 88c2cc8b6a2a (22 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/7e98daff..8bdf98b4\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "375378095ca1efc6adc44515e672ad92a98413d0",
      "tree": "579d0ef7363d638bd8c989a29e710ecb69f6829b",
      "parents": [
        "23ed4693bfcf227d53eb83f7cfddbb249b7a4702"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Oct 29 00:03:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 29 00:03:01 2026"
      },
      "message": "Minor cleanups in `libhtml5.js`. NFC (#28091)\n\n- Wrap overly long comments and move trailing comments onto their own\n  lines.\n- Add braces around `if` statements in `$findCanvasEventTarget` and\n  `emscripten_sample_gamepad_data`.\n- Use `Array.prototype.includes` in `$getBoundingClientRect` and\n  `$registerMouseEventCallback`.\n- Use optional chaining (`?.`) for `window.screen?.orientation` and\n  `GLctxObject?.GLctx`.\n- Simplify `emscripten_lock_orientation`,\n  `emscripten_unlock_orientation`,\n  `$setOffscreenCanvasSizeOnTargetThread`, and `$getCanvasElementSize`."
    },
    {
      "commit": "23ed4693bfcf227d53eb83f7cfddbb249b7a4702",
      "tree": "260bdf9af12fb7bb5414da1fbd4330f4c16a3240",
      "parents": [
        "c7391e8055c0f9ea56efdb6f7e01a88e5f96c10a"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Oct 28 22:32:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 22:32:52 2026"
      },
      "message": "Automate JS-to-JS library dependencies using Acorn (#27995)\n\nReplace `addImplicitDeps` and `checkDependencies` in `src/jsifier.mjs`\nwith `calculateDeps`, which uses `acorn.tokenizer` to automatically\ndetect references to JS library symbols (`$foo` and `_bar`).\n\nKeep the `__deps` mechanism in place for dependencies that static JS\ntoken scanning cannot detect (such as native Wasm/C symbols, function\ncallbacks in `__deps`, side-effect-only dependencies, and `__postset`\ndependencies).\n\nFor system libraries we emit a warning when a `__deps` entry is\nredundant with an auto-detected dependency. For user JS libraries we\nonly show this warning in `-sSTRICT` mode.\n\nPerformance cost (median of 15 runs on `test/hello_world.c`):\n- `tools/compiler.mjs` (`INCLUDE_FULL_LIBRARY\u003d0`): 178.8 ms -\u003e 185.1 ms\n(+6.3 ms, +3.5% slower)\n- `tools/compiler.mjs` (`INCLUDE_FULL_LIBRARY\u003d1`): 268.2 ms -\u003e 343.1 ms\n(+74.9 ms, +27.9% slower)\n- `tools/compiler.mjs --symbols-only`: 181.4 ms -\u003e 254.2 ms (+72.8 ms,\n+40.1% slower)\n- Full `emcc` link (`hello.o` -\u003e `out.js`, cold JS cache):\n  - `INCLUDE_FULL_LIBRARY\u003d0`: 661.7 ms -\u003e 740.8 ms (+79.1 ms, +12.0%)\n  - `INCLUDE_FULL_LIBRARY\u003d1`: 758.3 ms -\u003e 906.0 ms (+147.7 ms, +19.5%)\n- Full `emcc` link (`hello.o` -\u003e `out.js`, warm JS cache):\n  - `INCLUDE_FULL_LIBRARY\u003d0`: 271.8 ms (+0.0 ms, 0% slower)\n  - `INCLUDE_FULL_LIBRARY\u003d1`: 282.4 ms (+0.0 ms, 0% slower)\n\nBecause I\u0027m landing a few cleanup first (#27999, #28059, #28060) there\nare zero codesize changes acossiated with this PR.\n\nFixes: #19098"
    },
    {
      "commit": "c7391e8055c0f9ea56efdb6f7e01a88e5f96c10a",
      "tree": "f9966cddb84502dbfaa8c72043fda663f90b08e4",
      "parents": [
        "da7002fa9186168743b2e6c8d717b8a9af0d4a09"
      ],
      "author": {
        "name": "Yan Pujante",
        "email": "yan@pongasoft.com",
        "time": "Wed Oct 28 18:27:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 18:27:10 2026"
      },
      "message": "[contrib.glfw3] New version (new extension function) (#28096)\n\nHere are the release notes:\n\n- Implemented\n[GH#32](https://github.com/pongasoft/emscripten-glfw/issues/32)\n- Added a way to disable autofocus on mouse down\n(`emscripten::glfw3::SetFocusOnMouseDown` extension function)\n\nBackground (new in 3.5.1.20261028):\nTraditionally, on the desktop, the window manager assigns the focus to\nthe window when the mouse is clicked\nwithin its boundaries. This implementation, by default, replicates this\nbehavior by automatically focusing the\nwindow (\u003d canvas) when the mouse is clicked (as well as when a touch\nevent is received) within its boundaries.\n\nYou can disable this autofocus behavior by calling:\n\n```cpp\nauto window \u003d glfwCreateWindow(...);\nemscripten::glfw3::SetFocusOnMouseDown(window, false);\n```"
    },
    {
      "commit": "da7002fa9186168743b2e6c8d717b8a9af0d4a09",
      "tree": "19a64fa9a32bcb97762fe19b0a9af07cc0afceff",
      "parents": [
        "16a6ee719e9b9de0aff5228b8dfec4a3694cbdee"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Wed Oct 28 16:17:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 16:17:01 2026"
      },
      "message": "Update emsdk version from 2ea5112f to 7e98daff (#28095)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 2ea5112f \u003d\u003e 7e98daff\n\nThe following revisions were included in this update:\n\n```\n- 7e98daff Roll emscripten from adcdf0505245 to 16a6ee719e9b (1 revision)\n- 44618019 Roll llvm-project from eef09bcaf36e to 982197fad060 (14 revisions)\n- 6334b3da Roll emscripten from 41b034dea877 to adcdf0505245 (2 revisions)\n- 65275d6e Roll binaryen from 6a56e6c50c04 to 14fed8a1a88b (2 revisions)\n- 98ac2d0a Roll emscripten from 69bf4a4c7140 to 41b034dea877 (4 revisions)\n- 53074a83 Roll llvm-project from e42b0646bb88 to eef09bcaf36e (77 revisions)\n- 20f1c63c Roll binaryen from 5db8f59405f7 to 6a56e6c50c04 (1 revision)\n- 4607d7b4 Roll emscripten from 260bae3bbd8d to 69bf4a4c7140 (2 revisions)\n- 922f0f0a Roll v8 from 9bdd2dc06f3e to 146bf1867e29 (76 revisions)\n- e9143bfa Roll binaryen from 8b0747b57692 to 5db8f59405f7 (1 revision)\n- e207ee61 Roll emscripten from b5c75eb014af to 260bae3bbd8d (1 revision)\n- 7d6b99d7 Roll llvm-project from ac0786d82068 to e42b0646bb88 (47 revisions)\n- a9873806 Roll binaryen from b40f1eb4565b to 8b0747b57692 (1 revision)\n- ca974705 Roll llvm-project from daec6081318d to ac0786d82068 (27 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/2ea5112f..7e98daff\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "16a6ee719e9b9de0aff5228b8dfec4a3694cbdee",
      "tree": "b2b7de6f9db5cdaab93bf785a48d51cde221c903",
      "parents": [
        "adcdf0505245de1aa6ea718ca68c6a4a509107dc"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "guybedford@gmail.com",
        "time": "Wed Oct 28 02:42:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 02:42:04 2026"
      },
      "message": "Pass `sync` to `__async: \u0027auto\u0027` library functions (#28022)\n\nThis lets an `__async: \u0027auto\u0027` JS library function know whether its\ncaller can wait for a returned Promise, so one body can block where the\nstack allows it and fall back to a synchronous result (typically an\n`EAGAIN`-style error) where it doesn\u0027t.\n\nWhether the caller can wait is a per-call property: under `PTHREADS` it\ndepends on whether the body is running on behalf of a sync-proxied\npthread or directly on the main thread. `__syscall_poll` and\n`epoll_pwait` each computed this by hand from\n`PThread.currentProxiedOperationCallerThread`, and the upcoming blocking\nsocket calls need the same. So it is now passed as an argument:\n\n```js\nlookup__sig: \u0027pp\u0027,\nlookup__async: \u0027auto\u0027,\nlookup__proxy: \u0027sync\u0027,\nlookup: (name, sync) \u003d\u003e sync ? -EAGAIN : fetchSomething(name),\n```\n\n* A body whose last parameter, following those of its `__sig`, is named\n`sync` receives there whether it must complete synchronously: `false`\nunder `ASYNCIFY`/JSPI and on behalf of a sync-proxied pthread caller,\n`true` otherwise. Bodies not naming it are unchanged.\n* Naming `sync` at the wrong position (e.g. omitting unused trailing\n`__sig` parameters) is a compile error, rather than silently receiving\nanother argument.\n* An `\u0027auto\u0027` body returning a Promise without `ASYNCIFY` (on a\npthread\u0027s behalf) now has its `p`/`j` return conversion applied to the\nresolved value under wasm64, and the proxied result is converted from\nBigInt on the sync-async path too.\n* `__syscall_poll` and `epoll_pwait` take `sync` instead of computing\nit.\n* Docs are added to the existing \"Marking JS library functions as async\"\nsection, including that under `ASYNCIFY`/JSPI the caller must still be\non a stack that can suspend.\n\nTests: `jslib.test_jslib_async_auto_sync` with pointer-returning and\n`void` functions in plain, `ASYNCIFY`, JSPI and `PROXY_TO_PTHREAD`\nbuilds, wasm32 and wasm64, and `jslib.test_jslib_async_auto_sync_arity`\nfor the misplaced parameter error.\n\n_Made with AI assistance under my review_"
    },
    {
      "commit": "adcdf0505245de1aa6ea718ca68c6a4a509107dc",
      "tree": "e70fd52e0f27c10b7d6b638813816147fc51666b",
      "parents": [
        "1f359604e94480b9af9f75f5642719e733f83e0c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Oct 27 23:19:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 23:19:19 2026"
      },
      "message": "Parameterize test_emrun. NFC (#28086)\n\nSee https://github.com/emscripten-core/emscripten/pull/27970"
    },
    {
      "commit": "1f359604e94480b9af9f75f5642719e733f83e0c",
      "tree": "e4784ccd67f21822ddf8fc48e4d66da5abbff31e",
      "parents": [
        "41b034dea8776a5b30bbd039f2c316e7526b05f0"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Oct 27 23:11:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 23:11:08 2026"
      },
      "message": "Check for `__internal` dependencies after `addImplicitDeps`. NFC (#28088)\n\nMove the check for dependencies on `__internal` symbols from user\nlibraries in `src/jsifier.mjs` to run after `addImplicitDeps` so that\nimplicitly added dependencies are also checked.\n\nAlso remove `$getWasmTableEntry__internal: true` from\n`src/lib/libcore.js` (which was only set on one of the two definitions\nof `$getWasmTableEntry`), since the public `{{{ makeDynCall }}}` macro\nexpands to `getWasmTableEntry(...)` and triggers an implicit dependency\non `$getWasmTableEntry`.\n\nSplit out from #19098"
    },
    {
      "commit": "41b034dea8776a5b30bbd039f2c316e7526b05f0",
      "tree": "ef7a26382ab05471278ac9f0354c36955e899700",
      "parents": [
        "05afea506415deb3d8b7e4d365f426a6525da736"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Oct 27 23:04:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 23:04:11 2026"
      },
      "message": "[test] Check `libhtml5.js` code in `test_drop_support_for_browser`. NFC (#28089)\n\n`test_html5_core.c` tests HTML5 event/fullscreen APIs from `libhtml5.js`\nand does not use WebGL, so check for `document.webkitFullscreenEnabled`\n(from `libhtml5.js`) rather than `getContextSafariWebGL2Fixed` (from\n`libwebgl.js`).\n\nSplit out from #19098"
    },
    {
      "commit": "05afea506415deb3d8b7e4d365f426a6525da736",
      "tree": "dabad448261ed47b051aed5a2cf020e01e28e996",
      "parents": [
        "ab3c334ec83accf7ab9aa9e7c9ea43fe27bf5622"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "guybedford@gmail.com",
        "time": "Tue Oct 27 21:07:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 21:07:01 2026"
      },
      "message": "Give pipes a 64 KiB capacity (#28082)\n\nThis gives pipes Linux\u0027s 64 KiB capacity under both file systems.\nResolves #27831.\n\nPipes were unbounded: a non-blocking writer never saw `EAGAIN`, so code\nthat fills a pipe until it would block never stops, and anything that\ndrains a pipe only when a write fails with `EAGAIN` (mio\u0027s pipe-based\nwaker on `wasm32-unknown-emscripten`, which leaks one byte per wake)\nnever drains it. WasmFS also reported EOF for an empty pipe and never\n`POLLHUP`/`POLLERR`.\n\nLinux\u0027s rules, under both file systems:\n\n* A pipe holds 64 KiB. A non-blocking write to a full pipe fails with\n`EAGAIN`; a write of up to `PIPE_BUF` (4096) is all-or-nothing, a larger\none writes what fits.\n* `poll()` reports the write end writable only while a `PIPE_BUF` write\nfits, so a small write after `POLLOUT` never fails; a read that frees\nthat much room wakes writers waiting on the write end.\n* Closing the write end gives the reader EOF rather than `EAGAIN`;\nclosing the read end gives the writer `EPIPE`.\n\nA blocking writer is still accepted without bound, as before: the write\nhas no way to wait for the reader here, and the alternative is data\nloss. Holding blocking writers to the capacity where their stack can\nwait is a follow-on.\n\nFor WasmFS the capacity check sits in the write syscall (which has the\nopen file\u0027s flags), the pipe tracks each end\u0027s close, and `poll()`\nderives the pipe cases.\n\nTests: `core.test_pipe_capacity` (JS FS and WasmFS) covers\nfill-to-`EAGAIN` at exactly 64 KiB, the `PIPE_BUF` rule, `POLLOUT`\nflipping on full and after a read, the unbounded blocking writer, EOF\nand `EPIPE`."
    },
    {
      "commit": "ab3c334ec83accf7ab9aa9e7c9ea43fe27bf5622",
      "tree": "e8559395ac16cf9a0220ba4a2792f66a8878ee09",
      "parents": [
        "e9aeb39a83d0eee558d9012dc33044cf8dd4cb57"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Oct 27 20:33:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 20:33:12 2026"
      },
      "message": "Avoid duplicate JS library exports in `exportRuntimeSymbols` (#28076)\n\nWhen a JS library symbol is already exported via `__export: true`,\n`EXPORTED_FUNCTIONS`, or `EXPORT_ALL`, also listing it in\n`EXPORTED_RUNTIME_METHODS` previously caused `exportRuntimeSymbols` to\nemit a second export for the same symbol.\n\nIn default mode this emitted a redundant `Module[\u0027foo\u0027] \u003d foo;`\nassignment, while under `-sMODULARIZE\u003dinstance` it emitted a duplicate\nESM `export { foo };` statement alongside the inline `export` at the\ndeclaration site, resulting in a `SyntaxError`."
    },
    {
      "commit": "e9aeb39a83d0eee558d9012dc33044cf8dd4cb57",
      "tree": "cf2d3be8085c181546b507b9fb0ef6bedfa13d38",
      "parents": [
        "69bf4a4c7140487289436b696312b2adf91b6cdd"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Oct 27 20:01:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 20:01:15 2026"
      },
      "message": "[dylink] Restore `--whole-archive` when linking with `-sSIDE_MODULE\u003d1` (#28055)\n\nIn #25930, `-shared` was implemented by defaulting `SIDE_MODULE` to `1`\n(which implies `LINKABLE\u003d1`) and then special-casing `lld_flags` in\n`tools/building.py` to avoid `--whole-archive`. That special case had\nthe unintended regression of also disabling `--whole-archive` for\nexplicit `-sSIDE_MODULE\u003d1` builds, while still running `wasm-ld` twice\nin `phase_link` for `-shared` due to `LINKABLE\u003d1`.\n\nInstead, default `SIDE_MODULE` to `2` when `-shared` is used so\n`LINKABLE` remains disabled and `--whole-archive` is applied whenever\n`LINKABLE` is set. This restores the pre-#25930 `--whole-archive`\nbehavior for `-sSIDE_MODULE\u003d1` without enabling it for `-shared`.\n\nTo keep native linker semantics for `-shared`, avoid passing\n`--no-export-dynamic` when `-shared` is specified so default-visibility\nsymbols in object files are still exported automatically (unlike\nexplicit `-sSIDE_MODULE\u003d2`, which continues to DCE unexported symbols).\n\nSupersedes #27430.\n\nFixes: #27403"
    },
    {
      "commit": "69bf4a4c7140487289436b696312b2adf91b6cdd",
      "tree": "cde382d9ec36b5791bd4550bcde0bece352d762e",
      "parents": [
        "9c6f0661148d81fac5b98eaaebf9633e2e703d7c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Oct 27 19:33:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 19:33:15 2026"
      },
      "message": "[GL] Avoid shadowing `GLctx` in `GL.initExtensions`. NFC (#28077)\n\nRename the local `GLctx` variable in `GL.initExtensions` to `gl` so it\ndoes not shadow the top-level `$GLctx` library symbol, matching the\nexisting `var gl \u003d context.GLctx;` pattern used in\n`createOffscreenFramebuffer`, `resizeOffscreenFramebuffer`, and\n`blitOffscreenFramebuffer` in `src/lib/libwebgl.js`."
    },
    {
      "commit": "9c6f0661148d81fac5b98eaaebf9633e2e703d7c",
      "tree": "796b4632afcf56bad241e71bd6b011acd2ae0bc0",
      "parents": [
        "260bae3bbd8ddf61416676f6ca217071e7ac4e9c"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Tue Oct 27 16:21:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 16:21:15 2026"
      },
      "message": "Update emsdk version from bc3da102 to 2ea5112f (#28085)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: bc3da102 \u003d\u003e 2ea5112f\n\nThe following revisions were included in this update:\n\n```\n- 2ea5112f Roll llvm-project from 1da436a23e61 to daec6081318d (20 revisions)\n- 4a9bebd0 Roll emscripten from ccfc1247ae18 to b5c75eb014af (1 revision)\n- a59de345 Roll llvm-project from 43f7896299d7 to 1da436a23e61 (40 revisions)\n- 2ff56a3b Roll binaryen from 37186b12c695 to b40f1eb4565b (1 revision)\n- 9e859d2c Roll emscripten from e9ab98b06b40 to ccfc1247ae18 (2 revisions)\n- 4d50cb10 Roll binaryen from f1f3a483efe9 to 37186b12c695 (2 revisions)\n- fd9874d5 Roll emscripten from 3877c73e87b0 to e9ab98b06b40 (1 revision)\n- ccf70b03 Roll llvm-project from c563d27a6152 to 43f7896299d7 (87 revisions)\n- 0c1d6c6c Roll emscripten from 83fb993ea5f6 to 3877c73e87b0 (3 revisions)\n- 3b75f2fb Roll v8 from 831f844b72ac to 9bdd2dc06f3e (47 revisions)\n- 745d5e2a Roll llvm-project from 63baf7c091ce to c563d27a6152 (66 revisions)\n- 4b45257b Roll llvm-project from 8742b9f8fc18 to 63baf7c091ce (46 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/bc3da102..2ea5112f\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "260bae3bbd8ddf61416676f6ca217071e7ac4e9c",
      "tree": "cfe34d8e1e8cbca4353fc6ef9ddad622a8ba33f2",
      "parents": [
        "b5c75eb014af9be981a17ab78a8150d7056f7140"
      ],
      "author": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Tue Oct 27 15:56:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 15:56:37 2026"
      },
      "message": "[mimalloc] Disable profiling and nonessential stats (#28084)\n\nSet `MI_PROFILE\u003d0` and `MI_STATS\u003d0` to reduce code size by disabling\nprofiling and nonessential statistics.\n\nDefine `MI_NO_GETENV` in preparation for upstream mimalloc support,\nas Emscripten already does not support environment customization."
    },
    {
      "commit": "b5c75eb014af9be981a17ab78a8150d7056f7140",
      "tree": "dee64f4b65c5ecf3973948eddf4d43492ca515e6",
      "parents": [
        "ccfc1247ae18186688868dee4f850cde03f116a5"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Oct 27 01:03:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 01:03:22 2026"
      },
      "message": "[NODEFS] Simplify flagsForNodeMap. NFC (#28080)\n\nRemove unnecessary quotes and use `fs.constants` instead of the internal\n`process.binding(\u0027constants\u0027)` API, adding `fs.constants` to\n`node-externs.js` for Closure Compiler.\n\nFollowup to #28070"
    },
    {
      "commit": "ccfc1247ae18186688868dee4f850cde03f116a5",
      "tree": "867c2cc7e63f682407827b06ba9d7389e36bbf1f",
      "parents": [
        "dcfddef3022a34f58fa9f0a8d080b37ecc04498c"
      ],
      "author": {
        "name": "Ankur Dubey",
        "email": "adubey2626@gmail.com",
        "time": "Mon Oct 26 23:59:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 23:59:19 2026"
      },
      "message": "Use fs.constants in NODEFS so it works under `node --permission` (#28070)\n\n`NODEFS.staticInit` reads the fs open flags with\n`process.binding(\u0027constants\u0027)[\u0027fs\u0027]`. Under Node\u0027s permission model\n(`node --permission`, stable since 22.13 / 23.5), `process.binding`\nthrows `ERR_ACCESS_DENIED`, so any program linked with `-lnodefs.js`\ndies at startup there, even when the paths it touches are allowed.\n`process.binding` is also deprecated (DEP0111).\n\n`fs.constants` is the same object (checked on Node 20, 22 and 24:\n`process.binding(\u0027constants\u0027).fs \u003d\u003d\u003d require(\u0027fs\u0027).constants`), and `fs`\nis already loaded eagerly in `shell.js` / `shell_minimal.js` and used\nelsewhere in NODEFS, so this is a one-line swap. `fs.constants` exists\nfar below `MIN_NODE_VERSION`.\n\nFound via PGlite, which currently patches this line in its bundle:\nelectric-sql/pglite#1163, electric-sql/pglite#1164.\n\nTest: `test_fs_nodefs_permission_model` runs the existing\n`fs/test_nodefs_nofollow.c` under `--permission --allow-fs-read\u003d*\n--allow-fs-write\u003d*`, skipped on node older than 22.13.\n\nNot touched: `libsockfs_node.js` still uses `process.binding(\u0027tcp_wrap\u0027\n/ \u0027pipe_wrap\u0027 / \u0027udp_wrap\u0027)` for NODERAWSOCKETS. Those have no public\nreplacement, so that backend can\u0027t run under `--permission` either way."
    },
    {
      "commit": "dcfddef3022a34f58fa9f0a8d080b37ecc04498c",
      "tree": "31ab176e62670316886b9ab499358dacfab2258d",
      "parents": [
        "e9ab98b06b40b7be7fbec974f213c98c073f838b"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "guybedford@gmail.com",
        "time": "Mon Oct 26 22:07:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 22:07:44 2026"
      },
      "message": "Coalesce epoll listener wakes onto one pending immediate (#28075)\n\nThis coalesces the epoll listener\u0027s delivery tasks so a burst of\nreadiness edges keeps one pending `setImmediate` rather than one per\nedge. Resolves #28073.\n\n`emscripten_epoll_listener_add` scheduled a turn on every wake of the\nepoll node. On a socket receiving a continuous stream, that is one\nimmediate per incoming chunk. On hosts where `setImmediate` is a counted\ntimer that is not serviced while I/O keeps completing (workerd), those\npile up toward the host\u0027s cap before any of them run. Every turn\nre-derives readiness when it runs, so all the wakes before it are\nalready covered by the first pending one; the extra tasks are no-ops.\n\n* A wake schedules a turn only when none is pending, so at most one task\nis pending per listener.\n* The flag clears as the turn starts, so a wake during the user callback\nschedules the next turn.\n* The level-trigger re-arm after a delivery goes through the same path.\n\n```js\nit.listener \u003d ep.node.addListener(() \u003d\u003e emSetImmediate(turn));\n```\n\n```js\nfunction schedule() {\n  if (it.pending) return;\n  it.pending \u003d true;\n  emSetImmediate(turn);\n}\nit.listener \u003d ep.node.addListener(schedule);\n```\n\n`other/test_epoll_callback_coalesce` wraps `setImmediate` to count\ncalls, performs 1000 single-byte writes to a watched pipe after arming\nthe listener, and asserts that a single task was scheduled. Before this\nchange it reports 1001.\n\n_Made with AI assistance under my review_"
    },
    {
      "commit": "e9ab98b06b40b7be7fbec974f213c98c073f838b",
      "tree": "aae3516069e45da6148a7378135b9b44ba9eb5b0",
      "parents": [
        "3877c73e87b0651c4df661ed156cb95ccaed016e"
      ],
      "author": {
        "name": "Derek Schuff",
        "email": "dschuff@chromium.org",
        "time": "Mon Oct 26 19:43:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 19:43:42 2026"
      },
      "message": "[EH] Stop passing -mllvm -exception-model to wasm-ld (#28065)\n\nAfter llvm/llvm-project#232977 removed TargetOptions::ExceptionModel,\npassing -mllvm -exception-model\u003d... to wasm-ld is a no-op. All\nWebAssembly EH and SjLj passes now read the \"exception-model\" module\nflag emitted into the IR by clang at compile time."
    },
    {
      "commit": "3877c73e87b0651c4df661ed156cb95ccaed016e",
      "tree": "02dccdc6e629dd1ac1363415e4075de69f59a936",
      "parents": [
        "b6f35aa454eaf3642a21606c22a70dd9220acc3d"
      ],
      "author": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Mon Oct 26 18:35:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 18:35:06 2026"
      },
      "message": "[test] Use `do_other_test` for mimalloc options. NFC (#28074)\n\nCheck `mi_options_print()` against expected output to make option\nchanges easier to spot in mimalloc updates.\n\nAlso, backport commit microsoft/mimalloc@21a9e8e to avoid an extra\nnewline in mimalloc\u0027s stderr output."
    },
    {
      "commit": "b6f35aa454eaf3642a21606c22a70dd9220acc3d",
      "tree": "84796de9cbd8fc1647f5a2cc2ece66932c6a282b",
      "parents": [
        "1defa4725f1a637ec2874afa33b444beb59516fb"
      ],
      "author": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Mon Oct 26 16:39:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 16:39:25 2026"
      },
      "message": "Update mimalloc to 3.6.0 (#28068)"
    },
    {
      "commit": "1defa4725f1a637ec2874afa33b444beb59516fb",
      "tree": "bb6f2991077664b55c77a6c642ae6000bbe60ab4",
      "parents": [
        "83fb993ea5f6e3d5c62bc0e4e70fcd39b7fbbb1c"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Mon Oct 26 16:39:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 16:39:10 2026"
      },
      "message": "Update emsdk version from 90bbe03b to bc3da102 (#28069)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 90bbe03b \u003d\u003e bc3da102\n\nThe following revisions were included in this update:\n\n```\n- bc3da102 Roll llvm-project from b76978ff3691 to 8742b9f8fc18 (28 revisions)\n- 7d2fb1bf Roll llvm-project from 7af12b1edf38 to b76978ff3691 (27 revisions)\n- 94e95fd8 Roll emscripten from 049ff04ce3c0 to 83fb993ea5f6 (1 revision)\n- 461390a5 Roll llvm-project from 62e4899157d6 to 7af12b1edf38 (21 revisions)\n- cd06b764 Roll emscripten from cc1b638f4232 to 049ff04ce3c0 (1 revision)\n- cc0d3dc9 Roll llvm-project from 5f576704c2b7 to 62e4899157d6 (9 revisions)\n- 3a63a5d2 Roll v8 from 7a801ff6b4cf to 831f844b72ac (2 revisions)\n- 51094651 Roll llvm-project from 57f5cdfad718 to 5f576704c2b7 (10 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/90bbe03b..bc3da102\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "83fb993ea5f6e3d5c62bc0e4e70fcd39b7fbbb1c",
      "tree": "32f76d0b43650721540d69d1f0387b944e461df0",
      "parents": [
        "049ff04ce3c0f10f7f4fcde317a4da9d209212e9"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Sun Oct 25 17:36:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 17:36:30 2026"
      },
      "message": "Update emsdk version from acf87ea4 to 90bbe03b (#28067)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: acf87ea4 \u003d\u003e 90bbe03b\n\nThe following revisions were included in this update:\n\n```\n- 90bbe03b Roll llvm-project from a48ab421cf08 to 57f5cdfad718 (10 revisions)\n- 53595e20 Roll llvm-project from bfe094117ba8 to a48ab421cf08 (24 revisions)\n- 360930ac Roll llvm-project from 612b8b1661a4 to bfe094117ba8 (14 revisions)\n- 7da147fd Roll v8 from f40519251e55 to 7a801ff6b4cf (30 revisions)\n- 22e535b2 Roll llvm-project from bbbc1cb90955 to 612b8b1661a4 (15 revisions)\n- 821d6c92 Roll llvm-project from 9b2201bd0e35 to bbbc1cb90955 (21 revisions)\n- 557dad91 Roll emscripten from a67c39f8843a to cc1b638f4232 (1 revision)\n- 1b60276f Roll emscripten from 1978fec7bfe4 to a67c39f8843a (1 revision)\n- e054af81 Roll binaryen from ac62280c6a4b to f1f3a483efe9 (1 revision)\n- c69aa22a Roll llvm-project from 43d19aaf193e to 9b2201bd0e35 (51 revisions)\n- 8d454360 Roll binaryen from ed6b93e66660 to ac62280c6a4b (1 revision)\n- be0ff802 Roll emscripten from 3bd068cce395 to 1978fec7bfe4 (2 revisions)\n- 4b38ce5e Roll binaryen from 10b1b0dc815f to ed6b93e66660 (1 revision)\n- 7edb2318 Roll emscripten from d5c8b4e7d0fb to 3bd068cce395 (1 revision)\n- f16e19ea Roll llvm-project from 3fdac7de5496 to 43d19aaf193e (90 revisions)\n- d3f2bf7f Roll emscripten from 96abee148acb to d5c8b4e7d0fb (1 revision)\n- 22670c3d Roll llvm-project from 7550009a0c54 to 3fdac7de5496 (49 revisions)\n- ccc321bd Roll llvm-project from e6afa098d147 to 7550009a0c54 (32 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/acf87ea4..90bbe03b\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "049ff04ce3c0f10f7f4fcde317a4da9d209212e9",
      "tree": "35d089da09018f8dff733db24c3505c45c2f68f8",
      "parents": [
        "cc1b638f4232e5d965400042d6ead56c73d1daba"
      ],
      "author": {
        "name": "Rusty Conover",
        "email": "rusty@conover.me",
        "time": "Sun Oct 25 17:10:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 17:10:38 2026"
      },
      "message": "Avoid copying all exports in applySignatureConversions (#27996)\n\napplySignatureConversions copied the entire exports object just to wrap\nthe few functions that need pointer conversions. Instead, build an\nobject\nholding only the wrappers and give it the original exports as its\nprototype. With 40k exports this step goes from ~39 ms to ~2 ms.\n\nThis only applies when wrapping happens (MEMORY64, or MAXIMUM_MEMORY\nover\n2GB). In that case Object.keys(Module[\u0027wasmExports\u0027]) now lists only the\nwrapped exports; lookups by name, `in`, and for...in are unchanged. The\nexport-name minifier now also renames `origExports`.\n\n---------\n\nCo-authored-by: Rusty Conover \u003crusty@query.farm\u003e\nCo-authored-by: Claude Opus 5.5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "cc1b638f4232e5d965400042d6ead56c73d1daba",
      "tree": "a7a57d699393db3ca1e43b4c2fc16838edc209ed",
      "parents": [
        "a67c39f8843a7a10f2264338efaeaf5dd8a7f81b"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Sat Oct 24 00:51:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 00:51:46 2026"
      },
      "message": "Add missing direct `__deps` entries across JS libraries. NFC (#28060)\n\nAdd missing direct `__deps` declarations for JS library symbols that\npreviously relied on other callers pulling in their dependencies later\nin the dependency graph.\n\nWith `__deps` sorted alphabetically (#28059), adding these missing\ndirect edges ensures that automatically computing JS-to-JS dependencies\n(#27995) produces identical declaration ordering and zero diffs across\n`test/codesize/`.\n\nSee: #19098"
    },
    {
      "commit": "a67c39f8843a7a10f2264338efaeaf5dd8a7f81b",
      "tree": "b94c90060a92cb30bfcf11590bfc0042d69accce",
      "parents": [
        "1978fec7bfe48e30817a9ba265d5f60a24477015"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Oct 23 23:37:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 23:37:17 2026"
      },
      "message": "Sort JS library dependencies alphabetically in `jsifier.mjs`. NFC (#28059)\n\nSort string entries in `__deps` alphabetically inside `addFromLibrary`\nso that emitted JS library symbol order is deterministic and independent\nof the order in which dependencies are declared or discovered.\n\nKeep function callbacks in `__deps` after string dependencies in their\noriginal order so callbacks that reference depended-on symbols at load\ntime (such as `$GLImmediateSetup__deps` in `src/lib/libglemu.js`) still\nrun after those symbols are defined.\n\nI\u0027m landing this in preparation for #19098 which makes dependencies\nautomatic, and I want that change to be clearly NFC WRT code size."
    },
    {
      "commit": "1978fec7bfe48e30817a9ba265d5f60a24477015",
      "tree": "07ec26b4e011ab2c553d1697803241efa05c6d35",
      "parents": [
        "6583f78e43690dabb5b04eb0ec4fc98117e44488"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Oct 23 20:23:28 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 20:23:28 2026"
      },
      "message": "Improve changelog entry for #27940 (#28050)\n\nSee discussion in #27940"
    },
    {
      "commit": "6583f78e43690dabb5b04eb0ec4fc98117e44488",
      "tree": "ba66b9e8427aeeb9b83236c717fbb88cf8f0e2f4",
      "parents": [
        "3bd068cce395c6dadb589e87fd3cd9976042cb5a"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Oct 23 20:11:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 20:11:30 2026"
      },
      "message": "Calculate transitive JS library deps after `symbolHandler` in `--symbols-only` mode. NFC (#28052)\n\nPreviously, `getTransitiveDeps` was called inside `addFromLibrary` while\n`symbolHandler` was still iterating through `symbolsNeeded` and mutating\n`__deps` (such as adding `setTempRet0` for i64-returning functions\nwithout `WASM_BIGINT`).\n\nCompute `symbolDeps` in the `if (symbolsOnly)` block after\n`symbolHandler` completes so that all direct `__deps` are populated\nbefore traversing the dependency graph.\n\nSplit out from #27995."
    },
    {
      "commit": "3bd068cce395c6dadb589e87fd3cd9976042cb5a",
      "tree": "e66797cb6572852589928886e6c72c05463a6e98",
      "parents": [
        "d5c8b4e7d0fbfe5d234678a49be6b80bfe431486"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Oct 23 16:54:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 16:54:08 2026"
      },
      "message": "Pass `-dumpdir` to `clang` in compile-and-link mode (#28045)\n\nIn Clang 17+ (matching GCC 11), compiling and linking in a single\ncommand passes `-dumpdir \u003coutput\u003e-` to `clang -cc1` so that auxiliary\noutput files (such as `.dwo` from `-gsplit-dwarf` or `.json` from\n`-ftime-trace`) are named `\u003coutput\u003e-\u003cinput\u003e.\u003cext\u003e` in the current\nworking directory rather than being written to `/tmp` alongside the\ntemporary object file.\n\nPass `-dumpdir \u003ctarget\u003e-` for all non-assembly compilations in\n`phase_compile_inputs` instead of manually passing\n`-Xclang -split-dwarf-file` and `-Xclang -split-dwarf-output`."
    },
    {
      "commit": "d5c8b4e7d0fbfe5d234678a49be6b80bfe431486",
      "tree": "1c949ae22ffe0a09913e59c74049ef53bc5549fb",
      "parents": [
        "96abee148acb98030847a49bb75164bd30cad55c"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Fri Oct 23 15:29:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 15:29:40 2026"
      },
      "message": "Update emsdk version from c31f295d to acf87ea4 (#28057)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: c31f295d \u003d\u003e acf87ea4\n\nThe following revisions were included in this update:\n\n```\n- acf87ea4 Roll v8 from 6f8cd3cd5844 to f40519251e55 (52 revisions)\n- 6b459c26 Roll emscripten from 3e1c35bf296d to 96abee148acb (1 revision)\n- 33fdca25 Roll llvm-project from b4ff3fec62b7 to e6afa098d147 (50 revisions)\n- e1dca3d8 Roll emscripten from 45a6cffdbdf0 to 3e1c35bf296d (2 revisions)\n- d0ef3b46 Roll binaryen from b6720c020a0e to 10b1b0dc815f (1 revision)\n- 7bc9ab34 Roll llvm-project from 58936cb3678b to b4ff3fec62b7 (70 revisions)\n- 725ee696 Roll emscripten from e52f8cfd2b3b to 45a6cffdbdf0 (2 revisions)\n- aacbb78a Roll binaryen from 06cdc1796183 to b6720c020a0e (1 revision)\n- 92f1000d Roll llvm-project from 6519eee75a87 to 58936cb3678b (47 revisions)\n- 00d85e74 Roll llvm-project from dba80dcdcd2c to 6519eee75a87 (48 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/c31f295d..acf87ea4\n\nThe following (16) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_cxx_ctors1.json: 153124 \u003d\u003e 153107 [-17 bytes / -0.01%]\ncodesize/test_codesize_cxx_ctors2.json: 152529 \u003d\u003e 152512 [-17 bytes / -0.01%]\ncodesize/test_codesize_cxx_except.json: 197197 \u003d\u003e 197176 [-21 bytes / -0.01%]\ncodesize/test_codesize_cxx_except_wasm.json: 168588 \u003d\u003e 168551 [-37 bytes / -0.02%]\ncodesize/test_codesize_cxx_except_wasm_legacy.json: 166448 \u003d\u003e 166411 [-37 bytes / -0.02%]\ncodesize/test_codesize_cxx_lto.json: 119498 \u003d\u003e 119482 [-16 bytes / -0.01%]\ncodesize/test_codesize_cxx_mangle.json: 263447 \u003d\u003e 263426 [-21 bytes / -0.01%]\ncodesize/test_codesize_cxx_noexcept.json: 155031 \u003d\u003e 155014 [-17 bytes / -0.01%]\ncodesize/test_codesize_cxx_wasmfs.json: 180229 \u003d\u003e 180212 [-17 bytes / -0.01%]\ncodesize/test_codesize_hello_O0.json: 37812 \u003d\u003e 37808 [-4 bytes / -0.01%]\ncodesize/test_codesize_hello_dylink.json: 43214 \u003d\u003e 43214 [+0 bytes / +0.00%]\ncodesize/test_codesize_hello_dylink_all.json: 860884 \u003d\u003e 862148 [+1264 bytes / +0.15%]\ncodesize/test_minimal_runtime_code_size_audio_worklet.json: 16361 \u003d\u003e 16361 [+0 bytes / +0.00%]\ncodesize/test_minimal_runtime_code_size_random_printf_wasm.json: 10994 \u003d\u003e 10994 [+0 bytes / +0.00%]\ncodesize/test_minimal_runtime_code_size_random_printf_wasm2js.json: 17323 \u003d\u003e 17315 [-8 bytes / -0.05%]\ncodesize/test_unoptimized_code_size.json: 165159 \u003d\u003e 165147 [-12 bytes / -0.01%]\n\nAverage change: -0.00% (-0.05% - +0.15%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "96abee148acb98030847a49bb75164bd30cad55c",
      "tree": "a18335fb004c5612c73a189712cbf17293942d7a",
      "parents": [
        "3e1c35bf296dda9d50e82893dcdadedebee84c8f"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Oct 22 23:51:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 23:51:01 2026"
      },
      "message": "[test] Check LLVM and Binaryen versions when rebaselining codesize tests (#28053)\n\nWhen running `codesize` tests with `--rebaseline`, check that the active\nLLVM and Binaryen revisions match the revisions specified by\n`test/emsdk_version.txt` via `emscripten-releases`.\n\nThis should help prevent confusion when folks get a different results\nlocally to the CI"
    },
    {
      "commit": "3e1c35bf296dda9d50e82893dcdadedebee84c8f",
      "tree": "99df9992467722ce36db23e3977923ce45f7721a",
      "parents": [
        "da779b54b5e61ff9441df5c95e281f98d80a85c5"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Oct 22 23:06:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 23:06:55 2026"
      },
      "message": "Add a Best Practices section to the website. NFC (#27334)"
    },
    {
      "commit": "da779b54b5e61ff9441df5c95e281f98d80a85c5",
      "tree": "000fcf3425e7a098239581b9cedb2874f732dbc0",
      "parents": [
        "45a6cffdbdf003665c7f48072191ce5a860fd0f4"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Oct 22 22:54:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 22:54:29 2026"
      },
      "message": "Avoid emitting extra blank lines for JS library items in `jsifier.mjs` (#28044)\n\nThis change is mostly about cleaning up the code in `addFromLibrary`.\n\nPreviously, `depsText` in `src/jsifier.mjs` had two issues that caused\nextra blank lines in unoptimized JS output:\n\n1. When `addFromLibrary` was called on an already-emitted dependency, it\n   returned `undefined`. Using `.filter((x) \u003d\u003e x !\u003d \u0027\u0027)` did not filter\n   out `undefined`, causing `.join(\u0027\\n\u0027)` to emit an empty line for each\n   already-emitted dependency.\n2. Because `deps` is always an array (`??\u003d []`), the `deps ? ... : \u0027\u0027`\n   ternary always took the truthy branch and appended `\u0027\\n\u0027`, even when\n   no dependencies were emitted. This gave every `addFromLibrary` return\n   value a leading `\u0027\\n\u0027`.\n\nUse a `joinChunks` helper (`chunks.filter(Boolean).join(\u0027\\n\u0027)`) to join\nnon-empty dependency, doc comment, and content strings without extra\nnewlines.\n\nAlso update `indentify` in `src/parseTools.mjs` to indent the first line\nof non-empty strings, which previously only happened because of the\naccidental leading `\u0027\\n\u0027` on each item."
    },
    {
      "commit": "45a6cffdbdf003665c7f48072191ce5a860fd0f4",
      "tree": "10c36bbc63f9811ad583fa898b0cdbdb8d5c0958",
      "parents": [
        "1c31a613dc4dfe08c8c13559d4e5e8a1a64c10c5"
      ],
      "author": {
        "name": "JesusFileto",
        "email": "91223391+JesusFileto@users.noreply.github.com",
        "time": "Thu Oct 22 17:05:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 17:05:50 2026"
      },
      "message": "Map code without a DWARF line to no location in wasm source maps (#28033)\n\n`wasm-sourcemap.py` drops DWARF rows with line 0, which LLVM uses for\ncode that does not come from a single source line, for example when it\nmerges several calls to `abort()` into one. The previous mapping then\ncovers that code too, so it is reported at an unrelated line.\n\nThis writes an entry with only the wasm offset at these rows instead. An\nentry without a source location ends the previous mapping, so the code\ngets no location. Binaryen does the same when it writes source maps\n(WebAssembly/binaryen#5906): one such entry for each run of code without\na location, and none before the first mapping. Binaryen and emsymbolizer\nalready read these entries. When this tool was written, Binaryen could\nnot, which is likely why the rows were dropped.\n\nEach entry adds about two bytes. The new test checks that code at line 0\nmaps to no location and that consecutive line 0 rows share one entry."
    },
    {
      "commit": "1c31a613dc4dfe08c8c13559d4e5e8a1a64c10c5",
      "tree": "013fcd34b67aadb1f11c57ae8a9c09813b70cfdf",
      "parents": [
        "e52f8cfd2b3bf420ac35a2b47496cc775ad26a1d"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Thu Oct 22 16:53:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 16:53:21 2026"
      },
      "message": "Update emsdk version from 55035bb0 to c31f295d (#28046)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 55035bb0 \u003d\u003e c31f295d\n\nThe following revisions were included in this update:\n\n```\n- c31f295d Roll llvm-project from 784eb2c62570 to dba80dcdcd2c (23 revisions)\n- de4e3a86 Roll emscripten from 11093ed456a6 to e52f8cfd2b3b (1 revision)\n- ff178b59 Roll v8 from 06409073dd39 to 6f8cd3cd5844 (61 revisions)\n- 15d6793c Roll binaryen from 4c6b554ecc1f to 06cdc1796183 (1 revision)\n- 7d663296 Roll llvm-project from 0e42735b0df2 to 784eb2c62570 (86 revisions)\n- c41ef7b4 Roll emscripten from 68340518704b to 11093ed456a6 (4 revisions)\n- 38aa88fb Roll binaryen from 6e5257bd5360 to 4c6b554ecc1f (1 revision)\n- 2af2e636 Roll emscripten from 278ba27f57e2 to 68340518704b (3 revisions)\n- 0a874280 Roll binaryen from a631c1445ced to 6e5257bd5360 (16 revisions)\n- bc7ca41b Roll llvm-project from afee4adae612 to 0e42735b0df2 (123 revisions)\n- 0581e27c Roll llvm-project from deae56302506 to afee4adae612 (57 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/55035bb0..c31f295d\n\nThe following (12) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_cxx_ctors1.json: 153116 \u003d\u003e 153124 [+8 bytes / +0.01%]\ncodesize/test_codesize_cxx_ctors2.json: 152521 \u003d\u003e 152529 [+8 bytes / +0.01%]\ncodesize/test_codesize_cxx_except.json: 197189 \u003d\u003e 197197 [+8 bytes / +0.00%]\ncodesize/test_codesize_cxx_except_wasm.json: 168580 \u003d\u003e 168588 [+8 bytes / +0.00%]\ncodesize/test_codesize_cxx_except_wasm_legacy.json: 166440 \u003d\u003e 166448 [+8 bytes / +0.00%]\ncodesize/test_codesize_cxx_lto.json: 119490 \u003d\u003e 119498 [+8 bytes / +0.01%]\ncodesize/test_codesize_cxx_mangle.json: 263439 \u003d\u003e 263447 [+8 bytes / +0.00%]\ncodesize/test_codesize_cxx_noexcept.json: 155023 \u003d\u003e 155031 [+8 bytes / +0.01%]\ncodesize/test_codesize_cxx_wasmfs.json: 180221 \u003d\u003e 180229 [+8 bytes / +0.00%]\ncodesize/test_codesize_hello_dylink_all.json: 860857 \u003d\u003e 860884 [+27 bytes / +0.00%]\ncodesize/test_codesize_minimal_pthreads.json: 26028 \u003d\u003e 26028 [+0 bytes / +0.00%]\ncodesize/test_codesize_minimal_pthreads_memgrowth.json: 26487 \u003d\u003e 26487 [+0 bytes / +0.00%]\n\nAverage change: +0.00% (+0.00% - +0.01%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "e52f8cfd2b3bf420ac35a2b47496cc775ad26a1d",
      "tree": "4dd95ca6e66dbf5074b46f74bb88a92957828d29",
      "parents": [
        "11093ed456a625e66596c15778f35e391e0a3a41"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Oct 22 03:07:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 03:07:17 2026"
      },
      "message": "Warn when `-x` is specified after the last input file (#28042)\n\nMatch `clang` by emitting an `unused-command-line-argument` warning when\n`-x` is not followed by any input file on the command line.\n\nAlso fix `RunnerCore.build` in `test/common.py` to pass `all_cflags`\nbefore the input filename so that flags like `-x c++` (as used in\n`other.test_xlocale`) precede the source file."
    },
    {
      "commit": "11093ed456a625e66596c15778f35e391e0a3a41",
      "tree": "b96c5735ab5a79c39d5c4c020f5a036888eb6aef",
      "parents": [
        "d9cd75bf7799cc4f85be65c5e843f840bd3ce817"
      ],
      "author": {
        "name": "Ioulios P.",
        "email": "ipat@hotmail.gr",
        "time": "Wed Oct 21 22:18:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 22:18:40 2026"
      },
      "message": "[WasmFS] Return truncation errors from open with O_TRUNC (#28039)\n\n`doOpen` ignored the result of `setSize(0)` for `O_TRUNC`, so `open`\ncould succeed without truncating the file. Linux and the old FS both\nfail the open when the truncation fails (see `FS.truncate` inside\n`FS.open`), and both skip the truncation for devices and FIFOs.\n\nChanges:\n- `doOpen` returns the error from `setSize`, closing the backend file\nfirst.\n- Truncation is skipped for non-regular files.\n- Fixed a small leak where the `EISDIR` and `EACCES` checks for\n`O_TRUNC` returned without closing the backend file. Now the checks are\ndone before the file is opened.\n- Node backend: when a file was only open read-only, `setSize` called\n`ftruncate` on the read-only host fd, which failed with `EINVAL`. This\ncaused two issues:\n- `open(O_RDONLY | O_TRUNC)` succeeded but left the file unchanged (the\nerror was ignored).\n- `truncate(path)` failed with `EINVAL` if the file was already open\nread-only.\n \n  `setSize` now truncates by path when the host fd is read-only.\n\nTests:\n- `wasmfs_opfs.c`: opening a blob-backed file with `O_RDONLY | O_TRUNC`\nnow fails with `EIO`.\n- `wasmfs_open.c`: opening `/dev/null` with `O_TRUNC` succeeds.\n- `truncate.c`: `truncate(path)` on a file that is open read-only\nsucceeds. I also changed `assert(f)` to `assert(f \u003e\u003d 0)` for the\n`open()` fds, since `-1` would pass `assert(f)`.\n\n`ftruncate()` on an `O_RDONLY` fd still succeeds on WasmFS (Linux\nreturns `EINVAL`). I can fix that separately in `__syscall_ftruncate64`.\n\nSplit out from #27937"
    },
    {
      "commit": "d9cd75bf7799cc4f85be65c5e843f840bd3ce817",
      "tree": "1304d0afc2f9f92be766319d1afcc03bf3578178",
      "parents": [
        "d202bda92e971f7788e6022349f2448de283cdeb"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Oct 21 22:09:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 22:09:48 2026"
      },
      "message": "Pass `-target` when running internal `clang` helper queries (#28038)\n\nWhen `-target` is omitted and `clang` was built without overriding\n`LLVM_DEFAULT_TARGET_TRIPLE`, the `clang` driver defaults to the host\ntarget triple and initializes the host toolchain (such as GCC\ninstallation detection on Linux). This performs unnecessary host\nfilesystem probing and can emit driver warnings such as\n`-Wgcc-install-dir-libstdcxx`. At least since\nhttps://github.com/llvm/llvm-project/pull/154487.\n\nMove `get_target_flags()` to `tools/shared.py` so it can be used across\nall internal `clang` invocations, and use it in `PASSTHROUGH_FLAGS`\nhandling in `emcc.py` instead of passing the full `get_cflags()`.\n\nFixes: #28036"
    },
    {
      "commit": "d202bda92e971f7788e6022349f2448de283cdeb",
      "tree": "20d4f777b623e122d955baba7b98babf4b5b26d1",
      "parents": [
        "be0bb9578c2f4ccaf7155512d0c3211cbeefbf81"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Oct 21 20:42:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 20:42:48 2026"
      },
      "message": "Fix false-positive `$SYSCALLS` dependency in `wrapSyscallFunction`. NFC (#28034)\n\nIn `src/lib/libcore.js`, check `t.includes(\u0027SYSCALLS.\u0027)` instead of\n`t.includes(\u0027SYSCALLS\u0027)` in `wrapSyscallFunction` so comments and\nstrings mentioning `SYSCALLS_REQUIRE_FILESYSTEM` (such as in `fd_write`)\ndo not pull in `$SYSCALLS` and `$UTF8ToString` when\n`SYSCALLS_REQUIRE_FILESYSTEM\u003d0`.\n\nSplit out from #27999"
    },
    {
      "commit": "be0bb9578c2f4ccaf7155512d0c3211cbeefbf81",
      "tree": "6d003e60901fe0c7fbde1de672febcee52365a78",
      "parents": [
        "68340518704b01c74c557bdcfaae90bdb2343e7d"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Oct 21 20:41:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 20:41:16 2026"
      },
      "message": "[GL] Fix unused and overly-broad `__deps` entries in WebGL JS libraries. NFC (#28037)\n\nAlign the preprocessor guards on `__deps` arrays with the actual call\nsites in the corresponding function bodies so symbols are only pulled in\nwhen referenced:\n\n- In `src/lib/libwebgl.js`:\n- Guard `\u0027$webglBufferSubData\u0027` in `$GL__deps` and\n`glDrawElements__deps` with `#if FULL_ES2`. In `$GL`,\n`webglBufferSubData` is only called from\n`preDrawHandleClientVertexAttribBindings` (which is guarded by `#if\nFULL_ES2`, not `LEGACY_GL_EMULATION`). Similarly, `glDrawElements` only\ncalls `webglBufferSubData` inside its `#if FULL_ES2` client-side index\nbuffer block.\n- Guard `\u0027$heapObjectForWebGLType\u0027` and `\u0027$toTypedArrayIndex\u0027` in\n`glTexImage2D__deps`, `glTexSubImage2D__deps`, and `glReadPixels__deps`\nwith `#if WEBGL_USE_GARBAGE_FREE_APIS` instead of `#if MAX_WEBGL_VERSION\n\u003e\u003d 2`. Those functions only call `heapObjectForWebGLType` and\n`toTypedArrayIndex` directly inside `#if WEBGL_USE_GARBAGE_FREE_APIS`\nblocks; otherwise they delegate to `emscriptenWebGLGetTexPixelData`\n(which declares its own `__deps`).\n- Guard `$webglGetProgramUniformLocation__deps` with `#if\nGL_EXPLICIT_UNIFORM_LOCATION`, matching the sole call to\n`webglPrepareUniformLocationsBeforeFirstUse` inside\n`$webglGetProgramUniformLocation`.\n- In `src/lib/libwebgl2.js`:\n- Guard `\u0027$toTypedArrayIndex\u0027` in `glTexImage3D__deps` and\n`glTexSubImage3D__deps` with `#if WEBGL_USE_GARBAGE_FREE_APIS`, since\n`toTypedArrayIndex` is only called in that branch (the `#else` branch\ndelegates to `emscriptenWebGLGetTexPixelData`).\n- Remove `glGetVertexAttribIuiv__deps`. `glGetVertexAttribIuiv` is a\nstring alias for `\u0027glGetVertexAttribIiv\u0027`, which already declares\n`glGetVertexAttribIiv__deps: [\u0027$emscriptenWebGLGetVertexAttrib\u0027]`.\n\nSplit out from #27999"
    },
    {
      "commit": "68340518704b01c74c557bdcfaae90bdb2343e7d",
      "tree": "1439ed62024408b1aa7ce1da69ee797b65e86e7b",
      "parents": [
        "fb940cae56a1c77366eab0bd8ea988b93937c1cd"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Oct 21 19:55:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 19:55:30 2026"
      },
      "message": "Fix unused and overly-broad `__deps` entries in JS libraries. NFC (#27999)\n\n- In `src/lib/libcore.js`, check `t.includes(\u0027SYSCALLS.\u0027)` instead of\n`t.includes(\u0027SYSCALLS\u0027)` in `wrapSyscallFunction` so comments and\nstrings mentioning `SYSCALLS_REQUIRE_FILESYSTEM` (such as in `fd_write`)\ndo not pull in `$SYSCALLS` and `$UTF8ToString` when\n`SYSCALLS_REQUIRE_FILESYSTEM\u003d0`.\n- In `src/lib/libpthread.js`, guard `\u0027$addOnPreRun\u0027` in `$PThread__deps`\nwith `#if !MINIMAL_RUNTIME \u0026\u0026 PTHREAD_POOL_SIZE`.\n- Guard or remove other unused and overly-broad `__deps` entries across\n`src/lib/*.js` (`libasync.js`, `libbrowser.js`, `libdylink.js`,\n`libemval.js`, `libfetch.js`, `libfs.js`, `libglemu.js`, `libglew.js`,\n`libglut.js`, `libhtml5.js`, `libnoderawfs.js`, `libsdl.js`,\n`libsockfs_node.js`, `libwasmfs.js`, `libwebgl.js`, `libwebgl2.js`).\n\nSplit out from #27995"
    },
    {
      "commit": "fb940cae56a1c77366eab0bd8ea988b93937c1cd",
      "tree": "02a2a0cb3ef742d1999fc5a30998c547ab9d5bbe",
      "parents": [
        "7ce153561c94927741542a8d590293ed622984d2"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Oct 21 19:15:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 19:15:25 2026"
      },
      "message": "[test] Fix flake in `test_dlopen_binary_not_retained` (#28041)\n\nIn V8, `--concurrent-array-buffer-sweeping` is enabled by default, so a\nsingle synchronous `gc()` call spawns a background `SweepingJob` and\nreturns before `ArrayBufferSweeper::FinalizeAndDelete` frees dead\n`ArrayBuffer` backing stores and updates\n`process.memoryUsage().arrayBuffers`. Under CPU contention on CI bots,\nthe main thread can read `process.memoryUsage().arrayBuffers` before the\nbackground sweep job completes.\n\nCall `gc()` twice before each measurement so that the start of the\nsecond `gc()` (`ArrayBufferSweeper::EnsureFinished()`) waits for the\nfirst `gc()`\u0027s background sweep job to finish.\n\nSee: #28002"
    },
    {
      "commit": "7ce153561c94927741542a8d590293ed622984d2",
      "tree": "4c593ea5dccdfda6d270114dfda2744756779106",
      "parents": [
        "278ba27f57e28053748b9c844c0f180f71643ffb"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Wed Oct 21 17:37:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 17:37:42 2026"
      },
      "message": "Update emsdk version from eb132757 to 55035bb0 (#28040)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: eb132757 \u003d\u003e 55035bb0\n\nThe following revisions were included in this update:\n\n```\n- 55035bb0 Roll emscripten from 0306168d03b1 to 278ba27f57e2 (4 revisions)\n- 43898170 Roll v8 from 22c424141bb9 to 06409073dd39 (105 revisions)\n- 3d1edc77 Roll llvm-project from 5f47feeedda0 to deae56302506 (554 revisions)\n- 10b93359 Roll emscripten from 5f63ff2e370d to 0306168d03b1 (17 revisions)\n- f3bb79a9 Set EMTEST_LACKS_NATIVE_CLANG on linux too\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/eb132757..55035bb0\n\nThe following (3) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_cxx_except.json: 199218 \u003d\u003e 197189 [-2029 bytes / -1.02%]\ncodesize/test_codesize_cxx_lto.json: 119507 \u003d\u003e 119490 [-17 bytes / -0.01%]\ncodesize/test_codesize_cxx_mangle.json: 265548 \u003d\u003e 263439 [-2109 bytes / -0.79%]\n\nAverage change: -0.61% (-1.02% - -0.01%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "278ba27f57e28053748b9c844c0f180f71643ffb",
      "tree": "412f9c3d664f97b1f3feb9b3e49184f4a400270e",
      "parents": [
        "fed1eca0f5df6611e6d982d8ea56f1f976bfd499"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Tue Oct 20 23:48:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 23:48:27 2026"
      },
      "message": "Replace issue numbers with PR numbers in ChangeLog (#28030)\n\nThis replaces issue numbers cited in ChangeLog with the corresponding PR\nnumbers (or remove redundant issue numbers when cited alongside the PR\nnumber).\n\nGemini-generated and human-verified."
    },
    {
      "commit": "fed1eca0f5df6611e6d982d8ea56f1f976bfd499",
      "tree": "364db07e1ada2a02a97d4944b4d448df3e453a8d",
      "parents": [
        "b106347d58933c4566b39343f0d43c47f168424c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Oct 20 22:31:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 22:31:07 2026"
      },
      "message": "Handle `DEPS.tagged-release` in `sync_deps.py` (#28031)\n\nWhen a release candidate commit in `emscripten-releases` modifies\n`DEPS.tagged-release`, the waterfall builds that revision using\n`DEPS.tagged-release` (which may be branched from an older revision)\nrather than `DEPS`.\n\nTeach `tools/maint/sync_deps.py` to fetch `DEPS.tagged-release` when\nthe target `emscripten-releases` revision modifies that file, matching\nwhat the corresponding prebuilt `emsdk` archive was built from.\n\nThis is needed because we actually did sync to tagged release in #28031."
    },
    {
      "commit": "b106347d58933c4566b39343f0d43c47f168424c",
      "tree": "222312602e1a1991167e790e7ab0d0feb6718172",
      "parents": [
        "d7642b5b97cfc22960170c603c2ad8f3bbbce9c4"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Tue Oct 20 22:23:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 22:23:15 2026"
      },
      "message": "Update libunwind from LLVM 22.1.8 to 23.1.3 (#28014)\n\nThis updates libunwind from 22.1.8 to LLVM 23.1.3:\nhttps://github.com/llvm/llvm-project/releases/tag/llvmorg-23.1.3"
    },
    {
      "commit": "d7642b5b97cfc22960170c603c2ad8f3bbbce9c4",
      "tree": "89111bc28de5f2941fcb3b5e013872d88a66e922",
      "parents": [
        "0306168d03b125e8211a7d8b86138ef2bf0922f8"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Oct 20 21:50:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 21:50:07 2026"
      },
      "message": "Emit JS library aliases after non-aliases (#28032)\n\nWhen a JS library alias target (e.g. `foo`) is visited first and\ntransitively depends on its own alias (e.g. `foo_alias: \u0027foo\u0027`),\n`addedLibraryItems[\u0027foo\u0027]` is marked as visited before `var _foo \u003d ...`\nis emitted. Emitting `var _foo_alias \u003d _foo;` inline during dependency\ntraversal causes it to appear before `var _foo \u003d ...`, leaving\n`_foo_alias` initialized to `undefined` for arrow functions and\nnon-hoisted values.\n\nCollect JS library alias assignments in `libraryAliases` and emit them\nafter `libraryItems` (and before `postSets`) so all target symbols are\ndefined before any alias assignment runs.\n\nSplit out from #27995 where this issue was first spotted."
    },
    {
      "commit": "0306168d03b125e8211a7d8b86138ef2bf0922f8",
      "tree": "252be740c8eb65a9a75cacc40e36d0117e510f18",
      "parents": [
        "97370e8912ffaa8a8afed7ea27f105040dbf6846"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Oct 20 19:20:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 19:20:48 2026"
      },
      "message": "[GL] Prefix internal WebGL functions with an underscore (#27998)\n\nPrefix internal WebGL helper functions (`_emscripten_webgl_do_*`,\n`_emscripten_webgl_make_context_current_calling_thread`, and\n`_emscripten_webgl_create_context_proxied`) with a leading underscore to\nmake it clear that they are internal symbols."
    },
    {
      "commit": "97370e8912ffaa8a8afed7ea27f105040dbf6846",
      "tree": "38bb8f6b6efd460b6cd4d0c4f236c7a9a74fb044",
      "parents": [
        "119421b0d9452bc6ac69bb342a569f53b628c4a8"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Oct 20 18:46:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 18:46:39 2026"
      },
      "message": "Use `codePointAt` in `lengthBytesUTF8` to match `stringToUTF8Array` (#28009)\n\nIn #24356, `stringToUTF8Array` was updated to use `str.codePointAt(i)`\ninstead of `str.charCodeAt(i)`, causing lone surrogates to be encoded as\n3 bytes without skipping the following code unit. `lengthBytesUTF8` was\nnot updated, so it still counted lone surrogates as 4 bytes and skipped\nthe next code unit.\n\nUpdate `lengthBytesUTF8` to also iterate using `str.codePointAt(i)` so\nthat `lengthBytesUTF8` and `stringToUTF8Array` always agree, while also\nsaving a few bytes of JS code size.\n\nFixes: #28008"
    },
    {
      "commit": "119421b0d9452bc6ac69bb342a569f53b628c4a8",
      "tree": "d52dadef350fefd55e65849a2192f42781006f23",
      "parents": [
        "429128c5ba0e5635da35d87347ac0d9debf9072c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Oct 20 17:13:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 17:13:00 2026"
      },
      "message": "[dylink] Refactor `loadWebAssemblyModule` to avoid retaining wasm bytes. NFC (#28021)\n\nSplit `instantiateModule`, `addEmAsm`, and `addEmJs` out of\n`loadWebAssemblyModule` and replace the async IIFE with `.then()` so\nthat long-lived import stub closures do not capture and retain the side\nmodule\u0027s `binary` buffer in their shared closure context.\n\nThis also ends up saving a few bytes of code size which is nice.\n\nSee: #28002"
    },
    {
      "commit": "429128c5ba0e5635da35d87347ac0d9debf9072c",
      "tree": "251289098a1210a15cb77ce3eacc84d5f12826ec",
      "parents": [
        "767910656d51fa0a2582784e305ebab5231a0766"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Tue Oct 20 15:59:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 15:59:13 2026"
      },
      "message": "Update emsdk version from ee1f7ce8 to eb132757 (#28027)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: ee1f7ce8 \u003d\u003e eb132757\n\nThe following revisions were included in this update:\n\n```\n- eb132757 Version 6.0.13 RC\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/ee1f7ce8..eb132757\n\nThe following (2) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_cxx_lto.json: 119499 \u003d\u003e 119516 [+17 bytes / +0.01%]\ncodesize/test_codesize_cxx_mangle.json: 265550 \u003d\u003e 265557 [+7 bytes / +0.00%]\n\nAverage change: +0.01% (+0.00% - +0.01%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "767910656d51fa0a2582784e305ebab5231a0766",
      "tree": "fbf72365c80968620a9f0f631319d6cf88b245d3",
      "parents": [
        "d96ef72b34829eb04539a00dce35959639879f87"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Tue Oct 20 15:43:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 15:43:24 2026"
      },
      "message": "Fix erroneous PR links and formatting in ChangeLog (#28025)\n\nThese include\n- Typos in PR numbers\n- Missing PR numbers (like `(#)` or `()`)\n- Missing `#` or closing `)` in PR/issue references\n- Missing a follow-up PR when two PRs comprise a single ChangeLog entry\n- Copy-paste mistakes (mistakenly copying a number from the line above)\n- Closed/unmerged PRs superseded by another PR, or split-out PRs. e.g.,\nyou start a PR and close it and reimplemented it in another PR, but the\nChangeLog points to the old PR. Also you start a PR and split-out the\nchange that\u0027s in ChangeLog into another smaller PR but the ChangeLog\nstil points to the old PR.\n\nGemini-generated and manually verified."
    },
    {
      "commit": "d96ef72b34829eb04539a00dce35959639879f87",
      "tree": "cfca10b882f9c7e6bdf86a0840039fe8c3f1a2b0",
      "parents": [
        "01ec0885dead7e56b757252927d38210218a7e34"
      ],
      "author": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Tue Oct 20 15:37:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 15:37:27 2026"
      },
      "message": "Update mimalloc to 3.5.3 (#28026)"
    },
    {
      "commit": "01ec0885dead7e56b757252927d38210218a7e34",
      "tree": "35e27296066760ff6ba0299e70fa62550cec4ef0",
      "parents": [
        "8dbda46632d4ea7f712c8314a4626c650ccc82b3"
      ],
      "author": {
        "name": "arsnyder16",
        "email": "asnyder@minitab.com",
        "time": "Tue Oct 20 15:32:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 15:32:51 2026"
      },
      "message": "Re-enable test_fcoverage_mapping (#28019)\n\nRe-enable `test_fcoverage_mapping` now that #28011 has updated\ncompiler-rt to LLVM 23.1.3, resolving the profile-format incompatibility\nthat required disabling it.\n\nThis restores regression coverage for profile generation, merging with\n`llvm-profdata`, and coverage reporting with `llvm-cov`."
    },
    {
      "commit": "8dbda46632d4ea7f712c8314a4626c650ccc82b3",
      "tree": "2254168795985aa0940e47d34489b79bc45fd850",
      "parents": [
        "283d1b16a253625d3f9b2af778bce7a5bcdaf0d2"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Oct 20 01:00:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 01:00:45 2026"
      },
      "message": "Remove `--no-test-only-unsafe` from d8 flags. NFC (#28020)\n\nSee https://github.com/GoogleChromeLabs/jsvu/issues/178"
    },
    {
      "commit": "283d1b16a253625d3f9b2af778bce7a5bcdaf0d2",
      "tree": "d7c9e6f03ea409f90736b01cba15fef41edc04ba",
      "parents": [
        "ade908a9804890185419af5ce6ad0db805d136b7"
      ],
      "author": {
        "name": "Rusty Conover",
        "email": "rusty@conover.me",
        "time": "Tue Oct 20 00:16:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 00:16:32 2026"
      },
      "message": "Don\u0027t keep side-module wasm bytes alive after dlopen (#28002)\n\nIn the synchronous dlopen path, the side module\u0027s bytes stayed reachable\nafter compilation: the lazy import stubs created by proxyHandler share\nloadWebAssemblyModule\u0027s scope, so they kept `binary` alive for the life\nof the program. Drop the reference once the module is compiled, as the\nasync path already does.\n\nLoading a 26 MB side module previously retained all 26 MB."
    },
    {
      "commit": "ade908a9804890185419af5ce6ad0db805d136b7",
      "tree": "d8cdf4673f77472700f495f20527fa7767a960ef",
      "parents": [
        "3de6b9628b3deb4be008063c588892ed9ab607b6"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Mon Oct 19 19:57:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 19:57:31 2026"
      },
      "message": "Mark 6.0.13 as released (#28018)\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "3de6b9628b3deb4be008063c588892ed9ab607b6",
      "tree": "ba888b4030beb91c7ded770fc3bfeba1dd87d0d8",
      "parents": [
        "f302ee7b78fca634540ec5184fa0c28d01d10528"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Mon Oct 19 19:53:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 19:53:33 2026"
      },
      "message": "Update compiler-rt from LLVM 22.1.8 to 23.1.3 (#28011)\n\nThis updates compiler-rt from 22.1.8 to LLVM 23.1.3:\nhttps://github.com/llvm/llvm-project/releases/tag/llvmorg-23.1.3\n\nAdditional changes:\n- Exclude profiling runtime files from build:\nhttps://github.com/emscripten-core/emscripten/pull/28011/commits/2242caed655a4834da79fef13078c17c903f7595\nThis excludes `InstrProfilingPlatformROCm.cpp` and\n`InstrProfilingPlatformROCmHSA.cpp`. LLVM 23 builds these only as part\nof its separate opt-in `profile_rocm` runtime."
    },
    {
      "commit": "f302ee7b78fca634540ec5184fa0c28d01d10528",
      "tree": "c20ec3486c40798ab975a457abe68f52506ddd96",
      "parents": [
        "98895f5e53f7b327d2e887b5d223d58f120a5a66"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Oct 19 19:31:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 19:31:29 2026"
      },
      "message": "Add config file for Gemini Code Assist. NFC (#28017)\n\nThis was mostly just copied from the one in binaryen.\n\nSee https://github.com/WebAssembly/binaryen/pull/9273"
    },
    {
      "commit": "98895f5e53f7b327d2e887b5d223d58f120a5a66",
      "tree": "6b6625310018327660530a30b756ef0232c100dc",
      "parents": [
        "305a79c5447867b05b2c2bf3849fc4a5bd2f6453"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Oct 19 17:09:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 17:09:18 2026"
      },
      "message": "Mark test_wasm_worker_futex_wait_pthreads as flaky. NFC (#28003)\n\nSee test_wasm_worker_futex_wait_pthreads"
    },
    {
      "commit": "305a79c5447867b05b2c2bf3849fc4a5bd2f6453",
      "tree": "f993ac49268bb29cd4dff3048637782166489085",
      "parents": [
        "30bbb45939d0136eae1637dd17146cc02ee1658f"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Oct 19 17:07:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 17:07:07 2026"
      },
      "message": "[test] Avoid relying on NaN sign bit in `test_em_asm.cpp`. NFC (#28004)\n\nThe first two `FUNC` calls in `TEST()` lacked a `return` statement,\ncausing the JS snippet to return `undefined`. When invoked via\n`EM_ASM_DOUBLE`, JS `ToNumber(undefined)` produces `NaN`, and formatting\nit with `%f` in musl depends on the `NaN` sign bit (`nan` vs `-nan`).\n\nStarting in V8 14.8 (`v8_enable_undefined_double`), V8 represents\n`undefined` in double arrays using a `NaN` bit pattern with the sign bit\nset (`0xfff6fffffff6ffff`), which causes `printf(\"%f\", ...)` to output\n`-nan` instead of `nan`.\n\nReturn `0` explicitly in those two `FUNC` calls so the test does not\ndepend on the engine\u0027s `NaN` bit pattern for `undefined`.\n\nFixes: #27984"
    },
    {
      "commit": "30bbb45939d0136eae1637dd17146cc02ee1658f",
      "tree": "c4d9f54038790c4663a1f6941ab438d7fec145a6",
      "parents": [
        "8f9f6a400f20225d840b224376733df963afba6c"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Mon Oct 19 05:25:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 05:25:27 2026"
      },
      "message": "Update emsdk version from df22a5e4 to ee1f7ce8 (#28005)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: df22a5e4 \u003d\u003e ee1f7ce8\n\nThe following revisions were included in this update:\n\n```\n- ee1f7ce8 Roll emscripten from e13ee988ce3d to 5f63ff2e370d (2 revisions)\n- 54e4a102 Roll llvm-project from 3b4070919092 to 5f47feeedda0 (14 revisions)\n- b18bfbc3 Roll llvm-project from 83ee07799c34 to 3b4070919092 (15 revisions)\n- 4556be0c Roll llvm-project from 53b8cb0d03a1 to 83ee07799c34 (41 revisions)\n- 7649fbae Roll binaryen from c8a002dde872 to a631c1445ced (2 revisions)\n- 15a00b68 Roll emscripten from fb115aaf2251 to e13ee988ce3d (2 revisions)\n- 29e87c9d Roll v8 from 18101f3f5f7b to 22c424141bb9 (57 revisions)\n- 282806ac Roll binaryen from b459ff822321 to c8a002dde872 (1 revision)\n- 890311da Roll llvm-project from e924218b76d8 to 53b8cb0d03a1 (71 revisions)\n- c651455a Roll emscripten from becb298488ae to fb115aaf2251 (1 revision)\n- 22e91f27 Roll binaryen from 29765863a603 to b459ff822321 (1 revision)\n- d2cd9adb Roll emscripten from 84a0bde0f29d to becb298488ae (1 revision)\n- 7c5cb3f3 Roll llvm-project from b289978d1e13 to e924218b76d8 (65 revisions)\n- baa45682 Roll llvm-project from 424c73a402df to b289978d1e13 (32 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/df22a5e4..ee1f7ce8\n\nThe following (2) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_cxx_lto.json: 119516 \u003d\u003e 119499 [-17 bytes / -0.01%]\ncodesize/test_codesize_cxx_mangle.json: 265557 \u003d\u003e 265550 [-7 bytes / -0.00%]\n\nAverage change: -0.01% (-0.01% - -0.00%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "8f9f6a400f20225d840b224376733df963afba6c",
      "tree": "ec9912f024da4cabdf11f75a0214b06f07054526",
      "parents": [
        "20fd879bb7060515e184b3fbf5da76f7743622db"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Oct 19 05:23:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 05:23:39 2026"
      },
      "message": "[SDL] Use `pagehide` instead of deprecated `unload` event for `SDL_QUIT` (#28010)\n\nChrome 158 (starting in 158.0.8110.0) enabled `DeprecateUnload` by\ndefault on all origins, blocking `window.addEventListener(\u0027unload\u0027,\n...)` via Permissions Policy (`unload\u003d()`) and causing `test_sdl_quit`\nto fail in CI.\n\nSwitch `libsdl.js` and `test_sdl_quit.c` from `\u0027unload\u0027` to\n`\u0027pagehide\u0027`, which is the standard replacement for the deprecated\n`\u0027unload\u0027` event."
    },
    {
      "commit": "20fd879bb7060515e184b3fbf5da76f7743622db",
      "tree": "17fd8748f71998d2c7dd94edbf5ac3436a5f2708",
      "parents": [
        "5f63ff2e370da7e6fffd8f54379860bdd18118f9"
      ],
      "author": {
        "name": "Dimokritos",
        "email": "dkolitsos@protonmail.com",
        "time": "Mon Oct 19 05:22:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 05:22:42 2026"
      },
      "message": "[embind] Drop the try/finally around stack-framed invokers (#27750)\n\nFollows sbc100\u0027s review on #27610. The invoker no longer restores the\nstack frame on an exception path, since callers that catch an exception\nfrom the module and carry on own the stackSave/stackRestore (#27748\nmakes the docs say so). The frame is released on the normal return path\nonly. The throwing-conversion section of test_embind_trivial_value_stack\ngoes with it, and the hello_embind codesize expectation drops by 23\nbytes."
    },
    {
      "commit": "5f63ff2e370da7e6fffd8f54379860bdd18118f9",
      "tree": "cd967a2bb5fde46bedb582ccd574eecf4a103e0b",
      "parents": [
        "ef8515b08f5857e22a42161d75f33dd3bd908308"
      ],
      "author": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Sat Oct 17 13:23:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 13:23:44 2026"
      },
      "message": "[CI] Ensure coverage for mimalloc + WasmFS (#27988)\n\nFollow-up to: #27982."
    },
    {
      "commit": "ef8515b08f5857e22a42161d75f33dd3bd908308",
      "tree": "1bf156126a84311d64ca790e9c2710cdbb52b056",
      "parents": [
        "e13ee988ce3d87a738dd8f3661d02223308c412a"
      ],
      "author": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Sat Oct 17 13:21:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 13:21:04 2026"
      },
      "message": "[WasmFS] Fix inaccurate line number mapping (#27983)\n\nThese line numbers need to be increased by 4 after commit 3f476687."
    },
    {
      "commit": "e13ee988ce3d87a738dd8f3661d02223308c412a",
      "tree": "58a8bc0a80dbbaeaee932e0220257d52247c906b",
      "parents": [
        "d726e5dc27c3167d7239221019b6ff4ff39ce924"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Oct 16 20:09:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 20:09:08 2026"
      },
      "message": "Minor cleanup and refactoring in `src/jsifier.mjs`. NFC (#27997)\n\n- Skip scanning `PRE_JS_FILES`, `POST_JS_FILES`, and `EM_JS_SNIPPETS` in\n`--symbols-only` mode, and use `getIncludeFile` so preprocessed files\nare handled consistently.\n- Avoid mutating `LibraryManager.library[symbol]` when creating stub\nfunctions and remove the unused `original` variable.\n- Add `timer.start`/`timer.stop` around the `symbolHandler` loop.\n\nSplit out from #27995"
    },
    {
      "commit": "d726e5dc27c3167d7239221019b6ff4ff39ce924",
      "tree": "d2182b95b22b6d6eaf19a1ae0a30c9735a1b717a",
      "parents": [
        "fb115aaf22510f106560d6698a2c1874c16b8487"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Oct 16 18:43:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 18:43:13 2026"
      },
      "message": "Move `__syscall_uname` to JS library and support Node.js (#27989)\n\nMove `__syscall_uname` from the native weak stubs in `libstubs` into a\nnew `libsyscalls_shared.js` library (which is linked in both default FS\nand `WASMFS` builds), and also move the `get*id32` syscalls there so\nthey are shared with `WASMFS`.\n\nWhen running under Node.js (`ENVIRONMENT_IS_NODE`), populate `utsname`\nfields from `require(\u0027node:os\u0027)` (`type`, `hostname`, `release`,\n`version`, and `machine`), falling back to the default Emscripten values\nin non-Node environments.\n\nFixes: #27985"
    },
    {
      "commit": "fb115aaf22510f106560d6698a2c1874c16b8487",
      "tree": "90f613a4228f6340f018238b5ce8bfbfde52c06a",
      "parents": [
        "becb298488aef1e9e3b13a482e9260e2ac486f1c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Oct 16 17:17:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 17:17:22 2026"
      },
      "message": "[GL] Fix unbinding of current context in `emscripten_webgl_destroy_context` with pthreads + `-sOFFSCREEN_FRAMEBUFFER` (#27986)\n\nWhen `-pthread` and `-sOFFSCREEN_FRAMEBUFFER` are enabled, the current\nWebGL context is tracked in thread-local storage in `webgl1.c`.\nPreviously, `$emscripten_webgl_destroy_context_before_on_calling_thread`\nattempted to unbind the context on the calling thread in JS before\nproxying, but this hook was broken by a missing `$` prefix check in\n`handleWebGLProxying` (#19112) and was also never invoked when\n`-sOFFSCREENCANVAS_SUPPORT` was not enabled (#11356).\n\nInstead, implement `emscripten_webgl_destroy_context` in `webgl1.c`\nalongside `emscripten_webgl_create_context`,\n`emscripten_webgl_get_current_context`, and\n`emscripten_webgl_commit_frame` so that it unbinds the context if\ncurrent on the calling thread before calling\n`emscripten_webgl_do_destroy_context`, and remove the unused\n`_before_on_calling_thread` mechanism from `libhtml5_webgl.js`.\n\nFixes: #27891"
    },
    {
      "commit": "becb298488aef1e9e3b13a482e9260e2ac486f1c",
      "tree": "45951ff8e263c351306dd80509bf2c68ef3d6884",
      "parents": [
        "84a0bde0f29d0699c82a56510dc1a3fea2ce5217"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Fri Oct 16 16:29:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 16:29:30 2026"
      },
      "message": "Update emsdk version from 9aa80542 to df22a5e4 (#27991)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 9aa80542 \u003d\u003e df22a5e4\n\nThe following revisions were included in this update:\n\n```\n- df22a5e4 Roll llvm-project from 2138b6cd509b to 424c73a402df (34 revisions)\n- 719b303a Roll llvm-project from 53a3d6ae6cc6 to 2138b6cd509b (57 revisions)\n- 7aac856c Roll emscripten from 38a5bec7bc3f to 84a0bde0f29d (3 revisions)\n- a7d31bd6 Roll llvm-project from f869d0ba4031 to 53a3d6ae6cc6 (108 revisions)\n- ea870214 Roll v8 from a34fe5bcf98f to 18101f3f5f7b (94 revisions)\n- 5471b3df Roll binaryen from 57ee9917b8dc to 29765863a603 (1 revision)\n- ceb1dbaf Roll emscripten from aada25650bf8 to 38a5bec7bc3f (1 revision)\n- 6799db27 Roll llvm-project from b49d43cb82f8 to f869d0ba4031 (45 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/9aa80542..df22a5e4\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "84a0bde0f29d0699c82a56510dc1a3fea2ce5217",
      "tree": "4f3e8684839b2db66c175ae9eee414db70b262d2",
      "parents": [
        "fa46a1d882f03c8fa85ef1f44329fd542bf614d4"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Oct 15 18:21:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 18:21:38 2026"
      },
      "message": "Enable `toplevel: true` in `acorn-optimizer.mjs` Terser pass (#27987)\n\nTerser\u0027s `reduce_vars: true` inlines top-level `const` declarations into\ntheir use sites during `minify_sync`, which runs after `JSDCE`. Without\n`toplevel: true`, Terser\u0027s `unused: true` pass refuses to drop top-level\ndeclarations, leaving inlined top-level `const` declarations and other\nunused top-level variables in the output.\n\nThis has negligible link-time performance impact (~1-3 ms on\n`minify_sync`), since `reduce_vars` and `unused` already walk the full\n`AST_Toplevel` tree regardless of the `toplevel` setting.\n\nThis should really have been part of #27949."
    },
    {
      "commit": "fa46a1d882f03c8fa85ef1f44329fd542bf614d4",
      "tree": "1e9ca7031057b4fdbcd4e2e3266d8b273b8cb06d",
      "parents": [
        "61b8d612f2e8d7c727341e299bda697c6fdaa11d"
      ],
      "author": {
        "name": "Dasa Paddock",
        "email": "dpaddock@esri.com",
        "time": "Thu Oct 15 16:54:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 16:54:11 2026"
      },
      "message": "Update libpng port to v1.6.59 (#27956)\n\nFixes [CVE-2026-46675](https://www.cve.org/CVERecord?id\u003dCVE-2026-46675).\nThe `libpng-1.6.59.tar.gz` file and the list of changes are available at\nhttps://sourceforge.net/projects/libpng/files/libpng16/1.6.59/"
    },
    {
      "commit": "61b8d612f2e8d7c727341e299bda697c6fdaa11d",
      "tree": "d402f3645ee65d0a2b2a548bc63d1be7cc5cac9d",
      "parents": [
        "38a5bec7bc3f4dcd6d6a47b2de043e475334299b"
      ],
      "author": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Thu Oct 15 15:42:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 15:42:40 2026"
      },
      "message": "[mimalloc] Define `MI_FREE_USE_PAGEMAP` (#27982)\n\nUpstream commit microsoft/mimalloc@0d17826 renamed `MI_OPT_FREE` to\n`MI_FREE_USE_PAGEMAP`, with its meaning reversed.\n\nAs we did not previously define `MI_OPT_FREE`, define\n`MI_FREE_USE_PAGEMAP` instead. This also matches the upstream\nconfiguration for WASI targets.\n\nFixes: #27978"
    },
    {
      "commit": "38a5bec7bc3f4dcd6d6a47b2de043e475334299b",
      "tree": "1805f4a9734390ac051d9baa882f290ae14d8533",
      "parents": [
        "aada25650bf8ccf44cf45e4512e60e0d32692738"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Thu Oct 15 15:27:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 15:27:31 2026"
      },
      "message": "Update emsdk version from 4db0da32 to 9aa80542 (#27971)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 4db0da32 \u003d\u003e 9aa80542\n\nThe following revisions were included in this update:\n\n```\n- 9aa80542 Roll llvm-project from f432af682a46 to b49d43cb82f8 (23 revisions)\n- 59a456b8 Roll emscripten from 488ddc112b9e to aada25650bf8 (3 revisions)\n- 4d2ef75b Roll llvm-project from 6b804fdec943 to f432af682a46 (55 revisions)\n- 77def98f Roll binaryen from a885222570e7 to 57ee9917b8dc (1 revision)\n- 8cc41059 Roll emscripten from 6882a79eedf0 to 488ddc112b9e (3 revisions)\n- f1d62ff8 Roll llvm-project from 5d79cec75c9f to 6b804fdec943 (65 revisions)\n- 16ea5fba Roll emscripten from 77b5f2f54d63 to 6882a79eedf0 (1 revision)\n- 49176bdb Roll binaryen from 74d78de607e0 to a885222570e7 (1 revision)\n- bf375bb1 Roll llvm-project from 50eb53f01dfb to 5d79cec75c9f (58 revisions)\n- 39dd3db8 Roll v8 from 8290bd3597e4 to a34fe5bcf98f (97 revisions)\n- 70debd3e Roll llvm-project from d925f39805d7 to 50eb53f01dfb (41 revisions)\n- 836c83f2 Roll emscripten from fddbbc666bf2 to 77b5f2f54d63 (1 revision)\n- 9a43669e Roll llvm-project from 9d18ac3e7264 to d925f39805d7 (19 revisions)\n- 889e2791 Roll binaryen from 91d343741e6e to 74d78de607e0 (1 revision)\n- 1eef2ef2 Roll emscripten from 0fc8d0c8090d to fddbbc666bf2 (2 revisions)\n- 5263237b Roll binaryen from 0b8d88ee62b8 to 91d343741e6e (2 revisions)\n- b5597bf7 Roll llvm-project from a1c84751fed9 to 9d18ac3e7264 (31 revisions)\n- b7cd398b Roll emscripten from 5c61a6d01912 to 0fc8d0c8090d (4 revisions)\n- f8317388 Roll binaryen from 99482c7a18f4 to 0b8d88ee62b8 (1 revision)\n- 7b191914 Roll emscripten from 14fd5a03ef54 to 5c61a6d01912 (1 revision)\n- d0b3a8b5 Roll binaryen from eb441bad531d to 99482c7a18f4 (1 revision)\n- 113bc12a Roll llvm-project from e69542d200fa to a1c84751fed9 (92 revisions)\n- d90d4f23 Roll binaryen from 0edef6462d5c to eb441bad531d (1 revision)\n- 1b7fb76f Roll emscripten from 0bb26c10d3cd to 14fd5a03ef54 (2 revisions)\n- ef7f2a26 Roll llvm-project from 168202c5e16a to e69542d200fa (66 revisions)\n- 5b2666b6 Roll v8 from 38931b7702cd to 8290bd3597e4 (68 revisions)\n- 2354237f Roll llvm-project from 6c2da1b8ac4b to 168202c5e16a (17 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/4db0da32..9aa80542\n\nThe following (4) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_hello_dylink_all.json: 860606 \u003d\u003e 860603 [-3 bytes / -0.00%]\ncodesize/test_minimal_runtime_code_size_audio_worklet.json: 16378 \u003d\u003e 16361 [-17 bytes / -0.10%]\ncodesize/test_minimal_runtime_code_size_random_printf_wasm.json: 11015 \u003d\u003e 10994 [-21 bytes / -0.19%]\ncodesize/test_minimal_runtime_code_size_random_printf_wasm2js.json: 17344 \u003d\u003e 17323 [-21 bytes / -0.12%]\n\nAverage change: -0.10% (-0.19% - -0.00%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "aada25650bf8ccf44cf45e4512e60e0d32692738",
      "tree": "e29c70d33997d49cdbc607e172dd464b7d622a43",
      "parents": [
        "f90acd3635b42fefebc0059a7c8654d3518b11e2"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Oct 14 23:41:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 23:41:51 2026"
      },
      "message": "[ports] Add retry logic to port downloads (#27975)\n\nRetry failed port downloads in `tools/ports/__init__.py` up to 3 times\nwith exponential backoff (`1s`, `2s`, `4s`) and a 30-second timeout\nbefore failing with an error. Also pass `-f` to `curl` (`curl -sSfL`) so\nHTTP server errors trigger retries rather than returning an HTML error\npage that fails the hash check.\n\nThis addresses transient network issues such as isolated HTTP 5xx/429\nresponses (e.g. from GitHub), connection resets, hung connections, and\nmid-stream disconnects. It does not address extended multi-minute or\nmulti-hour outages of upstream hosts (such as `lua.org`), which would\nstill require mirroring archives or caching to avoid.\n\nSee: #27500"
    }
  ],
  "next": "f90acd3635b42fefebc0059a7c8654d3518b11e2"
}
