-
Bug
-
Resolution: Incomplete
-
P4
-
None
-
17
-
generic
-
generic
ADDITIONAL SYSTEM INFORMATION :
OS:18.04
# JRE version: OpenJDK Runtime Environment (11.0.20) (fastdebug build 11.0.20-internal+0-adhoc.jdk11u)
# Java VM: OpenJDK 64-Bit Server VM (fastdebug 11.0.20-internal+0-adhoc.jdk11u, mixed mode, tiered, compressed oops, g1 gc, linux-amd64)
A DESCRIPTION OF THE PROBLEM :
We run a regression test on JDK 11, 17, 22 under the option --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED. We found that JVM crashed with following information.
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/home/repository/jdk11u/src/hotspot/share/prims/unsafe.cpp:110), pid=66942, tid=66958
# assert(byte_offset >= 0 && byte_offset <= (jlong)( arrayOopDesc::header_size(T_DOUBLE) * HeapWordSize + ((julong)max_jint * sizeof(double)) )) failed: sane offset
#
# JRE version: OpenJDK Runtime Environment (11.0.20) (fastdebug build 11.0.20-internal+0-adhoc.jdk11u)
# Java VM: OpenJDK 64-Bit Server VM (fastdebug 11.0.20-internal+0-adhoc.jdk11u, mixed mode, tiered, compressed oops, g1 gc, linux-amd64)
# No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
# https://bugreport.java.com/bugreport/crash.jsp
#
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
$ java --add-exports java.base/jdk.internal.misc=ALL-UNNAMED compiler.c2.aarch64.TestUnsafeVolatileStore
ACTUAL -
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc: SuppressErrorAt=/unsafe.cpp:110
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/home/repository/jdk11u/src/hotspot/share/prims/unsafe.cpp:110), pid=7848, tid=8029
# assert(byte_offset >= 0 && byte_offset <= (jlong)( arrayOopDesc::header_size(T_DOUBLE) * HeapWordSize + ((julong)max_jint * sizeof(double)) )) failed: sane offset
#
# JRE version: OpenJDK Runtime Environment (11.0.20) (fastdebug build 11.0.20-internal+0-adhoc.jdk11u)
# Java VM: OpenJDK 64-Bit Server VM (fastdebug 11.0.20-internal+0-adhoc.jdk11u, interpreted mode, compressed oops, g1 gc, linux-amd64)
# No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /home/repository/JVM-Tesing-by-Anti-Optimization/bugs/hs_err_pid7848.log
#
# If you would like to submit a bug report, please visit:
# https://bugreport.java.com/bugreport/crash.jsp
#
Current thread is 8029
Dumping core ...
已放弃
---------- BEGIN SOURCE ----------
/*
* Copyright (c) 2018, Red Hat, Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package compiler.c2.aarch64;
import java.lang.reflect.Field;
import jdk.internal.misc.Unsafe;
class TestUnsafeVolatileStore
{
public volatile int f_int = 0;
public volatile Integer f_obj = Integer.valueOf(0);
public static Unsafe unsafe = Unsafe.getUnsafe();
public static Field f_int_field;
public static Field f_obj_field;
public static long f_int_off;
public static long f_obj_off;
static {
try {
f_int_field = TestUnsafeVolatileStore.class.getField("f_int");
f_obj_field = TestUnsafeVolatileStore.class.getField("f_obj");
f_int_off = unsafe.objectFieldOffset(f_int_field);
f_obj_off = unsafe.objectFieldOffset(f_obj_field);
} catch (Exception e) {
System.out.println("reflection failed " + e);
e.printStackTrace();
}
}
public static void main(String[] args)
{
final TestUnsafeVolatileStore t = new TestUnsafeVolatileStore();
for (int i = 0; i < 100_000; i++) {
t.f_int = -1;
t.testInt(i);
if (t.f_int != i) {
throw new RuntimeException("bad result!");
}
}
for (int i = 0; i < 100_000; i++) {
t.f_obj = null;
t.testObj(Integer.valueOf(i));
if (t.f_obj != i) {
throw new RuntimeException("bad result!");
}
}
}
public static long method7(long var) {
return var + 8217;
}
public static int method10(long var) {
return var == 0? 0:(int)(var * 8217/var);
}
public static int method43(long var) {
return var == 0? 0:(int)(var * 339/var);
}
public static long method56(long var) {
return var + 3086;
}
public static int method80(long var) {
return var == 0? 0:(int)(var * 339/var);
}
public static long method81(long var) {
return var + 0;
}
public void testInt(int i)
{
synchronized (TestUnsafeVolatileStore.class) {
try {
Class <?> Class18 = Class.forName("compiler.c2.aarch64.TestUnsafeVolatileStore");
Class <?> Class35 = Class.forName("compiler.c2.aarch64.TestUnsafeVolatileStore");
Class <?> Class51 = Class.forName("compiler.c2.aarch64.TestUnsafeVolatileStore");
unsafe.putIntVolatile(this, (((long)Class18.getDeclaredMethod("method7", long.class).invoke(null, (method56((long)(~(((long)(f_int_off << 0))&(method81(f_int_off)))))-3086)))-((int)Class35.getDeclaredMethod("method10", long.class).invoke(null, (long)(f_int_off + 0)))), (int)((((i-method80(f_int_off))*1+1160)-(496+1160))+(1*((int)Class51.getDeclaredMethod("method43", long.class).invoke(null, (long)(~((f_int_off)|(f_int_off)))))+496)));
}catch (Exception eeeeeeee){throw new RuntimeException(eeeeeeee);}
}
}
public void testObj(Object o)
{
unsafe.putObjectVolatile(this, f_obj_off, o);
}
}
---------- END SOURCE ----------
FREQUENCY : always
OS:18.04
# JRE version: OpenJDK Runtime Environment (11.0.20) (fastdebug build 11.0.20-internal+0-adhoc.jdk11u)
# Java VM: OpenJDK 64-Bit Server VM (fastdebug 11.0.20-internal+0-adhoc.jdk11u, mixed mode, tiered, compressed oops, g1 gc, linux-amd64)
A DESCRIPTION OF THE PROBLEM :
We run a regression test on JDK 11, 17, 22 under the option --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED. We found that JVM crashed with following information.
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/home/repository/jdk11u/src/hotspot/share/prims/unsafe.cpp:110), pid=66942, tid=66958
# assert(byte_offset >= 0 && byte_offset <= (jlong)( arrayOopDesc::header_size(T_DOUBLE) * HeapWordSize + ((julong)max_jint * sizeof(double)) )) failed: sane offset
#
# JRE version: OpenJDK Runtime Environment (11.0.20) (fastdebug build 11.0.20-internal+0-adhoc.jdk11u)
# Java VM: OpenJDK 64-Bit Server VM (fastdebug 11.0.20-internal+0-adhoc.jdk11u, mixed mode, tiered, compressed oops, g1 gc, linux-amd64)
# No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
# https://bugreport.java.com/bugreport/crash.jsp
#
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
$ java --add-exports java.base/jdk.internal.misc=ALL-UNNAMED compiler.c2.aarch64.TestUnsafeVolatileStore
ACTUAL -
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc: SuppressErrorAt=/unsafe.cpp:110
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/home/repository/jdk11u/src/hotspot/share/prims/unsafe.cpp:110), pid=7848, tid=8029
# assert(byte_offset >= 0 && byte_offset <= (jlong)( arrayOopDesc::header_size(T_DOUBLE) * HeapWordSize + ((julong)max_jint * sizeof(double)) )) failed: sane offset
#
# JRE version: OpenJDK Runtime Environment (11.0.20) (fastdebug build 11.0.20-internal+0-adhoc.jdk11u)
# Java VM: OpenJDK 64-Bit Server VM (fastdebug 11.0.20-internal+0-adhoc.jdk11u, interpreted mode, compressed oops, g1 gc, linux-amd64)
# No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /home/repository/JVM-Tesing-by-Anti-Optimization/bugs/hs_err_pid7848.log
#
# If you would like to submit a bug report, please visit:
# https://bugreport.java.com/bugreport/crash.jsp
#
Current thread is 8029
Dumping core ...
已放弃
---------- BEGIN SOURCE ----------
/*
* Copyright (c) 2018, Red Hat, Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package compiler.c2.aarch64;
import java.lang.reflect.Field;
import jdk.internal.misc.Unsafe;
class TestUnsafeVolatileStore
{
public volatile int f_int = 0;
public volatile Integer f_obj = Integer.valueOf(0);
public static Unsafe unsafe = Unsafe.getUnsafe();
public static Field f_int_field;
public static Field f_obj_field;
public static long f_int_off;
public static long f_obj_off;
static {
try {
f_int_field = TestUnsafeVolatileStore.class.getField("f_int");
f_obj_field = TestUnsafeVolatileStore.class.getField("f_obj");
f_int_off = unsafe.objectFieldOffset(f_int_field);
f_obj_off = unsafe.objectFieldOffset(f_obj_field);
} catch (Exception e) {
System.out.println("reflection failed " + e);
e.printStackTrace();
}
}
public static void main(String[] args)
{
final TestUnsafeVolatileStore t = new TestUnsafeVolatileStore();
for (int i = 0; i < 100_000; i++) {
t.f_int = -1;
t.testInt(i);
if (t.f_int != i) {
throw new RuntimeException("bad result!");
}
}
for (int i = 0; i < 100_000; i++) {
t.f_obj = null;
t.testObj(Integer.valueOf(i));
if (t.f_obj != i) {
throw new RuntimeException("bad result!");
}
}
}
public static long method7(long var) {
return var + 8217;
}
public static int method10(long var) {
return var == 0? 0:(int)(var * 8217/var);
}
public static int method43(long var) {
return var == 0? 0:(int)(var * 339/var);
}
public static long method56(long var) {
return var + 3086;
}
public static int method80(long var) {
return var == 0? 0:(int)(var * 339/var);
}
public static long method81(long var) {
return var + 0;
}
public void testInt(int i)
{
synchronized (TestUnsafeVolatileStore.class) {
try {
Class <?> Class18 = Class.forName("compiler.c2.aarch64.TestUnsafeVolatileStore");
Class <?> Class35 = Class.forName("compiler.c2.aarch64.TestUnsafeVolatileStore");
Class <?> Class51 = Class.forName("compiler.c2.aarch64.TestUnsafeVolatileStore");
unsafe.putIntVolatile(this, (((long)Class18.getDeclaredMethod("method7", long.class).invoke(null, (method56((long)(~(((long)(f_int_off << 0))&(method81(f_int_off)))))-3086)))-((int)Class35.getDeclaredMethod("method10", long.class).invoke(null, (long)(f_int_off + 0)))), (int)((((i-method80(f_int_off))*1+1160)-(496+1160))+(1*((int)Class51.getDeclaredMethod("method43", long.class).invoke(null, (long)(~((f_int_off)|(f_int_off)))))+496)));
}catch (Exception eeeeeeee){throw new RuntimeException(eeeeeeee);}
}
}
public void testObj(Object o)
{
unsafe.putObjectVolatile(this, f_obj_off, o);
}
}
---------- END SOURCE ----------
FREQUENCY : always
- relates to
-
JDK-8312432 assert(byte_offset < p_size) failed: Unsafe access: offset 2235 > object's size
-
- Closed
-