Merge
This commit is contained in:
commit
dec02ae201
@ -436,14 +436,19 @@ constantPoolHandle ClassFileParser::parse_constant_pool(TRAPS) {
|
|||||||
ref_index, CHECK_(nullHandle));
|
ref_index, CHECK_(nullHandle));
|
||||||
break;
|
break;
|
||||||
case JVM_REF_invokeVirtual:
|
case JVM_REF_invokeVirtual:
|
||||||
case JVM_REF_invokeStatic:
|
|
||||||
case JVM_REF_invokeSpecial:
|
|
||||||
case JVM_REF_newInvokeSpecial:
|
case JVM_REF_newInvokeSpecial:
|
||||||
check_property(
|
check_property(
|
||||||
tag.is_method(),
|
tag.is_method(),
|
||||||
"Invalid constant pool index %u in class file %s (not a method)",
|
"Invalid constant pool index %u in class file %s (not a method)",
|
||||||
ref_index, CHECK_(nullHandle));
|
ref_index, CHECK_(nullHandle));
|
||||||
break;
|
break;
|
||||||
|
case JVM_REF_invokeStatic:
|
||||||
|
case JVM_REF_invokeSpecial:
|
||||||
|
check_property(
|
||||||
|
tag.is_method() || tag.is_interface_method(),
|
||||||
|
"Invalid constant pool index %u in class file %s (not a method)",
|
||||||
|
ref_index, CHECK_(nullHandle));
|
||||||
|
break;
|
||||||
case JVM_REF_invokeInterface:
|
case JVM_REF_invokeInterface:
|
||||||
check_property(
|
check_property(
|
||||||
tag.is_interface_method(),
|
tag.is_interface_method(),
|
||||||
@ -3837,7 +3842,7 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (TraceClassLoadingPreorder) {
|
if (TraceClassLoadingPreorder) {
|
||||||
tty->print("[Loading %s", name->as_klass_external_name());
|
tty->print("[Loading %s", (name != NULL) ? name->as_klass_external_name() : "NoName");
|
||||||
if (cfs->source() != NULL) tty->print(" from %s", cfs->source());
|
if (cfs->source() != NULL) tty->print(" from %s", cfs->source());
|
||||||
tty->print_cr("]");
|
tty->print_cr("]");
|
||||||
}
|
}
|
||||||
|
@ -268,8 +268,15 @@ ClassDescriptor* ClassDescriptor::parse_generic_signature(
|
|||||||
Klass* outer = SystemDictionary::find(
|
Klass* outer = SystemDictionary::find(
|
||||||
outer_name, class_loader, protection_domain, CHECK_NULL);
|
outer_name, class_loader, protection_domain, CHECK_NULL);
|
||||||
if (outer == NULL && !THREAD->is_Compiler_thread()) {
|
if (outer == NULL && !THREAD->is_Compiler_thread()) {
|
||||||
outer = SystemDictionary::resolve_super_or_fail(original_name,
|
if (outer_name == ik->super()->name()) {
|
||||||
outer_name, class_loader, protection_domain, false, CHECK_NULL);
|
outer = SystemDictionary::resolve_super_or_fail(original_name, outer_name,
|
||||||
|
class_loader, protection_domain,
|
||||||
|
false, CHECK_NULL);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
outer = SystemDictionary::resolve_or_fail(outer_name, class_loader,
|
||||||
|
protection_domain, false, CHECK_NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceKlass* outer_ik;
|
InstanceKlass* outer_ik;
|
||||||
|
@ -1014,7 +1014,21 @@ void LinkResolver::runtime_resolve_interface_method(CallInfo& result, methodHand
|
|||||||
resolved_method->name(),
|
resolved_method->name(),
|
||||||
resolved_method->signature()));
|
resolved_method->signature()));
|
||||||
}
|
}
|
||||||
// check if public
|
// check access
|
||||||
|
if (sel_method->method_holder()->is_interface()) {
|
||||||
|
// Method holder is an interface. Throw Illegal Access Error if sel_method
|
||||||
|
// is neither public nor private.
|
||||||
|
if (!(sel_method->is_public() || sel_method->is_private())) {
|
||||||
|
ResourceMark rm(THREAD);
|
||||||
|
THROW_MSG(vmSymbols::java_lang_IllegalAccessError(),
|
||||||
|
Method::name_and_sig_as_C_string(recv_klass(),
|
||||||
|
sel_method->name(),
|
||||||
|
sel_method->signature()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Method holder is a class. Throw Illegal Access Error if sel_method
|
||||||
|
// is not public.
|
||||||
if (!sel_method->is_public()) {
|
if (!sel_method->is_public()) {
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
THROW_MSG(vmSymbols::java_lang_IllegalAccessError(),
|
THROW_MSG(vmSymbols::java_lang_IllegalAccessError(),
|
||||||
@ -1022,6 +1036,7 @@ void LinkResolver::runtime_resolve_interface_method(CallInfo& result, methodHand
|
|||||||
sel_method->name(),
|
sel_method->name(),
|
||||||
sel_method->signature()));
|
sel_method->signature()));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// check if abstract
|
// check if abstract
|
||||||
if (check_null_and_abstract && sel_method->is_abstract()) {
|
if (check_null_and_abstract && sel_method->is_abstract()) {
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
|
@ -187,6 +187,11 @@ oop MethodHandles::init_method_MemberName(oop mname_oop, Method* m, bool do_disp
|
|||||||
flags |= IS_CONSTRUCTOR | (JVM_REF_invokeSpecial << REFERENCE_KIND_SHIFT);
|
flags |= IS_CONSTRUCTOR | (JVM_REF_invokeSpecial << REFERENCE_KIND_SHIFT);
|
||||||
} else if (mods.is_static()) {
|
} else if (mods.is_static()) {
|
||||||
flags |= IS_METHOD | (JVM_REF_invokeStatic << REFERENCE_KIND_SHIFT);
|
flags |= IS_METHOD | (JVM_REF_invokeStatic << REFERENCE_KIND_SHIFT);
|
||||||
|
// Check if this method is a lambda method that is generated as
|
||||||
|
// private static method.
|
||||||
|
if (m->is_private() && m->method_holder()->is_interface()) {
|
||||||
|
vmindex = klassItable::compute_itable_index(m);
|
||||||
|
}
|
||||||
} else if (receiver_limit != mklass &&
|
} else if (receiver_limit != mklass &&
|
||||||
!receiver_limit->is_subtype_of(mklass)) {
|
!receiver_limit->is_subtype_of(mklass)) {
|
||||||
return NULL; // bad receiver limit
|
return NULL; // bad receiver limit
|
||||||
|
@ -1901,7 +1901,7 @@ bool Arguments::check_vm_args_consistency() {
|
|||||||
|
|
||||||
// Divide by bucket size to prevent a large size from causing rollover when
|
// Divide by bucket size to prevent a large size from causing rollover when
|
||||||
// calculating amount of memory needed to be allocated for the String table.
|
// calculating amount of memory needed to be allocated for the String table.
|
||||||
status = status && verify_interval(StringTableSize, defaultStringTableSize,
|
status = status && verify_interval(StringTableSize, minimumStringTableSize,
|
||||||
(max_uintx / StringTable::bucket_size()), "StringTable size");
|
(max_uintx / StringTable::bucket_size()), "StringTable size");
|
||||||
|
|
||||||
if (MinHeapFreeRatio > MaxHeapFreeRatio) {
|
if (MinHeapFreeRatio > MaxHeapFreeRatio) {
|
||||||
|
@ -133,7 +133,7 @@ typedef struct _memType2Name {
|
|||||||
|
|
||||||
|
|
||||||
// This class aggregates malloc'd records by memory type
|
// This class aggregates malloc'd records by memory type
|
||||||
class MallocMem : public _ValueObj {
|
class MallocMem VALUE_OBJ_CLASS_SPEC {
|
||||||
private:
|
private:
|
||||||
MEMFLAGS _type;
|
MEMFLAGS _type;
|
||||||
|
|
||||||
@ -211,7 +211,7 @@ class ArenaMem : public MallocMem {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// This class aggregates virtual memory by its memory type
|
// This class aggregates virtual memory by its memory type
|
||||||
class VMMem : public _ValueObj {
|
class VMMem VALUE_OBJ_CLASS_SPEC {
|
||||||
private:
|
private:
|
||||||
MEMFLAGS _type;
|
MEMFLAGS _type;
|
||||||
|
|
||||||
@ -296,7 +296,7 @@ class BaselineComparisonReporter;
|
|||||||
* aggregates memory usage by callsites when detail tracking
|
* aggregates memory usage by callsites when detail tracking
|
||||||
* is on.
|
* is on.
|
||||||
*/
|
*/
|
||||||
class MemBaseline : public _ValueObj {
|
class MemBaseline VALUE_OBJ_CLASS_SPEC {
|
||||||
friend class BaselineReporter;
|
friend class BaselineReporter;
|
||||||
friend class BaselineComparisonReporter;
|
friend class BaselineComparisonReporter;
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ class SequenceGenerator : AllStatic {
|
|||||||
* the memory pointer either points to a malloc'd
|
* the memory pointer either points to a malloc'd
|
||||||
* memory block, or a mmap'd memory block
|
* memory block, or a mmap'd memory block
|
||||||
*/
|
*/
|
||||||
class MemPointer : public _ValueObj {
|
class MemPointer VALUE_OBJ_CLASS_SPEC {
|
||||||
public:
|
public:
|
||||||
MemPointer(): _addr(0) { }
|
MemPointer(): _addr(0) { }
|
||||||
MemPointer(address addr): _addr(addr) { }
|
MemPointer(address addr): _addr(addr) { }
|
||||||
|
@ -308,7 +308,7 @@ class VMRecordIterator : public MemPointerArrayIterator {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class StagingArea : public _ValueObj {
|
class StagingArea VALUE_OBJ_CLASS_SPEC {
|
||||||
private:
|
private:
|
||||||
MemPointerArray* _malloc_data;
|
MemPointerArray* _malloc_data;
|
||||||
MemPointerArray* _vm_data;
|
MemPointerArray* _vm_data;
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
// Maximum MAX_GENERATIONS generation data can be tracked.
|
// Maximum MAX_GENERATIONS generation data can be tracked.
|
||||||
#define MAX_GENERATIONS 512
|
#define MAX_GENERATIONS 512
|
||||||
|
|
||||||
class GenerationData : public _ValueObj {
|
class GenerationData VALUE_OBJ_CLASS_SPEC {
|
||||||
private:
|
private:
|
||||||
int _number_of_classes;
|
int _number_of_classes;
|
||||||
MemRecorder* _recorder_list;
|
MemRecorder* _recorder_list;
|
||||||
|
@ -328,9 +328,10 @@ const int max_method_code_size = 64*K - 1; // JVM spec, 2nd ed. section 4.8.1 (
|
|||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
// Minimum StringTableSize value
|
// Default and minimum StringTableSize values
|
||||||
|
|
||||||
const int defaultStringTableSize=1009;
|
const int defaultStringTableSize = NOT_LP64(1009) LP64_ONLY(60013);
|
||||||
|
const int minimumStringTableSize=1009;
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user