OpenJDK / jdk / hs
changeset 29873:09af07f9398c
Merge
author | lana |
---|---|
date | Fri, 17 Apr 2015 10:24:06 -0700 |
parents | cf6c46c36cdb f7c7fb04a0d7 |
children | 7d183fc45f37 |
files | |
diffstat | 6 files changed, 42 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.hpp Fri Apr 17 09:59:43 2015 -0700 +++ b/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.hpp Fri Apr 17 10:24:06 2015 -0700 @@ -39,6 +39,8 @@ protected: protected: + using MacroAssembler::call_VM_leaf_base; + // Interpreter specific version of call_VM_base virtual void call_VM_leaf_base(address entry_point, int number_of_arguments);
--- a/hotspot/src/cpu/aarch64/vm/register_aarch64.hpp Fri Apr 17 09:59:43 2015 -0700 +++ b/hotspot/src/cpu/aarch64/vm/register_aarch64.hpp Fri Apr 17 10:24:06 2015 -0700 @@ -60,7 +60,10 @@ bool has_byte_register() const { return 0 <= (intptr_t)this && (intptr_t)this < number_of_byte_registers; } const char* name() const; int encoding_nocheck() const { return (intptr_t)this; } - unsigned long bit(bool yes = true) const { return yes << encoding(); } + + // Return the bit which represents this register. This is intended + // to be ORed into a bitmask: for usage see class RegSet below. + unsigned long bit(bool should_set = true) const { return should_set ? 1 << encoding() : 0; } }; // The integer registers of the aarch64 architecture
--- a/hotspot/src/share/vm/classfile/defaultMethods.cpp Fri Apr 17 09:59:43 2015 -0700 +++ b/hotspot/src/share/vm/classfile/defaultMethods.cpp Fri Apr 17 10:24:06 2015 -0700 @@ -731,10 +731,12 @@ Method* m = iklass->find_method(_method_name, _method_signature); // private interface methods are not candidates for default methods // invokespecial to private interface methods doesn't use default method logic + // private class methods are not candidates for default methods, + // private methods do not override default methods, so need to perform + // default method inheritance without including private methods // The overpasses are your supertypes' errors, we do not include them // future: take access controls into account for superclass methods - if (m != NULL && !m->is_static() && !m->is_overpass() && - (!iklass->is_interface() || m->is_public())) { + if (m != NULL && !m->is_static() && !m->is_overpass() && !m->is_private()) { if (_family == NULL) { _family = new StatefulMethodFamily(); } @@ -745,6 +747,9 @@ } else { // This is the rule that methods in classes "win" (bad word) over // methods in interfaces. This works because of single inheritance + // private methods in classes do not "win", they will be found + // first on searching, but overriding for invokevirtual needs + // to find default method candidates for the same signature _family->set_target_if_empty(m); } }
--- a/hotspot/src/share/vm/memory/referenceProcessor.cpp Fri Apr 17 09:59:43 2015 -0700 +++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp Fri Apr 17 10:24:06 2015 -0700 @@ -250,7 +250,7 @@ // Cleaner references to be temporary, and don't want to deal with // possible incompatibilities arising from making it more visible. phantom_count += - process_discovered_reflist(_discoveredCleanerRefs, NULL, false, + process_discovered_reflist(_discoveredCleanerRefs, NULL, true, is_alive, keep_alive, complete_gc, task_executor); }
--- a/hotspot/src/share/vm/oops/klassVtable.cpp Fri Apr 17 09:59:43 2015 -0700 +++ b/hotspot/src/share/vm/oops/klassVtable.cpp Fri Apr 17 10:24:06 2015 -0700 @@ -404,13 +404,15 @@ // get super_klass for method_holder for the found method InstanceKlass* super_klass = super_method->method_holder(); - if (is_default + // private methods are also never overridden + if (!super_method->is_private() && + (is_default || ((super_klass->is_override(super_method, target_loader, target_classname, THREAD)) || ((klass->major_version() >= VTABLE_TRANSITIVE_OVERRIDE_VERSION) && ((super_klass = find_transitive_override(super_klass, target_method, i, target_loader, target_classname, THREAD)) - != (InstanceKlass*)NULL)))) + != (InstanceKlass*)NULL))))) { // Package private methods always need a new entry to root their own // overriding. They may also override other methods. @@ -692,9 +694,15 @@ // check if a method is a miranda method, given a class's methods table, // its default_method table and its super // Miranda methods are calculated twice: -// first: before vtable size calculation: including abstract and default +// first: before vtable size calculation: including abstract and superinterface default +// We include potential default methods to give them space in the vtable. +// During the first run, the default_methods list is empty // This is seen by default method creation -// Second: recalculated during vtable initialization: only abstract +// Second: recalculated during vtable initialization: only include abstract methods. +// During the second run, default_methods is set up, so concrete methods from +// superinterfaces with matching names/signatures to default_methods are already +// in the default_methods list and do not need to be appended to the vtable +// as mirandas // This is seen by link resolution and selection. // "miranda" means not static, not defined by this class. // private methods in interfaces do not belong in the miranda list. @@ -709,8 +717,9 @@ } Symbol* name = m->name(); Symbol* signature = m->signature(); + Method* mo; - if (InstanceKlass::find_instance_method(class_methods, name, signature) == NULL) { + if ((mo = InstanceKlass::find_instance_method(class_methods, name, signature)) == NULL) { // did not find it in the method table of the current class if ((default_methods == NULL) || InstanceKlass::find_method(default_methods, name, signature) == NULL) { @@ -719,7 +728,7 @@ return true; } - Method* mo = InstanceKlass::cast(super)->lookup_method(name, signature); + mo = InstanceKlass::cast(super)->lookup_method(name, signature); while (mo != NULL && mo->access_flags().is_static() && mo->method_holder() != NULL && mo->method_holder()->super() != NULL) @@ -731,6 +740,18 @@ return true; } } + } else { + // if the local class has a private method, the miranda will not + // override it, so a vtable slot is needed + if (mo->access_flags().is_private()) { + + // Second round, weed out any superinterface methods that turned + // into default methods, i.e. were concrete not abstract in the end + if ((default_methods == NULL) || + InstanceKlass::find_method(default_methods, name, signature) == NULL) { + return true; + } + } } return false;
--- a/hotspot/src/share/vm/runtime/arguments.cpp Fri Apr 17 09:59:43 2015 -0700 +++ b/hotspot/src/share/vm/runtime/arguments.cpp Fri Apr 17 10:24:06 2015 -0700 @@ -2320,7 +2320,7 @@ "G1ConcMarkStepDurationMillis"); status = status && verify_interval(G1ConcRSHotCardLimit, 0, max_jubyte, "G1ConcRSHotCardLimit"); - status = status && verify_interval(G1ConcRSLogCacheSize, 0, 31, + status = status && verify_interval(G1ConcRSLogCacheSize, 0, 27, "G1ConcRSLogCacheSize"); status = status && verify_interval(StringDeduplicationAgeThreshold, 1, markOopDesc::max_age, "StringDeduplicationAgeThreshold");