APAR status
Closed as program error.
Error description
Error Message: A SIGSEGV (Signal 11/0xB) during a GC cycle . Stack Trace: {libj9gc29.so}{_ZN23MM_ScavengerRootScanner11doStackSlotEPP8J9Ob jectPvPKv} {libj9gc29.so}{_Z17stackSlotIteratorP8J9JavaVMPP8J9ObjectPvP16J9 StackWalkStatePKv} {libj9gc29.so}{vmThreadStackDoOSlotIterator} {libj9jit29.so}{jitWalkFrame} {libj9jit29.so}{jitWalkStackFrames} {libj9vm29.so}{walkStackFrames} {libj9gc29.so}{_ZN28GC_VMThreadStackSlotIterator9scanSlotsEP10J9 VMThreadS1_PvPFvP8J9JavaVMPP8J9ObjectS2_P16J9StackWalkStatePKvEb b} {libj9gc29.so}{_ZN14MM_RootScanner13scanOneThreadEP18MM_Environm entBaseP10J9VMThreadPv} {libj9gc29.so}{_ZN14MM_RootScanner11scanThreadsEP18MM_Environmen tBase} {libj9gc29.so}{_ZN14MM_RootScanner9scanRootsEP18MM_EnvironmentBa se} {libj9gc29.so}{_ZN12MM_Scavenger24workThreadGarbageCollectEP22MM _EnvironmentStandard} {libj9gc29.so}{_ZN23MM_ParallelScavengeTask3runEP18MM_Environmen tBase} . The problem can only occur when running after a CRIU restore or when loading portable AOT code (i.e AOT code compiled from inside a Linux container). The issue requires that the JIT compiles portable code that is targeting a CPU that is less then POWER10 (currently portable code targets POWER8), and the machine loading the portable code must be running a POWER10 CPU.
Local fix
The problem can be avoided by preventing the JVM from loading the portable code (for the AOT case anyhow), this can be accomplished by using the "-Xshareclasses:none" java command line argument which will effect startup time but should not effect steady state execution speed. The other option is to put the POWER10 machine in "compatibility mode" which will prevent the JVM from generating code targeting POWER10.
Problem summary
With POWER10 there is a new instruction that the JIT makes use of to efficiently load 64bit constants. Prior to POWER10 the JIT would make use of a table of constants and dedicate a register to point as this table. With POWER10 we can free up that register and therefore make the register available for other uses. This difference between P10 and older POWER machines caused an incompatibility when executing portable code that is compiled for P8 mixed with normal JIT code compiled for P10.
Problem conclusion
When compiling portable code the JIT will now save and restore the register that is dedicated for the table of constants pointer. https://github.com/eclipse-openj9/openj9/pull/17964 . This APAR will be fixed in the following Releases: . IBM Semeru Runtimes 11 11.0.21.0 17 17.0.9.0 IBM SDK, Java Technology Edition 8 SR8 FP11 (8.0.8.11) . Contact your IBM Product's Service Team for these Service Refreshes and Fix Packs. For those running stand-alone, information about the available maintenance can be found at: https://www.ibm.com/support/pages/java-sdk
Temporary fix
Comments
APAR Information
APAR number
IJ48654
Reported component name
JIT
Reported component ID
620700124
Reported release
130
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt / Xsystem
Submitted date
2023-09-21
Closed date
2023-09-21
Last modified date
2023-09-21
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
JIT
Fixed component ID
620700124
Applicable component levels
[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSNVBF","label":"Runtimes for Java Technology"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"130","Line of Business":{"code":"LOB36","label":"IBM Automation"}}]
Document Information
Modified date:
21 September 2023