On 7/10/26 10:43 AM, Fabien Romano wrote:
[...]
https://chromium-review.googlesource.com/c/v8/v8/+/8063803
[...]
For now, I think we have to disable regexp JIT.
Attached is the diff I'm currently testing. Did I get it right?
I am inclined to commit this sooner rather than later, because it
looks like this will fix the build issues we've been seeing for the
chromiums.
./devel/codex
./lang/deno
./lang/node
./www/chromium
./www/iridium
./www/ungoogled-chromium
./x11/qt5/qtwebengine
./x11/qt6/qtwebengine
Did I miss one?
Don't think so. lang/deno and devel/codex are chasing the latest v8
and are typically very close to the chromiums. I don't know about
qtwebengine, but lang/node is much more conservative however.
Index: Makefile
===================================================================
RCS file: /cvs/ports/lang/node/Makefile,v
retrieving revision 1.169
diff -u -p -r1.169 Makefile
--- Makefile 30 Jun 2026 18:46:22 -0000 1.169
+++ Makefile 11 Jul 2026 11:58:19 -0000
@@ -13,6 +13,7 @@ DIST_TUPLE = github qbit node-pledge 1.
DISTNAME = node-${NODE_VERSION}
PKGNAME = ${DISTNAME:S/v//g}
EPOCH = 0
+REVISION = 0
CATEGORIES = lang devel
Index: patches/patch-deps_v8_src_flags_flag-definitions_h
===================================================================
RCS file: patches/patch-deps_v8_src_flags_flag-definitions_h
diff -N patches/patch-deps_v8_src_flags_flag-definitions_h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-deps_v8_src_flags_flag-definitions_h 11 Jul 2026 11:58:19 -0000
@@ -0,0 +1,32 @@
+Disable regexp JIT
+
+Index: deps/v8/src/flags/flag-definitions.h
+--- deps/v8/src/flags/flag-definitions.h.orig
++++ deps/v8/src/flags/flag-definitions.h
+@@ -2835,15 +2835,26 @@ DEFINE_BOOL(serialization_statistics, false,
+ "Collect statistics on serialized objects.")
+ // Regexp
+ DEFINE_BOOL(regexp_optimization, true, "generate optimized regexp code")
++#ifdef V8_OS_OPENBSD
++// OpenBSD: Irregexp JIT rewrites a C++ return address, which conflicts with
++// retguard. Force bytecode interpretation and make the choice immutable.
++DEFINE_BOOL_READONLY(regexp_interpret_all, true, "interpret all regexp code")
++#else
+ DEFINE_BOOL(regexp_interpret_all, false, "interpret all regexp code")
++#endif
+ #ifdef V8_TARGET_BIG_ENDIAN
+ #define REGEXP_PEEPHOLE_OPTIMIZATION_BOOL false
+ #else
+ #define REGEXP_PEEPHOLE_OPTIMIZATION_BOOL true
+ #endif
++#ifdef V8_OS_OPENBSD
++DEFINE_BOOL_READONLY(regexp_tier_up, false,
++ "enable regexp interpreter and tier up to the compiler")
++#else
+ DEFINE_BOOL(regexp_tier_up, true,
+ "enable regexp interpreter and tier up to the compiler after the "
+ "number of executions set by the tier up ticks flag")
++#endif
+ DEFINE_NEG_IMPLICATION(regexp_interpret_all, regexp_tier_up)
+ DEFINE_INT(regexp_tier_up_ticks, 1,
+ "set the number of executions for the regexp interpreter before "
Index: patches/patch-deps_v8_src_wasm_jump-table-assembler_cc
===================================================================
RCS file: patches/patch-deps_v8_src_wasm_jump-table-assembler_cc
diff -N patches/patch-deps_v8_src_wasm_jump-table-assembler_cc
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-deps_v8_src_wasm_jump-table-assembler_cc 11 Jul 2026 11:58:19 -0000
@@ -0,0 +1,28 @@
+See https://chromium-review.googlesource.com/c/v8/v8/+/8063803
+Index: deps/v8/src/wasm/jump-table-assembler.cc
+--- deps/v8/src/wasm/jump-table-assembler.cc.orig
++++ deps/v8/src/wasm/jump-table-assembler.cc
+@@ -114,6 +114,10 @@ void JumpTableAssembler::EmitLazyCompileJumpSlot(uint3
+ }
+
+ bool JumpTableAssembler::EmitJumpSlot(Address target) {
++ intptr_t displacement = target - (pc_ + kJumpTableSlotEntryMarkerSize +
++ MacroAssembler::kIntraSegmentJmpInstrSize);
++ if (!is_int32(displacement)) return false;
++
+ #ifdef V8_ENABLE_CET_IBT
+ uint32_t endbr_insn = 0xfa1e0ff3;
+ uint32_t nop = 0x00401f0f;
+@@ -122,11 +126,7 @@ bool JumpTableAssembler::EmitJumpSlot(Address target)
+ emit<uint32_t>(nop, kRelaxedStore);
+ #endif
+
+- intptr_t displacement =
+- target - (pc_ + MacroAssembler::kIntraSegmentJmpInstrSize);
+- if (!is_int32(displacement)) return false;
+-
+- uint8_t inst[kJumpTableSlotSize] = {
++ uint8_t inst[8] = {
+ 0xe9, 0, 0, 0, 0, // near_jmp displacement
+ 0xcc, 0xcc, 0xcc, // int3 * 3
+ };
Index: patches/patch-deps_v8_src_wasm_jump-table-assembler_h
===================================================================
RCS file: patches/patch-deps_v8_src_wasm_jump-table-assembler_h
diff -N patches/patch-deps_v8_src_wasm_jump-table-assembler_h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-deps_v8_src_wasm_jump-table-assembler_h 11 Jul 2026 11:58:19 -0000
@@ -0,0 +1,15 @@
+See https://chromium-review.googlesource.com/c/v8/v8/+/8063803
+Index: deps/v8/src/wasm/jump-table-assembler.h
+--- deps/v8/src/wasm/jump-table-assembler.h.orig
++++ deps/v8/src/wasm/jump-table-assembler.h
+@@ -184,8 +184,10 @@ class V8_EXPORT_PRIVATE JumpTableAssembler {
+ #if V8_TARGET_ARCH_X64
+ #ifdef V8_ENABLE_CET_IBT
+ static constexpr int kJumpTableSlotSize = 16;
++ static constexpr int kJumpTableSlotEntryMarkerSize = 8;
+ #else // V8_ENABLE_CET_IBT
+ static constexpr int kJumpTableSlotSize = 8;
++ static constexpr int kJumpTableSlotEntryMarkerSize = 0;
+ #endif
+ static constexpr int kJumpTableLineSize = kJumpTableSlotSize;
+ static constexpr int kFarJumpTableSlotSize = 16;