Skip to content

Conversation

@targos
Copy link
Member

@targos targos commented Dec 9, 2025

No description provided.

@nodejs-github-bot
Copy link
Collaborator

Review requested:

  • @nodejs/gyp
  • @nodejs/security-wg
  • @nodejs/v8-update

@nodejs-github-bot nodejs-github-bot added build Issues and PRs related to build files or the CI. needs-ci PRs that need a full CI run. v8 engine Issues and PRs related to the V8 dependency. labels Dec 9, 2025
@targos

This comment was marked as resolved.

@targos
Copy link
Member Author

targos commented Dec 9, 2025

We also encounter nodejs/node-v8#304
And another error with shared libraries, maybe related to GCC.

@richardlau
Copy link
Member

This appears to have dropped da71ab6 which fixed building with gcc 15.

@targos
Copy link
Member Author

targos commented Dec 9, 2025

Ah, I forgot about this one. The change should really be upstreamed. It was lost because I always take the canary branch as a reference for V8 updates.

@targos

This comment was marked as resolved.

@richardlau
Copy link
Member

Ah, I forgot about this one. The change should really be upstreamed. It was lost because I always take the canary branch as a reference for V8 updates.

It is in later upstream highway than is in V8. I have no idea what V8's policy is on when they roll highway forward.

@targos

This comment was marked as resolved.

@aduh95 aduh95 added the semver-major PRs that contain breaking changes and should be released in the next major version. label Dec 11, 2025
@joyeecheung
Copy link
Member

joyeecheung commented Dec 11, 2025

@targos bisected it to https://chromium-review.googlesource.com/c/v8/v8/+/7090677 , locally this fixes it for me:

diff --git a/deps/v8/src/objects/transitions.cc b/deps/v8/src/objects/transitions.cc
index e30cd53e7a..b274382894 100644
--- a/deps/v8/src/objects/transitions.cc
+++ b/deps/v8/src/objects/transitions.cc
@@ -173,6 +173,7 @@ void TransitionsAccessor::InsertHelper(Isolate* isolate, DirectHandle<Map> map,
       }
       array->SetKey(insertion_index, *name);
       array->SetRawTarget(insertion_index, MakeWeak(*target));
+      array->Sort();
       SLOW_DCHECK(array->IsSortedNoDuplicates());
       return;
     }
@@ -221,7 +222,7 @@ void TransitionsAccessor::InsertHelper(Isolate* isolate, DirectHandle<Map> map,
   for (int i = insertion_index; i < number_of_transitions; ++i) {
     result->Set(i + 1, array->GetKey(i), array->GetRawTarget(i));
   }
-
+  result->Sort();
   SLOW_DCHECK(result->IsSortedNoDuplicates());
   ReplaceTransitions(isolate, map, result);
 }

@targos
Copy link
Member Author

targos commented Dec 12, 2025

I'll cherry-pick https://chromium-review.googlesource.com/c/v8/v8/+/7252791 when it's landed.

joyeecheung added a commit to joyeecheung/v8 that referenced this pull request Dec 15, 2025
Previously TransitionsAccessor::InsertHelper() can grow the transition
array without making sure it's sorted after the size crosses
kMaxElementsForLinearSearch, leading to search failures or
duplicate entries in bigger transition arrays.

See nodejs/node#61002 (comment)

Change-Id: I3f45816b7d65bbbcfedeb7074d0c6907cbc08edf
hubot pushed a commit to v8/v8 that referenced this pull request Dec 17, 2025
Previously, after the TransitionArray is rehashed,
TransitionsAccessor::InsertHelper() can grow the transition
array without making sure it's sorted after the size crosses
kMaxElementsForLinearSearch, leading to search failures or
duplicate entries in bigger transition arrays.

See nodejs/node#61002 (comment)

Change-Id: I3f45816b7d65bbbcfedeb7074d0c6907cbc08edf
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7252791
Commit-Queue: Joyee Cheung <joyee@igalia.com>
Reviewed-by: Igor Sheludko <ishell@chromium.org>
Cr-Commit-Position: refs/heads/main@{#104384}
targos pushed a commit to targos/node that referenced this pull request Dec 18, 2025
Original commit message:

    [runtime] sort transition array after it grows beyond linear search size

    Previously, after the TransitionArray is rehashed,
    TransitionsAccessor::InsertHelper() can grow the transition
    array without making sure it's sorted after the size crosses
    kMaxElementsForLinearSearch, leading to search failures or
    duplicate entries in bigger transition arrays.

    See nodejs#61002 (comment)

    Change-Id: I3f45816b7d65bbbcfedeb7074d0c6907cbc08edf
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7252791
    Commit-Queue: Joyee Cheung <joyee@igalia.com>
    Reviewed-by: Igor Sheludko <ishell@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#104384}

Refs: v8/v8@0ce9f16
targos and others added 12 commits December 22, 2025 15:14
Major V8 updates are usually API/ABI incompatible with previous
versions. This commit adapts NODE_MODULE_VERSION for V8 14.4.

Refs: https://github.com/nodejs/CTC/blob/master/meetings/2016-09-28.md
PR-URL: nodejs#54077
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Richard Lau <rlau@redhat.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Darshan Sen <raisinten@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Paolo Insogna <paolo@cowtech.it>
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
It's causing linker errors with node.lib in node-gyp and potentially
breaks other 3rd party tools

PR-URL: nodejs#56238
Refs: nodejs#55784
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Darshan Sen <raisinten@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Richard Lau <rlau@redhat.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Paolo Insogna <paolo@cowtech.it>
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
GCC emits warnings because of the trailing backslashes.

PR-URL: nodejs#58070
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Darshan Sen <raisinten@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Richard Lau <rlau@redhat.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Paolo Insogna <paolo@cowtech.it>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
PR-URL: nodejs#58070
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Darshan Sen <raisinten@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Richard Lau <rlau@redhat.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Paolo Insogna <paolo@cowtech.it>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
illumos pointers are VA48, can allocate from the top of the 64-bit range
as well.

PR-URL: nodejs#59805
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
In illumos, madvise(3C) now takes `void *` for its first argument
post-illumos#14418, but uses `caddr_t` pre-illumos#14418. This fix will
detect if the illumos mman.h file in use is pre-or-post-illumos#14418 so
builds can work either way.

PR-URL: nodejs#58237
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Michael Dawson <midawson@redhat.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Original commit message:

    GCC 15 removed avx10.2-512 target

    PiperOrigin-RevId: 823560321

Refs: google/highway@989a498
PR-URL: nodejs#60682
Fixes: nodejs#60566
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Xuguang Mei <meixuguang@gmail.com>
Original commit message:

    Fix GCC Build

    Move explicit specializations of Utf8::IsAsciiOneByteString to namespace scope

    C++ forbids explicit template specializations inside class scope.
    The specializations for IsAsciiOneByteString<uint8_t> and
    IsAsciiOneByteString<uint16_t> were defined inside class unibrow::Utf8,
    riggering "explicit specialization in non-namespace scope"
    compile errors.

    Fix type mismatch in EXPECT_EQ comparisons for std::pair values

    The tests failed because EXPECT_EQ was comparing pairs with mismatched
    template parameters — std::pair<int, unsigned int> vs.
    std::pair<unsigned int, unsigned char> — which have no valid operator==.
    I corrected the expected values to use the same unsigned types as the
    actual data, ensuring the pair comparison compiles cleanly.

    Fix build failure on GCC 12 by replacing std::format with ostringstream

    GCC 12's libstdc++ does not implement <format>, causing compile errors when
    using std::format. Replaced all std::format calls with equivalent

    Change-Id: I5c31f91065eccf6f4c14172902ffcd99863ebbb9
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7138905
    Commit-Queue: Clemens Backes <clemensb@chromium.org>
    Reviewed-by: Jakob Kummerow <jkummerow@chromium.org>
    Reviewed-by: Clemens Backes <clemensb@chromium.org>
    Commit-Queue: Jakob Kummerow <jkummerow@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#104280}

Refs: v8/v8@ee2873a
Original commit message:

    [runtime] sort transition array after it grows beyond linear search size

    Previously, after the TransitionArray is rehashed,
    TransitionsAccessor::InsertHelper() can grow the transition
    array without making sure it's sorted after the size crosses
    kMaxElementsForLinearSearch, leading to search failures or
    duplicate entries in bigger transition arrays.

    See nodejs#61002 (comment)

    Change-Id: I3f45816b7d65bbbcfedeb7074d0c6907cbc08edf
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7252791
    Commit-Queue: Joyee Cheung <joyee@igalia.com>
    Reviewed-by: Igor Sheludko <ishell@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#104384}

Refs: v8/v8@0ce9f16
Original commit message:

    [runtime] zero-initialize descriptor array padding

    So that snapshot and code cache stay reproducible.

    See nodejs/node-v8#304

    Change-Id: Ic30970097ab46a26fa5bcf0f73e0fe62089890cc
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7271645
    Reviewed-by: Patrick Thier <pthier@chromium.org>
    Commit-Queue: Joyee Cheung <joyee@igalia.com>
    Cr-Commit-Position: refs/heads/main@{#104436}

Refs: v8/v8@6eff00a
@nodejs-github-bot
Copy link
Collaborator

@nodejs-github-bot
Copy link
Collaborator

@nodejs-github-bot
Copy link
Collaborator

@nodejs-github-bot
Copy link
Collaborator

@targos
Copy link
Member Author

targos commented Dec 23, 2025

V8 CI is failing on @nodejs/platform-s390 and @nodejs/platform-ppc:

https://ci.nodejs.org/job/node-test-commit-v8-linux/6932/nodes=rhel8-s390x,v8test=v8test/console

01:33:40 ### CCC_OVERRIDE_OPTIONS: x--target=s390x-unknown-linux-gnu
01:33:40 ### Deleting argument --target=s390x-unknown-linux-gnu
01:33:40 warning: unknown warning option '-Wno-nontrivial-memcall'; did you mean '-Wno-nontrivial-memaccess'? [-Wunknown-warning-option]
01:33:40 warning: unknown warning option '-Wno-uninitialized-const-pointer'; did you mean '-Wno-uninitialized-const-reference'? [-Wunknown-warning-option]
01:33:40 warning: unknown warning option '-Wunnecessary-virtual-specifier'; did you mean '-Wduplicate-decl-specifier'? [-Wunknown-warning-option]
01:33:40 In file included from ../../src/base/numbers/bignum.cc:5:
01:33:40 In file included from ../../src/base/numbers/bignum.h:8:
01:33:40 In file included from ../../src/base/vector.h:15:
01:33:40 In file included from ../../src/base/algorithm.h:12:
01:33:40 ../../src/base/memcopy.h:205:27: error: use of undeclared identifier 'ByteReverse16'
01:33:40   205 |       COPY_LOOP(uint16_t, ByteReverse16);
01:33:40       |                           ^
01:33:40 ../../src/base/memcopy.h:207:27: error: use of undeclared identifier 'ByteReverse32'
01:33:40   207 |       COPY_LOOP(uint32_t, ByteReverse32);
01:33:40       |                           ^
01:33:40 ../../src/base/memcopy.h:209:27: error: use of undeclared identifier 'ByteReverse64'
01:33:40   209 |       COPY_LOOP(uint64_t, ByteReverse64);
01:33:40       |                           ^
01:33:40 3 warnings and 3 errors generated.

https://ci.nodejs.org/job/node-test-commit-v8-linux/6932/nodes=rhel8-ppc64le,v8test=v8test/console

03:56:22 === mjsunit/regress/regress-463593768 ===
03:56:22 --- stdout ---
03:56:22 (d8):2: ReferenceError: Temporal is not defined
03:56:22   Temporal.Instant;
03:56:22   ^
03:56:22 ReferenceError: Temporal is not defined
03:56:22     at f ((d8):2:3)
03:56:22     at (d8):3:3
03:56:22 Command: out.gn/ppc64.release/d8 --test test/mjsunit/mjsunit.js test/mjsunit/regress/regress-463593768.js --random-seed=-1031647663 --nohard-abort
03:56:22 === mjsunit/regress/regress-464961493 ===
03:56:22 --- stdout ---
03:56:22 (d8):2: ReferenceError: Temporal is not defined
03:56:22   Temporal.Instant;
03:56:22   ^
03:56:22 ReferenceError: Temporal is not defined
03:56:22     at f ((d8):2:3)
03:56:22     at (d8):3:3
03:56:22 Command: out.gn/ppc64.release/d8 --test test/mjsunit/mjsunit.js test/mjsunit/regress/regress-464961493.js --random-seed=-1031647663 --nohard-abort
03:56:22 === mjsunit/wasm/stack-switching ===
03:56:22 --- stderr ---
03:56:22 V8 is running with experimental features enabled. Stability and security will suffer.
03:56:22 Received signal 11 SEGV_MAPERR 000000000080
03:56:22 --- stdout ---
03:56:22 TestNullRefs
03:56:22 TestInitialResumeAndReturn
03:56:22 TestWasmFXResumeAndJSPISuspend
03:56:22 TestSuspend
03:56:22 Command: out.gn/ppc64.release/d8 --test test/mjsunit/mjsunit.js test/mjsunit/wasm/stack-switching.js --random-seed=-1031647663 --nohard-abort --experimental-wasm-wasmfx --expose-gc
03:56:22 exit code: -11 [FFFFFFF5]
03:56:22 --- CRASHED ---
03:56:22 
03:56:22 ===
03:56:22 === 3 tests failed
03:56:22 ===

@targos
Copy link
Member Author

targos commented Dec 23, 2025

@nodejs/build The debug build is failing on https://github.com/v8/v8/blob/a40a900c138ea7381377a04527910b7079c5a6fa/src/compiler/turboshaft/load-store-verification-reducer.h#L95-L97 because of missing std::format.
Support for that was only added in GCC 13.

@miladfarca
Copy link
Contributor

miladfarca commented Dec 23, 2025

@targos For ppc64/s390x please make sure these CLs are included:
https://chromium-review.googlesource.com/c/v8/v8/+/7209841
https://chromium-review.googlesource.com/c/v8/v8/+/7212934

For temporal failures please cherry pick this CL https://chromium-review.googlesource.com/c/v8/v8/+/7216074 or manually set v8_enable_temporal_support = true under your args.gn file.

For temporal we currently use rustc version 1.84.1 and clang 19.1.7. Also a number of additional gn args may need to be added to args.gn, i.e

rust_sysroot_absolute = "/usr"
rust_bindgen_root = "/root/.cargo"
rustc_version = "1.84.1"

You can check our args for ppc64 here:
https://github.com/ibmruntimes/v8-build/blob/main/bin/ppc64/release.gn

miladfarca and others added 5 commits December 23, 2025 18:59
Original commit message:

    Move ByteReverse helpers under src/base

    This patch is needed to fix compilation errors on BE platforms after
    this change: http://crrev.com/c/7203818

    Bug: 448409803
    Change-Id: Ife2e582f641c465c070ab397ca3c64f619715976
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7209841
    Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
    Commit-Queue: Milad Farazmand <mfarazma@ibm.com>
    Cr-Commit-Position: refs/heads/main@{#104029}

Refs: v8/v8@8ca4ae9
Original commit message:

    Fix arg_buffer under Generate_WasmFXSuspend

    Also change the tmp register passed to LoadJumpBuffer to avoid
    overwriting arg_buffer.

    Change-Id: I72b83edf722481ca7018731d36e1939620612e97
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7212934
    Reviewed-by: John <junyan1@ibm.com>
    Commit-Queue: Milad Farazmand <mfarazma@ibm.com>
    Cr-Commit-Position: refs/heads/main@{#104032}

Refs: v8/v8@6c3fce9
Original commit message:

    [temporal] enable v8_enable_temporal_support on ppc64 and s390x

    Change-Id: Iaa5f46913b6aabf00b0440dba3d524427667b06e
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7216074
    Reviewed-by: Manish Goregaokar <manishearth@google.com>
    Reviewed-by: Michael Achenbach <machenbach@chromium.org>
    Commit-Queue: Manish Goregaokar <manishearth@google.com>
    Cr-Commit-Position: refs/heads/main@{#104066}

Refs: v8/v8@fab6b87
@nodejs-github-bot
Copy link
Collaborator

@nodejs-github-bot
Copy link
Collaborator

@nodejs-github-bot
Copy link
Collaborator

@targos
Copy link
Member Author

targos commented Dec 23, 2025

This introduces another failure:

 In file included from ../../deps/v8/src/base/bits.cc:5:
../../deps/v8/src/base/bits.h: In function 'constexpr uint64_t v8::base::bits::ByteReverse64(uint64_t)':
../../deps/v8/src/base/bits.h:507:38: error: 'kBitsPerByte' was not declared in this scope
  507 |   size_t bits_of_v = sizeof(value) * kBitsPerByte;
      |                                      ^~~~~~~~~~~~

That one happens on canary too, btw.

@miladfarca
Copy link
Contributor

Looks like __has_builtin(__builtin_bswap64) is false for your compiler (why?)
Let me create a patch.

@targos
Copy link
Member Author

targos commented Dec 23, 2025

/cc @aduh95 since it only happens with the special shared libraries config.

@miladfarca
Copy link
Contributor

@targos fyi currently waiting for this patch to be reviewed: http://crrev.com/c/7310534

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build Issues and PRs related to build files or the CI. needs-ci PRs that need a full CI run. semver-major PRs that contain breaking changes and should be released in the next major version. v8 engine Issues and PRs related to the V8 dependency.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants