Some more analysis: Tried to explicitely compile as well as exclude few methods during compilation such as 'java.lang.StringLatin1::hashCode', 'java.util.concurrent.ConcurrentHashMap', 'java.lang.String*' which are part of trace as logged in above comments, with the help of advanced JIT options. However it is not good enough to draw any conclusion as `java -version` command passes on random runs. `mvn -v` which consistently fails, is seen to be passing always with any of above combination set using MAVEN_OPTS. Also compared the assembly log as @jonalbrecht mentioned above on qemu setup vs native s390x for `mvn -v` command. The initial few compiled methods match, however it fails for 'java.lang.String::isLatin1': Failure in qemu : ImmutableOopMap{Z_R2=Oop }pc offsets: 170 232 244 272 Compiled method (c1) 1077 12 2 java.lang.String::equalsIgnoreCase (45 bytes) total in heap [0x00000040117f2210,0x00000040117f28b0] = 1696 relocation [0x00000040117f2370,0x00000040117f23c8] = 88 constants [0x00000040117f2400,0x00000040117f2440] = 64 main code [0x00000040117f2440,0x00000040117f2600] = 448 stub code [0x00000040117f2600,0x00000040117f2668] = 104 metadata [0x00000040117f2668,0x00000040117f2688] = 32 scopes data [0x00000040117f2688,0x00000040117f2738] = 176 scopes pcs [0x00000040117f2738,0x00000040117f2888] = 336 dependencies [0x00000040117f2888,0x00000040117f2890] = 8 nul chk table [0x00000040117f2890,0x00000040117f28b0] = 32 ImmutableOopMap{}pc offsets: 288 ImmutableOopMap{Z_R2=Oop Z_R5=Oop }pc offsets: 372 ImmutableOopMap{Z_R5=Oop Z_R2=Oop }pc offsets: 384 392 400 unimplemented opcode 0x0000 # # A fatal error has been detected by the Java Runtime Environment: # # SIGILL (0x4) at pc=0x00000040117f1680, pid=11738, tid=11787 # # JRE version: OpenJDK Runtime Environment (11.0.11+9) (build 11.0.11+9-Ubuntu-0ubuntu2.20.04) # Java VM: OpenJDK 64-Bit Server VM (11.0.11+9-Ubuntu-0ubuntu2.20.04, compiled mode, tiered, compressed oops, g1 gc, linux-s390x) # Problematic frame: # J 9 c1 java.lang.String.hashCode()I java.base (49 bytes) @ 0x00000040117f1680 [0x00000040117f1640+0x0000000000000040] # # Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport %p %s %c %d %P %E" (or dumping to //core.11738) # # An error report file with more information is saved as: # //hs_err_pid11738.log vs Native s390x log: ImmutableOopMap{Z_R2=Oop }pc offsets: 170 232 244 272 Compiled method (c1) 34 12 2 java.lang.String::equalsIgnoreCase (45 bytes) total in heap [0x000003ff7a097110,0x000003ff7a0977b0] = 1696 relocation [0x000003ff7a097270,0x000003ff7a0972c8] = 88 constants [0x000003ff7a097300,0x000003ff7a097340] = 64 main code [0x000003ff7a097340,0x000003ff7a097500] = 448 stub code [0x000003ff7a097500,0x000003ff7a097568] = 104 metadata [0x000003ff7a097568,0x000003ff7a097588] = 32 scopes data [0x000003ff7a097588,0x000003ff7a097638] = 176 scopes pcs [0x000003ff7a097638,0x000003ff7a097788] = 336 dependencies [0x000003ff7a097788,0x000003ff7a097790] = 8 nul chk table [0x000003ff7a097790,0x000003ff7a0977b0] = 32 ImmutableOopMap{}pc offsets: 276 ImmutableOopMap{Z_R2=Oop Z_R5=Oop }pc offsets: 360 ImmutableOopMap{Z_R5=Oop Z_R2=Oop }pc offsets: 372 380 388 Compiled method (c1) 34 13 2 java.lang.String::isLatin1 (19 bytes) total in heap [0x000003ff7a097810,0x000003ff7a097c10] = 1024 relocation [0x000003ff7a097970,0x000003ff7a097990] = 32 constants [0x000003ff7a0979c0,0x000003ff7a097a00] = 64 main code [0x000003ff7a097a00,0x000003ff7a097b40] = 320 stub code [0x000003ff7a097b40,0x000003ff7a097b98] = 88 metadata [0x000003ff7a097b98,0x000003ff7a097ba0] = 8 scopes data [0x000003ff7a097ba0,0x000003ff7a097bb8] = 24 scopes pcs [0x000003ff7a097bb8,0x000003ff7a097c08] = 80 dependencies [0x000003ff7a097c08,0x000003ff7a097c10] = 8 ..................................................