Bug#1021894: openjfx: FTBFS on arm64 and armhf
tony mancill
tmancill at debian.org
Sat Jul 15 21:46:02 BST 2023
Hi Wookey,
Thank you for the investigation and the patch!
I intend to build and upload in the next few days, but you are welcome
to NMU if you would prefer.
Cheers,
tony
On Fri, Jul 14, 2023 at 02:28:14PM +0100, Wookey wrote:
> Source: openjfx
> Followup-For: Bug #1021894
>
> I was surprised to find that this package was missing on arm64 (making josm uninstallable) so I investigated.
>
> 11.0.11+0-1 built OK on 2021-02-03. But 11.0.11+1-3 FTBFS.
>
> 11.0.11+0-1 no longer builds either. Failing in:
> Execution failed for task ':media:buildAVPlugin'
> ../../../plugins/av/decoder.c:79:5: error: implicit declaration of function 'avcodec_register_all'
> which seems to be a problem with ffmpeg, but lets ignore that for now - it seems to be fixed with a patch in +1-3
>
> 11.0.11+1-3 fails with:
> [ 28%] Building CXX object Source/JavaScriptCore/CMakeFiles/LLIntOffsetsExtractor.dir/llint/LLIntOffsetsExtractor.cpp.o
> Gradle is still running, please be patient...
> In file included from /<<PKGBUILDDIR>>/modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:30,
> from /<<PKGBUILDDIR>>/modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/MacroAssembler.h:46,
> from /<<PKGBUILDDIR>>/modules/javafx.web/src/main/native/Source/JavaScriptCore/jit/GPRInfo.h:28,
> from /<<PKGBUILDDIR>>/modules/javafx.web/src/main/native/Source/JavaScriptCore/bytecode/ArithProfile.h:28,
> from /<<PKGBUILDDIR>>/modules/javafx.web/src/main/native/Source/JavaScriptCore/llint/LLIntOffsetsExtractor.cpp:28:
> /<<PKGBUILDDIR>>/modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/ARM64Assembler.h: In static member function ‘static void JSC::ARM64Assembler::replaceWithJump(void*, void*)’:
> /<<PKGBUILDDIR>>/modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/ARM64Assembler.h:2576:51: error: ‘class JSC::ExecutableAllocator’ has no member named ‘getJumpIslandTo’
> 2576 | to = ExecutableAllocator::singleton().getJumpIslandTo(where, to);
> | ^~~~~~~~~~~~~~~
> /<<PKGBUILDDIR>>/modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/ARM64Assembler.h: In static member function ‘static void* JSC::ARM64Assembler::prepareForAtomicRelinkJumpConcurrently(void*, void*)’:
> /<<PKGBUILDDIR>>/modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/ARM64Assembler.h:2781:49: error: ‘class JSC::ExecutableAllocator’ has no member named ‘getJumpIslandToConcurrently’
> 2781 | return ExecutableAllocator::singleton().getJumpIslandToConcurrently(from, to);
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> /<<PKGBUILDDIR>>/modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/ARM64Assembler.h: In static member function ‘static void JSC::ARM64Assembler::linkJumpOrCall(int*, const int*, void*)’:
> /<<PKGBUILDDIR>>/modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/ARM64Assembler.h:3024:51: error: ‘class JSC::ExecutableAllocator’ has no member named ‘getJumpIslandTo’
> 3024 | to = ExecutableAllocator::singleton().getJumpIslandTo(bitwise_cast<void*>(fromInstruction), to);
> | ^~~~~~~~~~~~~~~
>
> (Which is actually a different failure point from the one Sebastian posted in this bug)
>
> So all this jumpisland stuff comes from webkit's JavaScript JIT.
>
> It turns out that this upstream Webkit bug explains what's going on:
> https://bugs.webkit.org/show_bug.cgi?id=217079
> jumpislands allow +-128MB jumps to get to the whole 1GB executable space by having a particular memory layout.
> And the build should use _either_ the JIT or 'CLOOP', but not both.
>
> Applying the patch in that bug (which gates JUMP_ISLANDS on the JIT
> being enabled, and avoids compiling in a call to dumpJITMemory if JIT
> is disabled) allows everything to get compiled. However it then fails
> to link:
>
> [100%] Linking CXX shared library ../../lib/libjfxwebkit.so
> /usr/include/c++/11/ext/new_allocator.h:116: error: undefined reference to 'std::__throw_bad_array_new_length()'
> collect2: error: ld returned 1 exit status
> gmake[4]: *** [Source/WebKitLegacy/CMakeFiles/WebKitLegacy.dir/build.make:2237: lib/libjfxwebkit.so] Error 1
>
> Which seems to be a problem with compiling with gcc11/12, but then trying
> to link to the gcc-libstd++ from gcc10. Removing all the gcc-10
> packages from the build environment fixed this. I think this means
> the package should get a build-conflict on libstdc++-10-dev
>
> Also the discussion in the above bug suggests that the JIT should in fact be enabled on debian arm64.
> It only needs to be turned off on iOS and 64k aarch64 kernel (RHEL). I will test that next.
>
> Attached is the debdiff that at least makes the build work again for now. Happy to do an NMU if that's helpful
> diff -Nru openjfx-11.0.11+1/debian/changelog openjfx-11.0.11+1/debian/changelog
> --- openjfx-11.0.11+1/debian/changelog 2023-02-07 14:59:22.000000000 +0000
> +++ openjfx-11.0.11+1/debian/changelog 2023-07-14 11:53:33.000000000 +0000
> @@ -1,3 +1,10 @@
> +openjfx (11.0.11+1-3.1) UNRELEASED; urgency=medium
> +
> + * Non-maintainer upload.
> + * Apply patch from webkit #217079 so arm64 builds again
> +
> + -- Wookey <wookey at debian.org> Fri, 14 Jul 2023 11:53:33 +0000
> +
> openjfx (11.0.11+1-3) unstable; urgency=medium
>
> * Team upload.
> diff -Nru openjfx-11.0.11+1/debian/patches/38-javadoc.patch openjfx-11.0.11+1/debian/patches/38-javadoc.patch
> diff -Nru openjfx-11.0.11+1/debian/patches/series openjfx-11.0.11+1/debian/patches/series
> --- openjfx-11.0.11+1/debian/patches/series 2023-02-07 14:59:22.000000000 +0000
> +++ openjfx-11.0.11+1/debian/patches/series 2023-07-12 00:09:09.000000000 +0000
> @@ -20,3 +20,4 @@
> 36-disable-swt-on-32bit-arch.patch
> disable-ffmpeg.patch
> 38-javadoc.patch
> +webkit-217079-only-use-jumpislands-with-JIT.patch
> diff -Nru openjfx-11.0.11+1/debian/patches/webkit-217079-only-use-jumpislands-with-JIT.patch openjfx-11.0.11+1/debian/patches/webkit-217079-only-use-jumpislands-with-JIT.patch
> --- openjfx-11.0.11+1/debian/patches/webkit-217079-only-use-jumpislands-with-JIT.patch 1970-01-01 00:00:00.000000000 +0000
> +++ openjfx-11.0.11+1/debian/patches/webkit-217079-only-use-jumpislands-with-JIT.patch 2023-07-12 01:33:04.000000000 +0000
> @@ -0,0 +1,48 @@
> +Description: Fix code from Webkit to build on arm64 when JIT is disabled
> + REGRESSION(r259582): Build fails on aarch64 Linux with WebKit 2.30.1 on LLIntOffsetsExtractor.cpp.o
> + * assembler/LinkBuffer.cpp:
> + (JSC::LinkBuffer::copyCompactAndLinkCode): DOn't compile in a call to
> + dumpJITMemory if JIT is disabled; leads to a build failure.
> + * wtf/PlatformEnable.h: Only define USE_JUMP_ISLANDS if JIT is enabled.
> + This patch is a workaround rather than a proper fix. See bug discussion
> +Bug: https://bugs.webkit.org/show_bug.cgi?id=217079
> +Author: Mike Gorse <mgorse at suse.com>
> +Last-Update: 2020-09-30
> +
> +
> +
> +Index: openjfx-11.0.11+1/modules/javafx.web/src/main/native/Source/WTF/wtf/PlatformEnable.h
> +===================================================================
> +--- openjfx-11.0.11+1.orig/modules/javafx.web/src/main/native/Source/WTF/wtf/PlatformEnable.h
> ++++ openjfx-11.0.11+1/modules/javafx.web/src/main/native/Source/WTF/wtf/PlatformEnable.h
> +@@ -882,6 +882,6 @@
> + #error "ENABLE(WEBGL2) requires ENABLE(WEBGL)"
> + #endif
> +
> +-#if CPU(ARM64) && CPU(ADDRESS64)
> ++#if CPU(ARM64) && CPU(ADDRESS64) && ENABLE(JIT)
> + #define USE_JUMP_ISLANDS 1
> + #endif
> +Index: openjfx-11.0.11+1/modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/LinkBuffer.cpp
> +===================================================================
> +--- openjfx-11.0.11+1.orig/modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/LinkBuffer.cpp
> ++++ openjfx-11.0.11+1/modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/LinkBuffer.cpp
> +@@ -374,6 +374,7 @@ void LinkBuffer::copyCompactAndLinkCode(
> + m_executableMemory->shrink(m_size);
> + }
> +
> ++#if ENABLE(JIT)
> + if (useFastJITPermissions()) {
> + ASSERT(codeOutData == outData);
> + if (UNLIKELY(Options::dumpJITMemoryPath()))
> +@@ -382,6 +383,10 @@ void LinkBuffer::copyCompactAndLinkCode(
> + ASSERT(codeOutData != outData);
> + performJITMemcpy(codeOutData, outData, m_size);
> + }
> ++#else
> ++ ASSERT(codeOutData != outData);
> ++ performJITMemcpy(codeOutData, outData, m_size);
> ++#endif // ENABLE_JIT
> +
> + jumpsToLink.clear();
> +
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-maintainers/attachments/20230715/c02623ce/attachment-0001.sig>
More information about the pkg-java-maintainers
mailing list