Since upstream webkit(gtk) switched to JIT by default on riscv64, www/webkitgtk4 doesn't build on riscv64.
http://build-failures.rhaalovely.net/riscv64/2023-06-30/www/webkitgtk4%2Cwebkitgtk41.log LowLevelInterpreter.asm doesn't seem fit for architectures that use the C_LOOP interpreter (powerpc, powerpc64, sparc64...) instead of JIT. Some fix might be needed here. Regarding riscv64, I suggest we go with the flow and enable the JIT on riscv64. The diff below drops one patch and adds another one: RISCV64Assembler.h assumes that intptr_t and int64_t are the same type, which isn't the case on OpenBSD (long vs long long) ; I merely added workarounds. Obviously MachineContext.h needs definitions for riscv64 too, I hope I haven't messed on of these. Using this diff, libexec/jsc computes 1+1 without crashing. Sadly I was not able to test libexec/MiniBrowser over SSH X11 forwarding (WebProcess appears to crash with an X11 error[0], just like on amd64). ok? [0] https://pbot.rmdir.de/IdcxBLvuqtLXUwmqtqHt1A Index: Makefile =================================================================== RCS file: /cvs/ports/www/webkitgtk4/Makefile,v retrieving revision 1.194 diff -u -p -r1.194 Makefile --- Makefile 5 Jul 2023 03:53:26 -0000 1.194 +++ Makefile 16 Jul 2023 13:28:32 -0000 @@ -111,10 +111,10 @@ CONFIGURE_ARGS += -DUSE_WPE_RENDERER=OFF CONFIGURE_ARGS += -DENABLE_GAMEPAD=OFF # sync with Source/JavaScriptCore/assembler/MacroAssembler.h -# native support for riscv64 in LLInt fails to link with relocation errors .if ${MACHINE_ARCH} != "aarch64" && ${MACHINE_ARCH} != "amd64" && \ ${MACHINE_ARCH} != "arm" && ${MACHINE_ARCH} != "i386" && \ - ${MACHINE_ARCH} != "mips64" && ${MACHINE_ARCH} != "mips64el" + ${MACHINE_ARCH} != "mips64" && ${MACHINE_ARCH} != "mips64el" && \ + ${MACHINE_ARCH} != "riscv64" # #error "The MacroAssembler is not supported on this platform." CONFIGURE_ARGS += -DENABLE_JIT=OFF CONFIGURE_ARGS += -DENABLE_C_LOOP=ON Index: patches/patch-Source_JavaScriptCore_assembler_RISCV64Assembler_h =================================================================== RCS file: patches/patch-Source_JavaScriptCore_assembler_RISCV64Assembler_h diff -N patches/patch-Source_JavaScriptCore_assembler_RISCV64Assembler_h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-Source_JavaScriptCore_assembler_RISCV64Assembler_h 19 Jul 2023 12:29:14 -0000 @@ -0,0 +1,55 @@ +Add definitions to work around type assumptions: on OpenBSD intptr_t is a long +and int64_t is a long long. + +Index: Source/JavaScriptCore/assembler/RISCV64Assembler.h +--- Source/JavaScriptCore/assembler/RISCV64Assembler.h.orig ++++ Source/JavaScriptCore/assembler/RISCV64Assembler.h +@@ -186,7 +186,7 @@ struct ImmediateBase { + + template<typename T> + static auto isValid(T immValue) +- -> std::enable_if_t<(std::is_same_v<T, int32_t> || std::is_same_v<T, int64_t>), bool> ++ -> std::enable_if_t<(std::is_same_v<T, int32_t> || std::is_same_v<T, int64_t> || std::is_same_v<T, intptr_t>), bool> + { + constexpr unsigned shift = sizeof(T) * 8 - immediateSize; + return immValue == ((immValue << shift) >> shift); +@@ -209,6 +209,14 @@ struct ImmediateBase { + } + + template<typename ImmediateType> ++ static ImmediateType v(intptr_t immValue) ++ { ++ ASSERT(isValid(immValue)); ++ intptr_t value = *reinterpret_cast<intptr_t*>(&immValue); ++ return ImmediateType(uint32_t(value & immediateMask<intptr_t>())); ++ } ++ ++ template<typename ImmediateType> + static ImmediateType v(int64_t immValue) + { + ASSERT(isValid(immValue)); +@@ -310,7 +318,7 @@ struct JImmediate : ImmediateBase<21> { + }; + + struct ImmediateDecomposition { +- template<typename T, typename = std::enable_if_t<(std::is_same_v<T, int32_t> || std::is_same_v<T, int64_t>)>> ++ template<typename T, typename = std::enable_if_t<(std::is_same_v<T, int32_t> || std::is_same_v<T, int64_t> || std::is_same_v<T, intptr_t>)>> + explicit ImmediateDecomposition(T immediate) + : upper(UImmediate(0)) + , lower(IImmediate(0)) +@@ -2182,7 +2190,15 @@ class RISCV64Assembler { (public) + : ImmediateLoader(int64_t(imm)) + { } + ++ ImmediateLoader(intptr_t imm) ++ : ImmediateLoader(int64_t(imm)) ++ { } ++ + ImmediateLoader(PlaceholderTag, int32_t imm) ++ : ImmediateLoader(Placeholder, int64_t(imm)) ++ { } ++ ++ ImmediateLoader(PlaceholderTag, intptr_t imm) + : ImmediateLoader(Placeholder, int64_t(imm)) + { } + Index: patches/patch-Source_JavaScriptCore_runtime_MachineContext_h =================================================================== RCS file: /cvs/ports/www/webkitgtk4/patches/patch-Source_JavaScriptCore_runtime_MachineContext_h,v retrieving revision 1.11 diff -u -p -r1.11 patch-Source_JavaScriptCore_runtime_MachineContext_h --- patches/patch-Source_JavaScriptCore_runtime_MachineContext_h 17 Sep 2022 08:13:54 -0000 1.11 +++ patches/patch-Source_JavaScriptCore_runtime_MachineContext_h 19 Jul 2023 11:44:32 -0000 @@ -1,7 +1,7 @@ Index: Source/JavaScriptCore/runtime/MachineContext.h --- Source/JavaScriptCore/runtime/MachineContext.h.orig +++ Source/JavaScriptCore/runtime/MachineContext.h -@@ -193,6 +193,22 @@ static inline void*& stackPointerImpl(mcontext_t& mach +@@ -193,6 +193,24 @@ static inline void*& stackPointerImpl(mcontext_t& mach #error Unknown Architecture #endif @@ -17,6 +17,8 @@ Index: Source/JavaScriptCore/runtime/Mac + return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_sp); +#elif CPU(MIPS) + return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_regs[29]); ++#elif CPU(RISCV64) ++ return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_sp); +#else +#error Unknown Architecture +#endif @@ -24,7 +26,7 @@ Index: Source/JavaScriptCore/runtime/Mac #elif OS(FUCHSIA) || OS(LINUX) #if CPU(X86) -@@ -338,6 +354,22 @@ static inline void*& framePointerImpl(mcontext_t& mach +@@ -338,6 +356,24 @@ static inline void*& framePointerImpl(mcontext_t& mach #error Unknown Architecture #endif @@ -40,6 +42,8 @@ Index: Source/JavaScriptCore/runtime/Mac + return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_x[29]); +#elif CPU(MIPS) + return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_regs[30]); ++#elif CPU(RISCV64) ++ return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_s[0]); +#else +#error Unknown Architecture +#endif @@ -47,7 +51,7 @@ Index: Source/JavaScriptCore/runtime/Mac #elif OS(FUCHSIA) || OS(LINUX) // The following sequence depends on glibc's sys/ucontext.h. -@@ -496,6 +528,22 @@ static inline void*& instructionPointerImpl(mcontext_t +@@ -496,6 +532,24 @@ static inline void*& instructionPointerImpl(mcontext_t #error Unknown Architecture #endif @@ -63,6 +67,8 @@ Index: Source/JavaScriptCore/runtime/Mac + return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_elr); +#elif CPU(MIPS) + return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_pc); ++#elif CPU(RISCV64) ++ return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_sepc); +#else +#error Unknown Architecture +#endif @@ -70,7 +76,7 @@ Index: Source/JavaScriptCore/runtime/Mac #elif OS(FUCHSIA) || OS(LINUX) // The following sequence depends on glibc's sys/ucontext.h. -@@ -652,6 +700,22 @@ inline void*& argumentPointer<1>(mcontext_t& machineCo +@@ -652,6 +706,24 @@ inline void*& argumentPointer<1>(mcontext_t& machineCo #error Unknown Architecture #endif @@ -86,6 +92,8 @@ Index: Source/JavaScriptCore/runtime/Mac + return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_x[1]); +#elif CPU(MIPS) + return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_regs[5]); ++#elif CPU(RISCV64) ++ return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_a[1]); +#else +#error Unknown Architecture +#endif @@ -93,12 +101,10 @@ Index: Source/JavaScriptCore/runtime/Mac #elif OS(FUCHSIA) || OS(LINUX) // The following sequence depends on glibc's sys/ucontext.h. -@@ -765,6 +829,22 @@ inline void*& llintInstructionPointer(mcontext_t& mach - return reinterpret_cast<void*&>((uintptr_t&) machineContext.__gregs[_REG_R8]); - #elif CPU(ARM64) +@@ -767,6 +839,24 @@ inline void*& llintInstructionPointer(mcontext_t& mach return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_gpregs.gp_x[4]); -+#elif CPU(MIPS) -+ return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_regs[12]); + #elif CPU(MIPS) + return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_regs[12]); +#else +#error Unknown Architecture +#endif @@ -113,6 +119,10 @@ Index: Source/JavaScriptCore/runtime/Mac + return reinterpret_cast<void*&>((uintptr_t&) machineContext.__gregs[_REG_R8]); +#elif CPU(ARM64) + return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_x[4]); - #elif CPU(MIPS) - return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_regs[12]); ++#elif CPU(MIPS) ++ return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_regs[12]); ++#elif CPU(RISCV64) ++ return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_a[3]); #else + #error Unknown Architecture + #endif Index: patches/patch-Source_WTF_wtf_PlatformHave_h =================================================================== RCS file: /cvs/ports/www/webkitgtk4/patches/patch-Source_WTF_wtf_PlatformHave_h,v retrieving revision 1.9 diff -u -p -r1.9 patch-Source_WTF_wtf_PlatformHave_h --- patches/patch-Source_WTF_wtf_PlatformHave_h 7 Apr 2023 14:49:49 -0000 1.9 +++ patches/patch-Source_WTF_wtf_PlatformHave_h 18 Jul 2023 15:50:11 -0000 @@ -1,18 +0,0 @@ -Undo parts of upstream commit 6c2615dd66a12e9a10d7867241cc3bedfb2b2473 [0] -Machine context definitions were only added for Linux. -[0] https://github.com/WebKit/WebKit/commit/6c2615dd66a12e9a10d7867241cc3bedfb2b2473 - -Index: Source/WTF/wtf/PlatformHave.h ---- Source/WTF/wtf/PlatformHave.h.orig -+++ Source/WTF/wtf/PlatformHave.h -@@ -229,6 +229,10 @@ - #define HAVE_MACHINE_CONTEXT 1 - #endif - -+#if OS(OPENBSD) && CPU(RISCV64) -+#undef HAVE_MACHINE_CONTEXT -+#endif -+ - #if OS(DARWIN) || (OS(LINUX) && defined(__GLIBC__) && !defined(__UCLIBC__) && !CPU(MIPS)) - #define HAVE_BACKTRACE 1 - #endif -- jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE