Hi all

Recently we at JetBrains became getting the following build failure for Linux 
aarch64 musl

===============================8<-------------------------------
. . .
Compiling up to 55 files for jdk.jpackage
/mnt/agent/work/f25b6e4d8156543c/src/hotspot/share/runtime/synchronizer.cpp: In 
static member function 'static intptr_t 
ObjectSynchronizer::FastHashCode(Thread*, oop)':
/mnt/agent/work/f25b6e4d8156543c/src/hotspot/share/runtime/synchronizer.cpp:1116:1:
 error: unable to generate reloads for:
1116 | }
| ^
(insn 565 564 566 28 (set (reg/v:DI 2 x2 [ reg2 ])
(ior:DI (and:DI (ashift:DI (reg/v:DI 188 [ <retval> ])
(const_int 8 [0x8]))
(const_int 549755813632 [0x7fffffff00]))
(and:DI (reg/v:DI 1 x1 [ reg1 ])
(const_int -549755813633 [0xffffff80000000ff])))) 
"/mnt/agent/work/f25b6e4d8156543c/src/hotspot/os_cpu/linux_aarch64/atomic_linux_aarch64.hpp":49:21
 792 {*aarch64_bfidi5_shift_alt}
(nil))
during RTL pass: reload
/mnt/agent/work/f25b6e4d8156543c/src/hotspot/share/runtime/synchronizer.cpp:1116:1:
 internal compiler error: in curr_insn_transform, at lra-constraints.c:3962
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://gcc.gnu.org/bugs/> for instructions.
make[3]: *** [lib/CompileJvm.gmk:168: 
/mnt/agent/work/f25b6e4d8156543c/build/linux-aarch64-server-release/hotspot/variant-server/libjvm/objs/synchronizer.o]
 Error 1
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [make/Main.gmk:245: hotspot-server-libs] Error 2
. . .
===============================8<———————————————

Note Linux x86_64 musl is successful.

After reverting the following changes, the aarch64 build becomes successful
 - 8337987: Relocate jfr and throw_exception stubs from StubGenerator to 
SharedRuntime 
(https://github.com/openjdk/jdk/commit/f0374a0bc181d0f2a8c0aa9aa032b07998ffaf60)
 - 8315884: New Object to ObjectMonitor mapping 
(https://github.com/openjdk/jdk/commit/bd4160cea8b6b0fcf0507199ed76a12f5d0aaba9)

Building for aarch64 is started within a docker containers.
Image of this container may be found at
-  
https://hub.docker.com/layers/jetbrains/runtime/jbr21env_musl_aarch64/images/sha256-ef9a642934f04ec50598b3f920e468d5dc01a5691f7693b34a4e37e5d25c4658
 

The docker file may be found here:
- 
https://github.com/JetBrains/JetBrainsRuntime/blob/main/jb/project/docker/Dockerfile.musl_aarch64

The container is being started on Ubuntu 22.04 aarch64


Just in case x86_64 is also started within a docker container. Its image and 
docker file
- 
https://hub.docker.com/layers/jetbrains/runtime/jbr21env_musl_x64/images/sha256-4d7b86ba4fa367c4a0613219bd997365f6b794091df902f16e24f06f9fd45a86
 
- 
https://github.com/JetBrains/JetBrainsRuntime/blob/main/jb/project/docker/Dockerfile.musl_x64
 


Not sure if a ticket should be submitted against this issue into JBS because I 
could not find any info about supporting build platform for at Linux aarch64 
musl at https://wiki.openjdk.org/display/Build/Supported+Build+Platforms. 
Hopefully the list of supported platforms was outdated and aarch64 is still 
supported...

Thanks
Vitaly

> On 16 Aug 2024, at 10:23, Axel Boldt-Christmas <abold...@openjdk.org> wrote:
> 
> On Thu, 15 Aug 2024 06:12:22 GMT, Axel Boldt-Christmas <abold...@openjdk.org> 
> wrote:
> 
>>> When inflating a monitor the `ObjectMonitor*` is written directly over the 
>>> `markWord` and any overwritten data is displaced into a displaced 
>>> `markWord`. This is problematic for concurrent GCs which needs extra care 
>>> or looser semantics to use this displaced data. In Lilliput this data also 
>>> contains the klass forcing this to be something that the GC has to take 
>>> into account everywhere.
>>> 
>>> This patch introduces an alternative solution where locking only uses the 
>>> lock bits of the `markWord` and inflation does not override and displace 
>>> the `markWord`. This is done by keeping associations between objects and 
>>> `ObjectMonitor*` in an external hash table. Different caching techniques 
>>> are used to speedup lookups from compiled code.
>>> 
>>> A diagnostic VM option is introduced called `UseObjectMonitorTable`. It is 
>>> only supported in combination with the LM_LIGHTWEIGHT locking mode (the 
>>> default). 
>>> 
>>> This patch has been evaluated to be performance neutral when 
>>> `UseObjectMonitorTable` is turned off (the default). 
>>> 
>>> Below is a more detailed explanation of this change and how 
>>> `LM_LIGHTWEIGHT` and `UseObjectMonitorTable` works.
>>> 
>>> # Cleanups
>>> 
>>> Cleaned up displaced header usage for:
>>>  * BasicLock
>>>    * Contains some Zero changes
>>>    * Renames one exported JVMCI field
>>>  * ObjectMonitor
>>>    * Updates comments and tests consistencies
>>> 
>>> # Refactoring
>>> 
>>> `ObjectMonitor::enter` has been refactored an a 
>>> `ObjectMonitorContentionMark` witness object has been introduced to the 
>>> signatures. Which signals that the contentions reference counter is being 
>>> held. More details are given below in the section about deflation.
>>> 
>>> The initial purpose of this was to allow `UseObjectMonitorTable` to 
>>> interact more seamlessly with the `ObjectMonitor::enter` code. 
>>> 
>>> _There is even more `ObjectMonitor` refactoring which can be done here to 
>>> create a more understandable and enforceable API. There are a handful of 
>>> invariants / assumptions which are not always explicitly asserted which 
>>> could be trivially abstracted and verified by the type system by using 
>>> similar witness objects._
>>> 
>>> # LightweightSynchronizer
>>> 
>>> Working on adapting and incorporating the following section as a comment in 
>>> the source code
>>> 
>>> ## Fast Locking
>>> 
>>>  CAS on locking bits in markWord. 
>>>  0b00 (Fast Locked) <--> 0b01 (Unlocked)
>>> 
>>>  When locking and 0b00 (Fast Locked) is observed, it may be beneficial to 
>>> avoid inflating by spinning a bit.
>>> 
>>>  If 0b10 (Inflated) is observed or there is to...
>> 
>> Axel Boldt-Christmas has updated the pull request incrementally with one 
>> additional commit since the last revision:
>> 
>>  Remove newline
> 
> Thanks for all the reviews and contributions.
> 
> -------------
> 
> PR Comment: https://git.openjdk.org/jdk/pull/20067#issuecomment-2292891722


Reply via email to