# HG changeset patch # User ccheung # Date 1381541024 25200 # Node ID 41459da469aec4090be7cda005db5081aa9be8f0 # Parent 26ae62bc26c43ed1b357a1df6cc0197237be27b4# Parent aa6f2ea19d8f8212c87a8c5169e7c53f636adef6 Merge diff -r aa6f2ea19d8f -r 41459da469ae src/share/vm/oops/constantPool.cpp --- a/src/share/vm/oops/constantPool.cpp Fri Oct 11 08:27:21 2013 -0700 +++ b/src/share/vm/oops/constantPool.cpp Fri Oct 11 18:23:44 2013 -0700 @@ -869,18 +869,9 @@ bool ConstantPool::compare_entry_to(int index1, constantPoolHandle cp2, int index2, TRAPS) { - jbyte t1 = tag_at(index1).value(); - jbyte t2 = cp2->tag_at(index2).value(); - - - // JVM_CONSTANT_UnresolvedClassInError is equal to JVM_CONSTANT_UnresolvedClass - // when comparing - if (t1 == JVM_CONSTANT_UnresolvedClassInError) { - t1 = JVM_CONSTANT_UnresolvedClass; - } - if (t2 == JVM_CONSTANT_UnresolvedClassInError) { - t2 = JVM_CONSTANT_UnresolvedClass; - } + // The error tags are equivalent to non-error tags when comparing + jbyte t1 = tag_at(index1).non_error_value(); + jbyte t2 = cp2->tag_at(index2).non_error_value(); if (t1 != t2) { // Not the same entry type so there is nothing else to check. Note @@ -1001,8 +992,8 @@ case JVM_CONSTANT_MethodType: { - int k1 = method_type_index_at(index1); - int k2 = cp2->method_type_index_at(index2); + int k1 = method_type_index_at_error_ok(index1); + int k2 = cp2->method_type_index_at_error_ok(index2); bool match = compare_entry_to(k1, cp2, k2, CHECK_false); if (match) { return true; @@ -1011,11 +1002,11 @@ case JVM_CONSTANT_MethodHandle: { - int k1 = method_handle_ref_kind_at(index1); - int k2 = cp2->method_handle_ref_kind_at(index2); + int k1 = method_handle_ref_kind_at_error_ok(index1); + int k2 = cp2->method_handle_ref_kind_at_error_ok(index2); if (k1 == k2) { - int i1 = method_handle_index_at(index1); - int i2 = cp2->method_handle_index_at(index2); + int i1 = method_handle_index_at_error_ok(index1); + int i2 = cp2->method_handle_index_at_error_ok(index2); bool match = compare_entry_to(i1, cp2, i2, CHECK_false); if (match) { return true; @@ -1329,14 +1320,6 @@ } } break; - case JVM_CONSTANT_UnresolvedClassInError: - { - Symbol* k = from_cp->unresolved_klass_at(from_i); - to_cp->unresolved_klass_at_put(to_i, k); - to_cp->tag_at_put(to_i, JVM_CONSTANT_UnresolvedClassInError); - } break; - - case JVM_CONSTANT_String: { Symbol* s = from_cp->unresolved_string_at(from_i); @@ -1352,15 +1335,17 @@ } break; case JVM_CONSTANT_MethodType: + case JVM_CONSTANT_MethodTypeInError: { - jint k = from_cp->method_type_index_at(from_i); + jint k = from_cp->method_type_index_at_error_ok(from_i); to_cp->method_type_index_at_put(to_i, k); } break; case JVM_CONSTANT_MethodHandle: + case JVM_CONSTANT_MethodHandleInError: { - int k1 = from_cp->method_handle_ref_kind_at(from_i); - int k2 = from_cp->method_handle_index_at(from_i); + int k1 = from_cp->method_handle_ref_kind_at_error_ok(from_i); + int k2 = from_cp->method_handle_index_at_error_ok(from_i); to_cp->method_handle_index_at_put(to_i, k1, k2); } break; diff -r aa6f2ea19d8f -r 41459da469ae src/share/vm/services/heapDumper.cpp --- a/src/share/vm/services/heapDumper.cpp Fri Oct 11 08:27:21 2013 -0700 +++ b/src/share/vm/services/heapDumper.cpp Fri Oct 11 18:23:44 2013 -0700 @@ -1545,7 +1545,9 @@ // writes a HPROF_GC_CLASS_DUMP record for the given class void VM_HeapDumper::do_class_dump(Klass* k) { - DumperSupport::dump_class_and_array_classes(writer(), k); + if (k->oop_is_instance()) { + DumperSupport::dump_class_and_array_classes(writer(), k); + } } // writes a HPROF_GC_CLASS_DUMP records for a given basic type @@ -1722,7 +1724,7 @@ SymbolTable::symbols_do(&sym_dumper); // write HPROF_LOAD_CLASS records - SystemDictionary::classes_do(&do_load_class); + ClassLoaderDataGraph::classes_do(&do_load_class); Universe::basic_type_classes_do(&do_load_class); // write HPROF_FRAME and HPROF_TRACE records @@ -1733,7 +1735,7 @@ write_dump_header(); // Writes HPROF_GC_CLASS_DUMP records - SystemDictionary::classes_do(&do_class_dump); + ClassLoaderDataGraph::classes_do(&do_class_dump); Universe::basic_type_classes_do(&do_basic_type_array_class_dump); check_segment_length(); diff -r aa6f2ea19d8f -r 41459da469ae src/share/vm/utilities/constantTag.cpp --- a/src/share/vm/utilities/constantTag.cpp Fri Oct 11 08:27:21 2013 -0700 +++ b/src/share/vm/utilities/constantTag.cpp Fri Oct 11 18:23:44 2013 -0700 @@ -51,7 +51,9 @@ case JVM_CONSTANT_ClassIndex : case JVM_CONSTANT_StringIndex : case JVM_CONSTANT_MethodHandle : + case JVM_CONSTANT_MethodHandleInError : case JVM_CONSTANT_MethodType : + case JVM_CONSTANT_MethodTypeInError : return T_OBJECT; default: ShouldNotReachHere(); @@ -60,6 +62,19 @@ } +jbyte constantTag::non_error_value() const { + switch (_tag) { + case JVM_CONSTANT_UnresolvedClassInError: + return JVM_CONSTANT_UnresolvedClass; + case JVM_CONSTANT_MethodHandleInError: + return JVM_CONSTANT_MethodHandle; + case JVM_CONSTANT_MethodTypeInError: + return JVM_CONSTANT_MethodType; + default: + return _tag; + } +} + const char* constantTag::internal_name() const { switch (_tag) { diff -r aa6f2ea19d8f -r 41459da469ae src/share/vm/utilities/constantTag.hpp --- a/src/share/vm/utilities/constantTag.hpp Fri Oct 11 08:27:21 2013 -0700 +++ b/src/share/vm/utilities/constantTag.hpp Fri Oct 11 18:23:44 2013 -0700 @@ -108,7 +108,8 @@ _tag = tag; } - jbyte value() { return _tag; } + jbyte value() const { return _tag; } + jbyte non_error_value() const; BasicType basic_type() const; // if used with ldc, what kind of value gets pushed? diff -r aa6f2ea19d8f -r 41459da469ae test/serviceability/sa/jmap-hprof/JMapHProfLargeHeapTest.java --- a/test/serviceability/sa/jmap-hprof/JMapHProfLargeHeapTest.java Fri Oct 11 08:27:21 2013 -0700 +++ b/test/serviceability/sa/jmap-hprof/JMapHProfLargeHeapTest.java Fri Oct 11 18:23:44 2013 -0700 @@ -59,7 +59,7 @@ // If we are on MacOSX, test if JMap tool is signed, otherwise return // since test will fail with privilege error. if (Platform.isOSX()) { - String jmapToolPath = JDKToolFinder.getCurrentJDKTool("jmap"); + String jmapToolPath = JDKToolFinder.getTestJDKTool("jmap"); ProcessBuilder codesignProcessBuilder = new ProcessBuilder( "codesign", "-v", jmapToolPath); Process codesignProcess = codesignProcessBuilder.start(); @@ -107,7 +107,7 @@ System.out.println("Extracted pid: " + pid); JDKToolLauncher jMapLauncher = JDKToolLauncher - .create("jmap", false); + .createUsingTestJDK("jmap"); jMapLauncher.addToolArg("-dump:format=b,file=" + pid + "-" + HEAP_DUMP_FILE_NAME); jMapLauncher.addToolArg(String.valueOf(pid)); diff -r aa6f2ea19d8f -r 41459da469ae test/testlibrary/com/oracle/java/testlibrary/JDKToolLauncher.java --- a/test/testlibrary/com/oracle/java/testlibrary/JDKToolLauncher.java Fri Oct 11 08:27:21 2013 -0700 +++ b/test/testlibrary/com/oracle/java/testlibrary/JDKToolLauncher.java Fri Oct 11 18:23:44 2013 -0700 @@ -56,7 +56,7 @@ if (useCompilerJDK) { executable = JDKToolFinder.getJDKTool(tool); } else { - executable = JDKToolFinder.getCurrentJDKTool(tool); + executable = JDKToolFinder.getTestJDKTool(tool); } vmArgs.addAll(Arrays.asList(ProcessTools.getPlatformSpecificVMArgs())); } @@ -74,17 +74,15 @@ } /** - * Creates a new JDKToolLauncher for the specified tool. + * Creates a new JDKToolLauncher for the specified tool in the Tested JDK. * * @param tool * The name of the tool - * @param useCompilerPath - * If true use the compiler JDK path, otherwise use the tested - * JDK path. + * * @return A new JDKToolLauncher */ - public static JDKToolLauncher create(String tool, boolean useCompilerJDK) { - return new JDKToolLauncher(tool, useCompilerJDK); + public static JDKToolLauncher createUsingTestJDK(String tool) { + return new JDKToolLauncher(tool, false); } /**