SIGBUS in Access<1572864UL>::store_at<int> on Solaris/SPARC

Roman Kennke rkennke at redhat.com
Thu Feb 22 19:02:01 UTC 2018


Hmm. None of the tests mentioned in bug fails for me. While the patch
is obvious (see below) I have no way to verify that it actually fixes
the problem.

# HG changeset patch
# Parent f05f4b5cea20d69ac4cc56baf63c55c7e6c0f05c
diff --git a/src/hotspot/share/oops/typeArrayOop.inline.hpp
b/src/hotspot/share/oops/typeArrayOop.inline.hpp
--- a/src/hotspot/share/oops/typeArrayOop.inline.hpp
+++ b/src/hotspot/share/oops/typeArrayOop.inline.hpp
@@ -130,7 +130,7 @@
   return HeapAccess<IN_HEAP_ARRAY>::load_at(as_oop(), offset);
 }
 inline void typeArrayOopDesc::short_at_put(int which, jshort contents) {
-  ptrdiff_t offset = element_offset<jshort>(T_BOOLEAN, which);
+  ptrdiff_t offset = element_offset<jshort>(T_SHORT, which);
   HeapAccess<IN_HEAP_ARRAY>::store_at(as_oop(), offset, contents);
 }




On Thu, Feb 22, 2018 at 7:49 PM, Roman Kennke <rkennke at redhat.com> wrote:
> well, if you store a short (2-bytes) into an offset computed for
> boolean (1-byte) you may store unaligned?
>
> Should I take over bug JDK-8198564 (after all, it was my change) or is
> somebody already on it?
>
> Roman
>
> On Thu, Feb 22, 2018 at 6:33 PM, Volker Simonis
> <volker.simonis at gmail.com> wrote:
>> On Thu, Feb 22, 2018 at 6:19 PM, Stefan Karlsson <stefan.karlsson at oracle.com
>>> wrote:
>>
>>> This looks suspicious:
>>>
>>> +inline void typeArrayOopDesc::short_at_put(int which, jshort contents) {+  ptrdiff_t offset = element_offset<jshort>(T_BOOLEAN, which);+  HeapAccess<IN_HEAP_ARRAY>::store_at(as_oop(), offset, contents);+}
>>>
>>>
>>> T_BOOLEAN together with jshort ...
>>>
>>>
>> Yes, that seems like a copy/paste error (which should be fixed), but in the
>> end it is only used here as input for:
>>
>> Universe::element_type_should_be_aligned(type)
>>
>> and that one only differentiates between T_DOUBLE/T_LONG and all the other
>> basic types. So it's probably not the cause for this error.
>>
>> Thanks,
>> Volker
>>
>>
>>> StefanK
>>>
>>>
>>>
>>> On 2018-02-22 18:12, Volker Simonis wrote:
>>>
>>> Hi,
>>>
>>> since the push of "8197999: Accessors in typeArrayOopDesc should use new
>>> Access API" we see crashes on Solaris/SPARC (see below). The disassembly at
>>> the crash instruction looks as follows:
>>>
>>> ldx  [ %fp + 0x7df ], %o4
>>> st  %i2, [ %o4 + %i1 ]
>>>
>>> O4=0x00000007b80e0468
>>> I1=0x0000000000000012
>>>
>>> which results in an unaligned access:
>>>
>>> siginfo: si_signo: 10 (SIGBUS), si_code: 1 (BUS_ADRALN), si_addr:
>>> 0x00000007b80e047a
>>>
>>> We are compiling with SS12u4 with updates from October 2017 (i.e. Sun C++
>>> 5.13 SunOS_sparc Patch 151845-28 2017/09/19) and running on Solaris 11.3.
>>> Which compilers are you using for compiling jdk-hs on Sun/SPARC?
>>>
>>> Do you have seen this as well or do you have any idea what might have
>>> caused this?
>>>
>>> Thank you and best regards,
>>> Volker
>>>
>>> #
>>> # A fatal error has been detected by the Java Runtime Environment:
>>> #
>>> #  SIGBUS (0xa) at pc=0xfffffff67ffdb4d8, pid=321, tid=58934
>>> #
>>> # JRE version: OpenJDK Runtime Environment (11.0.1) (fastdebug build
>>> 11.0.0.1-internal+0-adhoc..jdk-hs)
>>> # Java VM: OpenJDK 64-Bit Server VM (fastdebug
>>> 11.0.0.1-internal+0-adhoc..jdk-hs, mixed mode, tiered, compressed oops, g1
>>> gc, solaris-sparc)
>>> # Problematic frame:
>>> # V  [libjvm.so+0xcdb4d8]  void
>>> Access<1572864UL>::store_at<int>(oop,long,__type_1)+0xd8
>>> #
>>> # Core dump will be written. Default location:
>>> /priv/jvmtests/output_sapjvm11_o_jdk-hs_dbgU_sun_64/jck_lang_vm_work/core
>>> or core.321
>>> #
>>> # If you would like to submit a bug report, please visit:
>>> #   http://bugreport.java.com/bugreport/crash.jsp
>>> #
>>>
>>> ---------------  S U M M A R Y ------------
>>>
>>> Command Line: -Djava.awt.headless=true -Xms128m -Xmx288m
>>> -XX:MaxJavaStackTraceDepth=1024 -Xverify:all -XX:+FailOverToOldVerifier
>>> -Xverify:all -agentlib:jckjvmti=same -Djdk.xml.maxXMLNameLimit=4000
>>> -Djava.net.preferIPv4Stack=true
>>> -Djava.security.auth.policy=/sapmnt/hs0131/a/sapjvm_dev/jck/jck11/JCK-runtime-11/lib/jck.auth.policy
>>> -Djava.security.auth.login.config=/sapmnt/hs0131/a/sapjvm_dev/jck/jck11/JCK-runtime-11/lib/jck.auth.login.config
>>> -Djava.security.policy=/sapmnt/hs0131/a/sapjvm_dev/jck/jck11/JCK-runtime-11/lib/jck.policy
>>> -Djava.io.tmpdir=/priv/jvmtests/output_sapjvm11_o_jdk-hs_dbgU_sun_64/jck_lang_vm_work/tempdir
>>> -Djavatest.security.allowPropertiesAccess=true
>>> -Djava.util.prefs.userRoot=/priv/jvmtests/output_sapjvm11_o_jdk-hs_dbgU_sun_64/jck_lang_vm_work/tempdir
>>> -Djava.rmi.activation.port=6284 com.sun.javatest.agent.AgentMain -active
>>> -activeHost localhost -activePort 6584
>>>
>>> Host: us04z2, Sparcv9 64 bit 2998 MHz, 128 cores, 100G, Oracle Solaris 11.3
>>> SPARC
>>> Time: Thu Feb 22 09:24:06 2018 CET elapsed time: 2872 seconds (0d 0h 47m
>>> 52s)
>>>
>>> ---------------  T H R E A D  ---------------
>>>
>>> Current thread (0x0000000108bca000):  JavaThread "Thread-41287"
>>> [_thread_in_vm, id=58934, stack(0xffffffff3f900000,0xffffffff3fa00000)]
>>>
>>> Stack: [0xffffffff3f900000,0xffffffff3fa00000],  sp=0xffffffff3f9fd340,
>>>  free space=1012k
>>> Native frames: (J=compiled Java code, A=aot compiled Java code,
>>> j=interpreted, Vv=VM code, C=native code)
>>> V  [libjvm.so+0xcdb4d8]  void
>>> Access<1572864UL>::store_at<int>(oop,long,__type_1)+0xd8
>>> V  [libjvm.so+0x1bd2900]  void
>>> Reflection::array_set(jvalue*,arrayOop,int,BasicType,Thread*)+0x300
>>> V  [libjvm.so+0x11cf464]  JVM_SetArrayElement+0x6e4
>>> C  [libjava.so+0x147e8]  Java_java_lang_reflect_Array_set+0x18
>>> j
>>>  java.lang.reflect.Array.set(Ljava/lang/Object;ILjava/lang/Object;)V+-1473468376java.base at 11.0.0.1-internal
>>> j  java.lang.reflect.Array.set(Ljava/lang/Object;ILjava/lang/Object;)V+0java.base at 11.0.0.1-internal
>>> j
>>>  javasoft.sqe.tests.vm.concepts.execution.execution080.execution08001.execution08001.run([Ljava/lang/String;Ljava/io/PrintStream;)I+617
>>> v  ~StubRoutines::call_stub
>>> V  [libjvm.so+0x108989c]  void JavaCalls::call_helper(JavaValue*,const
>>> methodHandle&,JavaCallArguments*,Thread*)+0x5bc
>>> V  [libjvm.so+0x1be0410]  oop invoke(InstanceKlass*,const
>>> methodHandle&,Handle,bool,objArrayHandle,BasicType,objArrayHandle,bool,Thread*)+0x2c60
>>> V  [libjvm.so+0x1be1084]  oop
>>> Reflection::invoke_method(oop,Handle,objArrayHandle,Thread*)+0x7b4
>>> V  [libjvm.so+0x11d2868]  JVM_InvokeMethod+0x5d8
>>> C  [libjava.so+0x16458]
>>>  Java_jdk_internal_reflect_NativeMethodAccessorImpl_invoke0+0x18
>>> J 1506
>>>  jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;java.base at 11.0.0.1-internal (0 bytes) @ 0xffffffff6f8ad338
>>> [0xffffffff6f8ad040+0x00000000000002f8]
>>> J 6474 c2
>>> jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;java.base at 11.0.0.1-internal (104 bytes) @ 0xffffffff6fd959c4
>>> [0xffffffff6fd95960+0x0000000000000064]
>>> J 5773 c2
>>> jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;java.base at 11.0.0.1-internal (10 bytes) @ 0xffffffff6f83e670
>>> [0xffffffff6f83e620+0x0000000000000050]
>>> J 4866 c1
>>> com.sun.jck.lib.ExecJCKTestSameJVMCmd$SimpleTest.run([Ljava/lang/String;Ljava/io/PrintWriter;Ljava/io/PrintWriter;)Lcom/sun/javatest/Status;
>>> (405 bytes) @ 0xffffffff696dfee4 [0xffffffff696df0a0+0x0000000000000e44]
>>> J 5654 c1
>>> com.sun.jck.lib.ExecJCKTestSameJVMCmd.execute(Ljava/lang/ClassLoader;Ljava/lang/String;[Ljava/lang/String;Ljava/io/PrintWriter;Ljava/io/PrintWriter;I)Lcom/sun/javatest/Status;
>>> (397 bytes) @ 0xffffffff68d4dd40 [0xffffffff68d4aea0+0x0000000000002ea0]
>>> J 6242 c2
>>> com.sun.jck.lib.ExecJCKTestSameJVMCmd.run([Ljava/lang/String;Ljava/io/PrintWriter;Ljava/io/PrintWriter;)Lcom/sun/javatest/Status;
>>> (1022 bytes) @ 0xffffffff6fef30b0 [0xffffffff6fef0000+0x00000000000030b0]
>>> J 1689 c1
>>> com.sun.jck.lib.ExecInSeparateThreadCmd$StatusCallable.call()Ljava/lang/Object;
>>> (5 bytes) @ 0xffffffff68d98114 [0xffffffff68d97f00+0x0000000000000214]
>>> J 6097 c1 java.util.concurrent.FutureTask.run()V java.base at 11.0.0.1-internal
>>> (123 bytes) @ 0xffffffff68e5f900 [0xffffffff68e5ee40+0x0000000000000ac0]
>>> J 5653 c2 java.lang.Thread.run()V java.base at 11.0.0.1-internal (17 bytes) @
>>> 0xffffffff6f851b78 [0xffffffff6f851b20+0x0000000000000058]
>>> v  ~StubRoutines::call_stub
>>> V  [libjvm.so+0x108989c]  void JavaCalls::call_helper(JavaValue*,const
>>> methodHandle&,JavaCallArguments*,Thread*)+0x5bc
>>> V  [libjvm.so+0x1088220]  void
>>> JavaCalls::call_virtual(JavaValue*,Klass*,Symbol*,Symbol*,JavaCallArguments*,Thread*)+0x1e0
>>> V  [libjvm.so+0x1088328]  void
>>> JavaCalls::call_virtual(JavaValue*,Handle,Klass*,Symbol*,Symbol*,Thread*)+0xb8
>>> V  [libjvm.so+0x11c5140]  void thread_entry(JavaThread*,Thread*)+0x1e0
>>> V  [libjvm.so+0x1de56e4]  void JavaThread::thread_main_inner()+0x2e4
>>> V  [libjvm.so+0x1de53d0]  void JavaThread::run()+0x350
>>> V  [libjvm.so+0x1aa4ff4]  thread_native_entry+0x2e4
>>>
>>> Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
>>> j  java.lang.reflect.Array.set(Ljava/lang/Object;ILjava/lang/Object;)V+0java.base at 11.0.0.1-internal
>>> j
>>>  javasoft.sqe.tests.vm.concepts.execution.execution080.execution08001.execution08001.run([Ljava/lang/String;Ljava/io/PrintStream;)I+617
>>> v  ~StubRoutines::call_stub
>>> J 1506
>>>  jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;java.base at 11.0.0.1-internal (0 bytes) @ 0xffffffff6f8ad0ec
>>> [0xffffffff6f8ad040+0x00000000000000ac]
>>> J 6474 c2
>>> jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;java.base at 11.0.0.1-internal (104 bytes) @ 0xffffffff6fd959c4
>>> [0xffffffff6fd95960+0x0000000000000064]
>>> J 5773 c2
>>> jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;java.base at 11.0.0.1-internal (10 bytes) @ 0xffffffff6f83e670
>>> [0xffffffff6f83e620+0x0000000000000050]
>>> J 4866 c1
>>> com.sun.jck.lib.ExecJCKTestSameJVMCmd$SimpleTest.run([Ljava/lang/String;Ljava/io/PrintWriter;Ljava/io/PrintWriter;)Lcom/sun/javatest/Status;
>>> (405 bytes) @ 0xffffffff696dfee4 [0xffffffff696df0a0+0x0000000000000e44]
>>> J 5654 c1
>>> com.sun.jck.lib.ExecJCKTestSameJVMCmd.execute(Ljava/lang/ClassLoader;Ljava/lang/String;[Ljava/lang/String;Ljava/io/PrintWriter;Ljava/io/PrintWriter;I)Lcom/sun/javatest/Status;
>>> (397 bytes) @ 0xffffffff68d4dd40 [0xffffffff68d4aea0+0x0000000000002ea0]
>>> J 6242 c2
>>> com.sun.jck.lib.ExecJCKTestSameJVMCmd.run([Ljava/lang/String;Ljava/io/PrintWriter;Ljava/io/PrintWriter;)Lcom/sun/javatest/Status;
>>> (1022 bytes) @ 0xffffffff6fef30b0 [0xffffffff6fef0000+0x00000000000030b0]
>>> J 1689 c1
>>> com.sun.jck.lib.ExecInSeparateThreadCmd$StatusCallable.call()Ljava/lang/Object;
>>> (5 bytes) @ 0xffffffff68d98114 [0xffffffff68d97f00+0x0000000000000214]
>>> J 6097 c1 java.util.concurrent.FutureTask.run()V java.base at 11.0.0.1-internal
>>> (123 bytes) @ 0xffffffff68e5f900 [0xffffffff68e5ee40+0x0000000000000ac0]
>>> J 5653 c2 java.lang.Thread.run()V java.base at 11.0.0.1-internal (17 bytes) @
>>> 0xffffffff6f851b78 [0xffffffff6f851b20+0x0000000000000058]
>>> v  ~StubRoutines::call_stub
>>>
>>> siginfo: si_signo: 10 (SIGBUS), si_code: 1 (BUS_ADRALN), si_addr:
>>> 0x00000007b80e047a
>>>
>>> Register to memory mapping:
>>>
>>> G1=0x000000000197000c is an unknown value
>>> G2=0xfffffffffffffd48 is an unknown value
>>> G3=0x00000000c0100400 is an unknown value
>>> G4=0x0 is NULL
>>> G5=0x00000007b80e0468 is pointing into object: 0x00000007b80635b0
>>>
>>> [error occurred during error reporting (printing register info), id 0xa]
>>>
>>> Registers:
>>>  G1=0x000000000197000c G2=0xfffffffffffffd48 G3=0x00000000c0100400
>>> G4=0x0000000000000000
>>>  G5=0x00000007b80e0468 G6=0x0000000000000000 G7=0xffffffff5441a240
>>> Y=0x0000000000000000
>>>  O0=0xffffffff3f9fd408 O1=0x0000000000091b61 O2=0x0000000000091800
>>> O3=0xfffffff68194b410
>>>  O4=0x00000007b80e0468 O5=0x0000000000000010 O6=0xffffffff3f9fcb41
>>> O7=0x00000007b80e0468
>>>  L0=0x00000007b80e0468 L1=0x00000007b80e0468 L2=0xfffffff68194b410
>>> L3=0x0000000000000010
>>>  L4=0x0000000000000000 L5=0x00000007b80e0468 L6=0xfffffff68194b410
>>> L7=0x0000000000092434
>>>  I0=0xffffffff3f9fd558 I1=0x0000000000000012 I2=0x0000000000000000
>>> I3=0xfffffff6819dd844
>>>  I4=0x0000000000000010 I5=0x0000000000092400 I6=0xffffffff3f9fcc11
>>> I7=0xfffffff680ed28f8
>>>  PC=0xfffffff67ffdb4d8 nPC=0xfffffff67ffdb4dc
>>>
>>>
>>> Top of Stack: (sp=0xffffffff3f9fd340)
>>> 0xffffffff3f9fd340:   00000007b80e0468 00000007b80e0468
>>> 0xffffffff3f9fd350:   fffffff68194b410 0000000000000010
>>> 0xffffffff3f9fd360:   0000000000000000 00000007b80e0468
>>> 0xffffffff3f9fd370:   fffffff68194b410 0000000000092434
>>> 0xffffffff3f9fd380:   ffffffff3f9fd558 0000000000000012
>>> 0xffffffff3f9fd390:   0000000000000000 fffffff6819dd844
>>> 0xffffffff3f9fd3a0:   0000000000000010 0000000000092400
>>> 0xffffffff3f9fd3b0:   ffffffff3f9fcc11 fffffff680ed28f8
>>> 0xffffffff3f9fd3c0:   ffffffff3f9fcc61 fffffff680af1514
>>> 0xffffffff3f9fd3d0:   fffffff6819c5d68 0000000100107880
>>> 0xffffffff3f9fd3e0:   00000003b80e00d0 fffffff6819c5d68
>>> 0xffffffff3f9fd3f0:   00000007b80e0468 00000007b80e0468
>>> 0xffffffff3f9fd400:   00000007b80e0468 00000007b80e0468
>>> 0xffffffff3f9fd410:   fffffff68194b410 fffffff6819dd844
>>> 0xffffffff3f9fd420:   00000000000002dc 0000000000000000
>>> 0xffffffff3f9fd430:   ffffffff3f9fd558 00000007b80e0468
>>>
>>> Instructions: (pc=0xfffffff67ffdb4d8)
>>> 0xfffffff67ffdb4b8:   40 36 e0 42 90 07 a7 df 10 80 00 06 d8 5f a7 df
>>> 0xfffffff67ffdb4c8:   e4 77 a7 e7 e6 5f a7 e7 e6 77 a7 df d8 5f a7 df
>>> 0xfffffff67ffdb4d8:   f4 23 00 19 d6 0e e0 00 80 a2 e0 00 02 40 00 16
>>> 0xfffffff67ffdb4e8:   01 00 00 00 40 36 e0 89 90 07 a7 df da 0e e0 00
>>>
>>>
>>>


More information about the hotspot-dev mailing list