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