On 7/6/26 08:47, Fabien Romano wrote:
> 
> On 7/4/26 13:18, Volker Schlecht wrote:
>> Attached is your diff against 24.18.0 in -current. I don't see any 
>> wasm-related
>> tests failing here, but the failure cases that you mentioned seem to be the 
>> same
>> as or similar to random failures we're seeing while building the chromiums 
>> when
>> running the wasm version of rollup.
> 
> To reproduce, you need amd64(V8_ENABLE_CET_IBT) and a specific memory layout.
> When V8 patches a Wasm jump slot and has to fall back to the far jump table,
> it generates twice endbr ; nop, it emit insn before checking relative offset.
> 
> V8 WASM uses jump tables; thus, it overwrites an other function call slot.
> 

https://chromium-review.googlesource.com/c/v8/v8/+/8063803

> This got catched with dcheck enabled.
> CONFIGURE_ARGS += --v8-with-dchecks
> 
> That's why I include a patch for
> deps/v8/src/snapshot/embedded/platform-embedded-file-writer-generic.h
> 
> I'm still running with dcheck enabled, so I didn't actually test the final 
> diff.
> More tests welcome.
> 
> I will run both node and node-v8 tests with dchecks.
> Maybe a separate commit related to dchecks only.

Still running with dcheck here, still fine.

There are a bunch of node tests failing that may be worthwhile checking.
fs.watch / watch-mode :
parallel/test-fs-promises-watch*
parallel/test-fs-watch*
parallel/test-watch*
sequential/test-watch-mode*

> 
>>
>> I'll test drive that for a bit, but what these patches do, or how they might 
>> fix
>> things is beyond my capabilities, so I hope that someone else will look over
>> them as well, particularly if this might improve things for other ports
>> including v8 (chromiums, deno, codex...)

find ./ -path */patches/*_v8_*
...

./devel/codex
./lang/deno
./lang/node
./www/chromium
./www/iridium
./www/ungoogled-chromium
./x11/qt5/qtwebengine
./x11/qt6/qtwebengine

Did I miss one?

I'm in a make & retry loop to make a lang/v8 test port.
Adding missing DEPS and patches ...

Again, it is just for testing purposes.
If I remember correctly, Google Source archives are not stable.
Thus, this port will not be reproducible at all.

> 
> There is also a regexp issue to fix.

For now, I think we have to disable regexp JIT.
I will further explain in a later email.

After testing the upstream WASM jump table fix.
After updating the node diff.

Index: deps/v8/src/flags/flag-definitions.h
--- deps/v8/src/flags/flag-definitions.h.orig
+++ deps/v8/src/flags/flag-definitions.h
@@ -2835,16 +2835,27 @@ 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")
 DEFINE_NEG_IMPLICATION(regexp_interpret_all, regexp_tier_up)
+#endif
 DEFINE_INT(regexp_tier_up_ticks, 1,
            "set the number of executions for the regexp interpreter before "
            "tiering-up to the compiler")

-- 
Fabien Romano

Reply via email to