Merge
This commit is contained in:
commit
5c74f9ccd8
@ -165,3 +165,4 @@ a2b2d435f1d275fa8010774c653197c64e326d3a jdk8-b40
|
||||
1a8c7c530f8a9b7f5bdb9b0693b2f5435ca5205e jdk8-b41
|
||||
1ce5dc16416611c58b7480ca67a2eee5153498a6 jdk8-b42
|
||||
661c9aae602bbd9766d12590800c90f1edd1d8dd jdk8-b43
|
||||
e4f81a817447c3a4f6868f083c81c2fb1b15d44c jdk8-b44
|
||||
|
@ -255,3 +255,4 @@ bd568544be7fcd12a9327e6c448592198d57b043 hs24-b13
|
||||
55954061c6e8750ea39a63523fd65d580db6eeb1 jdk8-b42
|
||||
e77b8e0ed1f84e3e268239e276c7ab64fa573baa jdk8-b43
|
||||
5ba29a1db46ecb80a321ca873adb56a3fe6ad320 hs24-b14
|
||||
831e5c76a20af18f3c08c5a95ed31be0e128a010 jdk8-b44
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. 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
|
||||
@ -67,7 +67,7 @@
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// ciField::ciField
|
||||
ciField::ciField(ciInstanceKlass* klass, int index): _known_to_link_with(NULL) {
|
||||
ciField::ciField(ciInstanceKlass* klass, int index): _known_to_link_with_put(NULL), _known_to_link_with_get(NULL) {
|
||||
ASSERT_IN_VM;
|
||||
CompilerThread *thread = CompilerThread::current();
|
||||
|
||||
@ -143,7 +143,7 @@ ciField::ciField(ciInstanceKlass* klass, int index): _known_to_link_with(NULL) {
|
||||
initialize_from(&field_desc);
|
||||
}
|
||||
|
||||
ciField::ciField(fieldDescriptor *fd): _known_to_link_with(NULL) {
|
||||
ciField::ciField(fieldDescriptor *fd): _known_to_link_with_put(NULL), _known_to_link_with_get(NULL) {
|
||||
ASSERT_IN_VM;
|
||||
|
||||
_cp_index = -1;
|
||||
@ -315,6 +315,10 @@ ciType* ciField::compute_type_impl() {
|
||||
bool ciField::will_link(ciInstanceKlass* accessing_klass,
|
||||
Bytecodes::Code bc) {
|
||||
VM_ENTRY_MARK;
|
||||
assert(bc == Bytecodes::_getstatic || bc == Bytecodes::_putstatic ||
|
||||
bc == Bytecodes::_getfield || bc == Bytecodes::_putfield,
|
||||
"unexpected bytecode");
|
||||
|
||||
if (_offset == -1) {
|
||||
// at creation we couldn't link to our holder so we need to
|
||||
// maintain that stance, otherwise there's no safe way to use this
|
||||
@ -322,8 +326,22 @@ bool ciField::will_link(ciInstanceKlass* accessing_klass,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_known_to_link_with == accessing_klass) {
|
||||
return true;
|
||||
// Check for static/nonstatic mismatch
|
||||
bool is_static = (bc == Bytecodes::_getstatic || bc == Bytecodes::_putstatic);
|
||||
if (is_static != this->is_static()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get and put can have different accessibility rules
|
||||
bool is_put = (bc == Bytecodes::_putfield || bc == Bytecodes::_putstatic);
|
||||
if (is_put) {
|
||||
if (_known_to_link_with_put == accessing_klass) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (_known_to_link_with_get == accessing_klass) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
FieldAccessInfo result;
|
||||
@ -334,8 +352,13 @@ bool ciField::will_link(ciInstanceKlass* accessing_klass,
|
||||
true, false, KILL_COMPILE_ON_FATAL_(false));
|
||||
|
||||
// update the hit-cache, unless there is a problem with memory scoping:
|
||||
if (accessing_klass->is_shared() || !is_shared())
|
||||
_known_to_link_with = accessing_klass;
|
||||
if (accessing_klass->is_shared() || !is_shared()) {
|
||||
if (is_put) {
|
||||
_known_to_link_with_put = accessing_klass;
|
||||
} else {
|
||||
_known_to_link_with_get = accessing_klass;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. 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
|
||||
@ -49,7 +49,8 @@ private:
|
||||
ciType* _type;
|
||||
int _offset;
|
||||
bool _is_constant;
|
||||
ciInstanceKlass* _known_to_link_with;
|
||||
ciInstanceKlass* _known_to_link_with_put;
|
||||
ciInstanceKlass* _known_to_link_with_get;
|
||||
ciConstant _constant_value;
|
||||
|
||||
// Used for will_link
|
||||
|
@ -1884,10 +1884,10 @@ void ClassVerifier::verify_invoke_init(
|
||||
VerificationType type = current_frame->pop_stack(
|
||||
VerificationType::reference_check(), CHECK_VERIFY(this));
|
||||
if (type == VerificationType::uninitialized_this_type()) {
|
||||
// The method must be an <init> method of either this class, or one of its
|
||||
// superclasses
|
||||
// The method must be an <init> method of this class or its superclass
|
||||
klassOop superk = current_class()->super();
|
||||
if (ref_class_type.name() != current_class()->name() &&
|
||||
!name_in_supers(ref_class_type.name(), current_class())) {
|
||||
ref_class_type.name() != superk->klass_part()->name()) {
|
||||
verify_error(bci, "Bad <init> method call");
|
||||
return;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2012, Oracle and/or its affiliates. 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
|
||||
@ -551,13 +551,21 @@ void CompilerOracle::parse_from_line(char* line) {
|
||||
}
|
||||
|
||||
static const char* cc_file() {
|
||||
#ifdef ASSERT
|
||||
if (CompileCommandFile == NULL)
|
||||
return ".hotspot_compiler";
|
||||
#endif
|
||||
return CompileCommandFile;
|
||||
}
|
||||
|
||||
bool CompilerOracle::has_command_file() {
|
||||
return cc_file() != NULL;
|
||||
}
|
||||
|
||||
bool CompilerOracle::_quiet = false;
|
||||
|
||||
void CompilerOracle::parse_from_file() {
|
||||
assert(has_command_file(), "command file must be specified");
|
||||
FILE* stream = fopen(cc_file(), "rt");
|
||||
if (stream == NULL) return;
|
||||
|
||||
@ -600,6 +608,7 @@ void CompilerOracle::parse_from_string(const char* str, void (*parse_line)(char*
|
||||
}
|
||||
|
||||
void CompilerOracle::append_comment_to_file(const char* message) {
|
||||
assert(has_command_file(), "command file must be specified");
|
||||
fileStream stream(fopen(cc_file(), "at"));
|
||||
stream.print("# ");
|
||||
for (int index = 0; message[index] != '\0'; index++) {
|
||||
@ -610,6 +619,7 @@ void CompilerOracle::append_comment_to_file(const char* message) {
|
||||
}
|
||||
|
||||
void CompilerOracle::append_exclude_to_file(methodHandle method) {
|
||||
assert(has_command_file(), "command file must be specified");
|
||||
fileStream stream(fopen(cc_file(), "at"));
|
||||
stream.print("exclude ");
|
||||
Klass::cast(method->method_holder())->name()->print_symbol_on(&stream);
|
||||
@ -624,7 +634,9 @@ void CompilerOracle::append_exclude_to_file(methodHandle method) {
|
||||
void compilerOracle_init() {
|
||||
CompilerOracle::parse_from_string(CompileCommand, CompilerOracle::parse_from_line);
|
||||
CompilerOracle::parse_from_string(CompileOnly, CompilerOracle::parse_compile_only);
|
||||
CompilerOracle::parse_from_file();
|
||||
if (CompilerOracle::has_command_file()) {
|
||||
CompilerOracle::parse_from_file();
|
||||
}
|
||||
if (lists[PrintCommand] != NULL) {
|
||||
if (PrintAssembly) {
|
||||
warning("CompileCommand and/or .hotspot_compiler file contains 'print' commands, but PrintAssembly is also enabled");
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2012, Oracle and/or its affiliates. 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
|
||||
@ -36,6 +36,10 @@ class CompilerOracle : AllStatic {
|
||||
static bool _quiet;
|
||||
|
||||
public:
|
||||
|
||||
// True if the command file has been specified or is implicit
|
||||
static bool has_command_file();
|
||||
|
||||
// Reads from file and adds to lists
|
||||
static void parse_from_file();
|
||||
|
||||
|
@ -896,7 +896,8 @@ static void report_null_exception_in_code_cache(address exception_pc) {
|
||||
methodOop method = ((nmethod*)n)->method();
|
||||
tty->print_cr("# Method where it happened %s.%s ", Klass::cast(method->method_holder())->name()->as_C_string(), method->name()->as_C_string());
|
||||
tty->print_cr("#");
|
||||
if (ShowMessageBoxOnError && UpdateHotSpotCompilerFileOnError) {
|
||||
if (ShowMessageBoxOnError && UpdateHotSpotCompilerFileOnError &&
|
||||
CompilerOracle::has_command_file()) {
|
||||
const char* title = "HotSpot Runtime Error";
|
||||
const char* question = "Do you want to exclude compilation of this method in future runs?";
|
||||
if (os::message_box(title, question)) {
|
||||
|
@ -3017,12 +3017,14 @@ jint Arguments::parse(const JavaVMInitArgs* args) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef ASSERT
|
||||
// Parse default .hotspotrc settings file
|
||||
if (!settings_file_specified) {
|
||||
if (!process_settings_file(".hotspotrc", false, args->ignoreUnrecognized)) {
|
||||
return JNI_EINVAL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (PrintVMOptions) {
|
||||
for (index = 0; index < args->nOptions; index++) {
|
||||
|
122
hotspot/test/runtime/7110720/Test7110720.sh
Normal file
122
hotspot/test/runtime/7110720/Test7110720.sh
Normal file
@ -0,0 +1,122 @@
|
||||
#
|
||||
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
|
||||
|
||||
#
|
||||
# @test Test7110720.sh
|
||||
# @bug 7110720
|
||||
# @summary improve VM configuration file loading
|
||||
# @run shell Test7110720.sh
|
||||
#
|
||||
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then TESTSRC=.
|
||||
fi
|
||||
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
PARENT=`dirname \`which java\``
|
||||
TESTJAVA=`dirname ${PARENT}`
|
||||
echo "TESTJAVA not set, selecting " ${TESTJAVA}
|
||||
echo "If this is incorrect, try setting the variable manually."
|
||||
fi
|
||||
|
||||
if [ "${TESTCLASSES}" = "" ]
|
||||
then
|
||||
echo "TESTCLASSES not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Jtreg sets TESTVMOPTS which may include -d64 which is
|
||||
# required to test a 64-bit JVM on some platforms.
|
||||
# If another test harness still creates HOME/JDK64BIT,
|
||||
# we can recognise that.
|
||||
|
||||
# set platform-dependent variables
|
||||
OS=`uname -s`
|
||||
case "$OS" in
|
||||
SunOS | Linux )
|
||||
FS="/"
|
||||
RM=/bin/rm
|
||||
CP=/bin/cp
|
||||
MV=/bin/mv
|
||||
## for solaris, linux it's HOME
|
||||
FILE_LOCATION=$HOME
|
||||
if [ -f ${FILE_LOCATION}${FS}JDK64BIT -a ${OS} = "SunOS" ]
|
||||
then
|
||||
TESTVMOPTS=`cat ${FILE_LOCATION}${FS}JDK64BIT`
|
||||
fi
|
||||
;;
|
||||
Windows_* )
|
||||
FS="\\"
|
||||
RM=rm
|
||||
CP=cp
|
||||
MV=mv
|
||||
;;
|
||||
* )
|
||||
echo "Unrecognized system!"
|
||||
exit 1;
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
JAVA=${TESTJAVA}${FS}bin${FS}java
|
||||
|
||||
# Don't test debug builds, they do read the config files:
|
||||
${JAVA} ${TESTVMOPTS} -version 2>&1 | grep "debug" >/dev/null
|
||||
if [ "$?" = "0" ]; then
|
||||
echo Skipping test for debug build.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
ok=yes
|
||||
|
||||
$RM -f .hotspot_compiler .hotspotrc
|
||||
|
||||
${JAVA} ${TESTVMOPTS} -version 2>&1 | grep "garbage in" >/dev/null
|
||||
if [ "$?" = "0" ]; then
|
||||
echo "FAILED: base case failure"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
echo "garbage in, garbage out" > .hotspot_compiler
|
||||
${JAVA} ${TESTVMOPTS} -version 2>&1 | grep "garbage in" >/dev/null
|
||||
if [ "$?" = "0" ]; then
|
||||
echo "FAILED: .hotspot_compiler was read"
|
||||
ok=no
|
||||
fi
|
||||
|
||||
$MV .hotspot_compiler hs_comp.txt
|
||||
${JAVA} ${TESTVMOPTS} -XX:CompileCommandFile=hs_comp.txt -version 2>&1 | grep "garbage in" >/dev/null
|
||||
if [ "$?" = "1" ]; then
|
||||
echo "FAILED: explicit compiler command file not read"
|
||||
ok=no
|
||||
fi
|
||||
|
||||
$RM -f .hotspot_compiler hs_comp.txt
|
||||
|
||||
echo "garbage" > .hotspotrc
|
||||
${JAVA} ${TESTVMOPTS} -version 2>&1 | grep "garbage" >/dev/null
|
||||
if [ "$?" = "0" ]; then
|
||||
echo "FAILED: .hotspotrc was read"
|
||||
ok=no
|
||||
fi
|
||||
|
||||
$MV .hotspotrc hs_flags.txt
|
||||
${JAVA} ${TESTVMOPTS} -XX:Flags=hs_flags.txt -version 2>&1 | grep "garbage" >/dev/null
|
||||
if [ "$?" = "1" ]; then
|
||||
echo "FAILED: explicit flags file not read"
|
||||
ok=no
|
||||
fi
|
||||
|
||||
if [ "${ok}" = "no" ]; then
|
||||
echo "Some tests failed."
|
||||
exit 1
|
||||
else
|
||||
echo "Passed"
|
||||
exit 0
|
||||
fi
|
||||
|
82
hotspot/test/runtime/7160757/Test7160757.java
Normal file
82
hotspot/test/runtime/7160757/Test7160757.java
Normal file
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test Test7160757.java
|
||||
* @bug 7160757
|
||||
* @summary Tests that superclass initialization is not skipped
|
||||
*/
|
||||
|
||||
public class Test7160757 {
|
||||
|
||||
public static void main(String args[]) throws Exception {
|
||||
|
||||
ClassLoader loader = new SLoader();
|
||||
try {
|
||||
Class.forName("S", true, loader);
|
||||
System.out.println("FAILED");
|
||||
throw new Exception("Should have thrown a VerifyError.");
|
||||
} catch (VerifyError e) {
|
||||
System.out.println(e);
|
||||
System.out.println("PASSED");
|
||||
}
|
||||
}
|
||||
|
||||
static class SLoader extends ClassLoader {
|
||||
|
||||
/**
|
||||
* public class S extends Throwable {
|
||||
* public S() {
|
||||
* aload_0
|
||||
* invokespecial Object.<init>()
|
||||
* return
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
static byte b(int i) { return (byte)i; }
|
||||
static byte S_class[] = {
|
||||
b(0xca), b(0xfe), b(0xba), b(0xbe), 0x00, 0x00, 0x00, 0x32,
|
||||
0x00, 0x0c, 0x0a, 0x00, 0x0b, 0x00, 0x07, 0x07,
|
||||
0x00, 0x08, 0x07, 0x00, 0x09, 0x01, 0x00, 0x06,
|
||||
0x3c, 0x69, 0x6e, 0x69, 0x74, 0x3e, 0x01, 0x00,
|
||||
0x03, 0x28, 0x29, 0x56, 0x01, 0x00, 0x04, 0x43,
|
||||
0x6f, 0x64, 0x65, 0x0c, 0x00, 0x04, 0x00, 0x05,
|
||||
0x01, 0x00, 0x01, 0x53, 0x01, 0x00, 0x13, 0x6a,
|
||||
0x61, 0x76, 0x61, 0x2f, 0x6c, 0x61, 0x6e, 0x67,
|
||||
0x2f, 0x54, 0x68, 0x72, 0x6f, 0x77, 0x61, 0x62,
|
||||
0x6c, 0x65, 0x01, 0x00, 0x10, 0x6a, 0x61, 0x76,
|
||||
0x61, 0x2f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x4f,
|
||||
0x62, 0x6a, 0x65, 0x63, 0x74, 0x07, 0x00, 0x0a,
|
||||
0x00, 0x21, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04,
|
||||
0x00, 0x05, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00,
|
||||
0x00, 0x11, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
|
||||
0x00, 0x05, 0x2a, b(0xb7), 0x00, 0x01, b(0xb1), 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
public Class findClass(String name) throws ClassNotFoundException {
|
||||
return defineClass(name, S_class, 0, S_class.length);
|
||||
}
|
||||
}
|
||||
}
|
@ -74,7 +74,8 @@ JDK_NONDEFAULT_TEST_LIST = \
|
||||
jdk_rmi \
|
||||
jdk_sound \
|
||||
jdk_swing \
|
||||
jdk_tools1 jdk_tools2
|
||||
jdk_tools1 jdk_tools2 \
|
||||
jdk_jfr
|
||||
|
||||
# All jdk tests
|
||||
JDK_ALL_TEST_LIST = $(JDK_DEFAULT_TEST_LIST) $(JDK_NONDEFAULT_TEST_LIST)
|
||||
|
Loading…
Reference in New Issue
Block a user