# HG changeset patch # User jiangli # Date 1421271358 18000 # Node ID d50b1d3012fac6d5bc6d1e576b00ceb17ea88398 # Parent 1fb960ea5a7e41057114f181979ebef938715a39# Parent 62e06483ebfc67c9e9d6065c852b022743858d06 Merge diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/make/aix/Makefile --- a/hotspot/make/aix/Makefile Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/make/aix/Makefile Wed Jan 14 16:35:58 2015 -0500 @@ -246,8 +246,7 @@ XSLT_CHECK = $(REMOTE) $(RUN.JAVAP) javax.xml.transform.TransformerFactory # If not found then fail fast. check_j2se_version: - $(QUIETLY) $(XSLT_CHECK) > /dev/null 2>&1; \ - if [ $$? -ne 0 ]; then \ + $(QUIETLY) if ! $(XSLT_CHECK) > /dev/null 2>&1; then \ $(REMOTE) $(RUN.JAVA) -version; \ echo "*** An XSLT processor (J2SE 1.4.x or newer) is required" \ "to bootstrap this build" 1>&2; \ diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/make/bsd/Makefile --- a/hotspot/make/bsd/Makefile Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/make/bsd/Makefile Wed Jan 14 16:35:58 2015 -0500 @@ -240,8 +240,7 @@ XSLT_CHECK = $(REMOTE) $(RUN.JAVAP) javax.xml.transform.TransformerFactory # If not found then fail fast. check_j2se_version: - $(QUIETLY) $(XSLT_CHECK) > /dev/null 2>&1; \ - if [ $$? -ne 0 ]; then \ + $(QUIETLY) if ! $(XSLT_CHECK) > /dev/null 2>&1; then \ $(REMOTE) $(RUN.JAVA) -version; \ echo "*** An XSLT processor (J2SE 1.4.x or newer) is required" \ "to bootstrap this build" 1>&2; \ diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/make/bsd/makefiles/dtrace.make --- a/hotspot/make/bsd/makefiles/dtrace.make Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/make/bsd/makefiles/dtrace.make Wed Jan 14 16:35:58 2015 -0500 @@ -179,23 +179,23 @@ # $@.tmp is created first to avoid an empty $(JVMOFFS).h if an error occurs. $(JVMOFFS).h: $(GENOFFS) $(QUIETLY) DYLD_LIBRARY_PATH=.:$(DYLD_LIBRARY_PATH) ./$(GENOFFS) -header > $@.tmp; touch $@; \ - if [ `diff $@.tmp $@ > /dev/null 2>&1; echo $$?` -ne 0 ] ; \ - then rm -f $@; mv $@.tmp $@; \ - else rm -f $@.tmp; \ + if diff $@.tmp $@ > /dev/null 2>&1 ; \ + then rm -f $@.tmp; \ + else rm -f $@; mv $@.tmp $@; \ fi $(JVMOFFS)Index.h: $(GENOFFS) $(QUIETLY) DYLD_LIBRARY_PATH=.:$(DYLD_LIBRARY_PATH) ./$(GENOFFS) -index > $@.tmp; touch $@; \ - if [ `diff $@.tmp $@ > /dev/null 2>&1; echo $$?` -ne 0 ] ; \ - then rm -f $@; mv $@.tmp $@; \ - else rm -f $@.tmp; \ + if diff $@.tmp $@ > /dev/null 2>&1 ; \ + then rm -f $@.tmp; \ + else rm -f $@; mv $@.tmp $@; \ fi $(JVMOFFS).cpp: $(GENOFFS) $(JVMOFFS).h $(JVMOFFS)Index.h $(QUIETLY) DYLD_LIBRARY_PATH=.:$(DYLD_LIBRARY_PATH) ./$(GENOFFS) -table > $@.tmp; touch $@; \ - if [ `diff $@.tmp $@ > /dev/null 2>&1; echo $$?` -ne 0 ] ; \ - then rm -f $@; mv $@.tmp $@; \ - else rm -f $@.tmp; \ + if diff $@.tmp $@ > /dev/null 2>&1; \ + then rm -f $@.tmp; \ + else rm -f $@; mv $@.tmp $@; \ fi $(JVMOFFS.o): $(JVMOFFS).h $(JVMOFFS).cpp diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/make/bsd/makefiles/universal.gmk --- a/hotspot/make/bsd/makefiles/universal.gmk Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/make/bsd/makefiles/universal.gmk Wed Jan 14 16:35:58 2015 -0500 @@ -59,7 +59,7 @@ # Package built libraries in a universal binary $(UNIVERSAL_LIPO_LIST): - BUILT_LIPO_FILES="`find $(EXPORT_JRE_LIB_DIR)/{i386,amd64}/$(subst $(EXPORT_JRE_LIB_DIR)/,,$@) 2>/dev/null`"; \ + BUILT_LIPO_FILES="`find $(EXPORT_JRE_LIB_DIR)/{i386,amd64}/$(subst $(EXPORT_JRE_LIB_DIR)/,,$@) 2>/dev/null`" || test $$? = "1"; \ if [ -n "$${BUILT_LIPO_FILES}" ]; then \ $(MKDIR) -p $(shell dirname $@); \ lipo -create -output $@ $${BUILT_LIPO_FILES}; \ @@ -70,7 +70,7 @@ # - copies directories; including empty dirs # - copies files, symlinks, other non-directory files $(UNIVERSAL_COPY_LIST): - BUILT_COPY_FILES="`find $(EXPORT_JRE_LIB_DIR)/{i386,amd64}/$(subst $(EXPORT_JRE_LIB_DIR)/,,$@) -prune 2>/dev/null`"; \ + BUILT_COPY_FILES="`find $(EXPORT_JRE_LIB_DIR)/{i386,amd64}/$(subst $(EXPORT_JRE_LIB_DIR)/,,$@) -prune 2>/dev/null`" || test $$? = "1"; \ if [ -n "$${BUILT_COPY_FILES}" ]; then \ for i in $${BUILT_COPY_FILES}; do \ $(MKDIR) -p $(shell dirname $@); \ diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/make/linux/Makefile --- a/hotspot/make/linux/Makefile Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/make/linux/Makefile Wed Jan 14 16:35:58 2015 -0500 @@ -246,8 +246,7 @@ XSLT_CHECK = $(REMOTE) $(RUN.JAVAP) javax.xml.transform.TransformerFactory # If not found then fail fast. check_j2se_version: - $(QUIETLY) $(XSLT_CHECK) > /dev/null 2>&1; \ - if [ $$? -ne 0 ]; then \ + $(QUIETLY) if ! $(XSLT_CHECK) > /dev/null 2>&1; then \ $(REMOTE) $(RUN.JAVA) -version; \ echo "*** An XSLT processor (J2SE 1.4.x or newer) is required" \ "to bootstrap this build" 1>&2; \ diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/make/linux/makefiles/vm.make --- a/hotspot/make/linux/makefiles/vm.make Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/make/linux/makefiles/vm.make Wed Jan 14 16:35:58 2015 -0500 @@ -334,10 +334,8 @@ rm -f $@.1; ln -s $@ $@.1; \ if [ \"$(CROSS_COMPILE_ARCH)\" = \"\" ] ; then \ if [ -x /usr/sbin/selinuxenabled ] ; then \ - /usr/sbin/selinuxenabled; \ - if [ $$? = 0 ] ; then \ - /usr/bin/chcon -t textrel_shlib_t $@; \ - if [ $$? != 0 ]; then \ + if /usr/sbin/selinuxenabled; then \ + if ! /usr/bin/chcon -t textrel_shlib_t $@; then \ echo "ERROR: Cannot chcon $@"; \ fi \ fi \ diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/make/solaris/Makefile --- a/hotspot/make/solaris/Makefile Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/make/solaris/Makefile Wed Jan 14 16:35:58 2015 -0500 @@ -190,8 +190,7 @@ XSLT_CHECK = $(RUN.JAVAP) javax.xml.transform.TransformerFactory # If not found then fail fast. check_j2se_version: - $(QUIETLY) $(XSLT_CHECK) > /dev/null 2>&1; \ - if [ $$? -ne 0 ]; then \ + $(QUIETLY) if ! $(XSLT_CHECK) > /dev/null 2>&1; then \ $(RUN.JAVA) -version; \ echo "*** An XSLT processor (J2SE 1.4.x or newer) is required" \ "to bootstrap this build" 1>&2; \ diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/make/solaris/makefiles/dtrace.make --- a/hotspot/make/solaris/makefiles/dtrace.make Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/make/solaris/makefiles/dtrace.make Wed Jan 14 16:35:58 2015 -0500 @@ -171,11 +171,11 @@ ./lib$(GENOFFS).so CONDITIONALLY_UPDATE_JVMOFFS_TARGET = \ - cmp -s $@ $@.tmp; \ - case $$? in \ - 0) rm -f $@.tmp;; \ - *) rm -f $@ && mv $@.tmp $@ && echo Updated $@;; \ - esac + if cmp -s $@ $@.tmp; then \ + rm -f $@.tmp; \ + else \ + rm -f $@ && mv $@.tmp $@ && echo Updated $@; \ + fi # $@.tmp is created first to avoid an empty $(JVMOFFS).h if an error occurs. $(JVMOFFS).h: $(GENOFFS) diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/src/share/vm/classfile/verifier.cpp --- a/hotspot/src/share/vm/classfile/verifier.cpp Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/src/share/vm/classfile/verifier.cpp Wed Jan 14 16:35:58 2015 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -1546,10 +1546,15 @@ no_control_flow = true; break; case Bytecodes::_getstatic : case Bytecodes::_putstatic : + // pass TRUE, operand can be an array type for getstatic/putstatic. + verify_field_instructions( + &bcs, ¤t_frame, cp, true, CHECK_VERIFY(this)); + no_control_flow = false; break; case Bytecodes::_getfield : case Bytecodes::_putfield : + // pass FALSE, operand can't be an array type for getfield/putfield. verify_field_instructions( - &bcs, ¤t_frame, cp, CHECK_VERIFY(this)); + &bcs, ¤t_frame, cp, false, CHECK_VERIFY(this)); no_control_flow = false; break; case Bytecodes::_invokevirtual : case Bytecodes::_invokespecial : @@ -2107,6 +2112,7 @@ void ClassVerifier::verify_field_instructions(RawBytecodeStream* bcs, StackMapFrame* current_frame, constantPoolHandle cp, + bool allow_arrays, TRAPS) { u2 index = bcs->get_index_u2(); verify_cp_type(bcs->bci(), index, cp, @@ -2126,8 +2132,8 @@ // Get referenced class type VerificationType ref_class_type = cp_ref_index_to_type( index, cp, CHECK_VERIFY(this)); - if (!ref_class_type.is_object()) { - /* Unreachable? Class file parser verifies Fieldref contents */ + if (!ref_class_type.is_object() && + (!allow_arrays || !ref_class_type.is_array())) { verify_error(ErrorContext::bad_type(bcs->bci(), TypeOrigin::cp(index, ref_class_type)), "Expecting reference to class in class %s at constant pool index %d", diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/src/share/vm/classfile/verifier.hpp --- a/hotspot/src/share/vm/classfile/verifier.hpp Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/src/share/vm/classfile/verifier.hpp Wed Jan 14 16:35:58 2015 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -297,7 +297,7 @@ void verify_field_instructions( RawBytecodeStream* bcs, StackMapFrame* current_frame, - constantPoolHandle cp, TRAPS); + constantPoolHandle cp, bool allow_arrays, TRAPS); void verify_invoke_init( RawBytecodeStream* bcs, u2 ref_index, VerificationType ref_class_type, diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/src/share/vm/memory/metaspace.cpp --- a/hotspot/src/share/vm/memory/metaspace.cpp Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/src/share/vm/memory/metaspace.cpp Wed Jan 14 16:35:58 2015 -0500 @@ -3170,7 +3170,9 @@ } // the min_misc_data_size and min_misc_code_size estimates are based on - // MetaspaceShared::generate_vtable_methods() + // MetaspaceShared::generate_vtable_methods(). + // The minimum size only accounts for the vtable methods. Any size less than the + // minimum required size would cause vm crash when allocating the vtable methods. uint min_misc_data_size = align_size_up( MetaspaceShared::num_virtuals * MetaspaceShared::vtbl_list_size * sizeof(void*), max_alignment); @@ -3336,6 +3338,10 @@ Metachunk* new_chunk = get_initialization_chunk(NonClassType, word_size, vsm()->medium_chunk_bunch()); + // For dumping shared archive, report error if allocation has failed. + if (DumpSharedSpaces && new_chunk == NULL) { + report_insufficient_metaspace(MetaspaceAux::committed_bytes() + word_size * BytesPerWord); + } assert(!DumpSharedSpaces || new_chunk != NULL, "should have enough space for both chunks"); if (new_chunk != NULL) { // Add to this manager's list of chunks in use and current_chunk(). @@ -3349,6 +3355,11 @@ class_vsm()->medium_chunk_bunch()); if (class_chunk != NULL) { class_vsm()->add_chunk(class_chunk, true); + } else { + // For dumping shared archive, report error if allocation has failed. + if (DumpSharedSpaces) { + report_insufficient_metaspace(MetaspaceAux::committed_bytes() + class_word_size * BytesPerWord); + } } } diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/src/share/vm/runtime/globals.hpp --- a/hotspot/src/share/vm/runtime/globals.hpp Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/src/share/vm/runtime/globals.hpp Wed Jan 14 16:35:58 2015 -0500 @@ -2951,10 +2951,6 @@ develop(intx, MallocCatchPtr, -1, \ "Hit breakpoint when mallocing/freeing this pointer") \ \ - notproduct(intx, AssertRepeat, 1, \ - "number of times to evaluate expression in assert " \ - "(to estimate overhead); only works with -DUSE_REPEATED_ASSERTS") \ - \ notproduct(ccstrlist, SuppressErrorAt, "", \ "List of assertions (file:line) to muzzle") \ \ diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/src/share/vm/shark/llvmHeaders.hpp --- a/hotspot/src/share/vm/shark/llvmHeaders.hpp Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/src/share/vm/shark/llvmHeaders.hpp Wed Jan 14 16:35:58 2015 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2009, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -87,30 +87,7 @@ #undef assert #endif -// from hotspot/src/share/vm/utilities/debug.hpp -#ifdef ASSERT -#ifndef USE_REPEATED_ASSERTS -#define assert(p, msg) \ -do { \ - if (!(p)) { \ - report_vm_error(__FILE__, __LINE__, "assert(" #p ") failed", msg); \ - BREAKPOINT; \ - } \ -} while (0) -#else // #ifndef USE_REPEATED_ASSERTS -#define assert(p, msg) -do { \ - for (int __i = 0; __i < AssertRepeat; __i++) { \ - if (!(p)) { \ - report_vm_error(__FILE__, __LINE__, "assert(" #p ") failed", msg); \ - BREAKPOINT; \ - } \ - } \ -} while (0) -#endif // #ifndef USE_REPEATED_ASSERTS -#else - #define assert(p, msg) -#endif +#define assert(p, msg) vmassert(p, msg) #ifdef DEBUG #undef DEBUG diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/src/share/vm/utilities/debug.cpp --- a/hotspot/src/share/vm/utilities/debug.cpp Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/src/share/vm/utilities/debug.cpp Wed Jan 14 16:35:58 2015 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, 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 @@ -273,6 +273,14 @@ exit(2); } +void report_insufficient_metaspace(size_t required_size) { + warning("\nThe MaxMetaspaceSize of " UINTX_FORMAT " bytes is not large enough.\n" + "Either don't specify the -XX:MaxMetaspaceSize=\n" + "or increase the size to at least " SIZE_FORMAT ".\n", + MaxMetaspaceSize, required_size); + exit(2); +} + void report_java_out_of_memory(const char* message) { static jint out_of_memory_reported = 0; @@ -326,9 +334,9 @@ // Keep this in sync with test/runtime/6888954/vmerrors.sh. switch (n) { - case 1: assert(str == NULL, "expected null"); - case 2: assert(num == 1023 && *str == 'X', - err_msg("num=" SIZE_FORMAT " str=\"%s\"", num, str)); + case 1: vmassert(str == NULL, "expected null"); + case 2: vmassert(num == 1023 && *str == 'X', + err_msg("num=" SIZE_FORMAT " str=\"%s\"", num, str)); case 3: guarantee(str == NULL, "expected null"); case 4: guarantee(num == 1023 && *str == 'X', err_msg("num=" SIZE_FORMAT " str=\"%s\"", num, str)); diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/src/share/vm/utilities/debug.hpp --- a/hotspot/src/share/vm/utilities/debug.hpp Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/src/share/vm/utilities/debug.hpp Wed Jan 14 16:35:58 2015 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, 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 @@ -105,58 +105,42 @@ va_end(argp); } -// Used to format messages for assert(), guarantee(), fatal(), etc. +// Used to format messages for vmassert(), guarantee(), fatal(), etc. typedef FormatBuffer<> err_msg; typedef FormatBufferResource err_msg_res; // assertions -#ifdef ASSERT -#ifndef USE_REPEATED_ASSERTS -#define assert(p, msg) \ +#ifndef ASSERT +#define vmassert(p, msg) +#else +// Note: message says "assert" rather than "vmassert" for backward +// compatibility with tools that parse/match the message text. +#define vmassert(p, msg) \ do { \ if (!(p)) { \ report_vm_error(__FILE__, __LINE__, "assert(" #p ") failed", msg); \ BREAKPOINT; \ } \ } while (0) -#else // #ifndef USE_REPEATED_ASSERTS -#define assert(p, msg) -do { \ - for (int __i = 0; __i < AssertRepeat; __i++) { \ - if (!(p)) { \ - report_vm_error(__FILE__, __LINE__, "assert(" #p ") failed", msg); \ - BREAKPOINT; \ - } \ - } \ -} while (0) -#endif // #ifndef USE_REPEATED_ASSERTS +#endif -// This version of assert is for use with checking return status from +// For backward compatibility. +#define assert(p, msg) vmassert(p, msg) + +// This version of vmassert is for use with checking return status from // library calls that return actual error values eg. EINVAL, // ENOMEM etc, rather than returning -1 and setting errno. // When the status is not what is expected it is very useful to know // what status was actually returned, so we pass the status variable as // an extra arg and use strerror to convert it to a meaningful string // like "Invalid argument", "out of memory" etc -#define assert_status(p, status, msg) \ -do { \ - if (!(p)) { \ - report_vm_error(__FILE__, __LINE__, "assert(" #p ") failed", \ - err_msg("error %s(%d) %s", strerror(status), \ - status, msg)); \ - BREAKPOINT; \ - } \ -} while (0) +#define vmassert_status(p, status, msg) \ + vmassert(p, err_msg("error %s(%d), %s", strerror(status), status, msg)) -// Do not assert this condition if there's already another error reported. -#define assert_if_no_error(cond,msg) assert((cond) || is_error_reported(), msg) -#else // #ifdef ASSERT - #define assert(p,msg) - #define assert_status(p,status,msg) - #define assert_if_no_error(cond,msg) -#endif // #ifdef ASSERT +// For backward compatibility. +#define assert_status(p, status, msg) vmassert_status(p, status, msg) -// guarantee is like assert except it's always executed -- use it for +// guarantee is like vmassert except it's always executed -- use it for // cheap tests that catch errors that would otherwise be hard to find. // guarantee is also used for Verify options. #define guarantee(p, msg) \ @@ -251,6 +235,8 @@ void report_out_of_shared_space(SharedSpaceType space_type); +void report_insufficient_metaspace(size_t required_size); + // out of memory reporting void report_java_out_of_memory(const char* message); @@ -258,7 +244,7 @@ bool is_error_reported(); void set_error_reported(); -/* Test assert(), fatal(), guarantee(), etc. */ +/* Test vmassert(), fatal(), guarantee(), etc. */ NOT_PRODUCT(void test_error_handler();) void pd_ps(frame f); diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/src/share/vm/utilities/xmlstream.cpp --- a/hotspot/src/share/vm/utilities/xmlstream.cpp Wed Jan 14 16:35:00 2015 -0500 +++ b/hotspot/src/share/vm/utilities/xmlstream.cpp Wed Jan 14 16:35:58 2015 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, 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 @@ -33,6 +33,10 @@ #include "runtime/vmThread.hpp" #include "utilities/xmlstream.hpp" +// Do not assert this condition if there's already another error reported. +#define assert_if_no_error(cond, msg) \ + vmassert((cond) || is_error_reported(), msg) + void xmlStream::initialize(outputStream* out) { _out = out; _last_flush = 0; diff -r 1fb960ea5a7e -r d50b1d3012fa hotspot/test/runtime/SharedArchiveFile/MaxMetaspaceSize.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/SharedArchiveFile/MaxMetaspaceSize.java Wed Jan 14 16:35:58 2015 -0500 @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2015, 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 + * @bug 8067187 + * @summary Testing CDS dumping with the -XX:MaxMetaspaceSize= option + * @library /testlibrary + */ + +import com.oracle.java.testlibrary.*; + +public class MaxMetaspaceSize { + public static void main(String[] args) throws Exception { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + "-XX:MaxMetaspaceSize=20m", "-Xshare:dump"); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldContain("is not large enough.\nEither don't specify the -XX:MaxMetaspaceSize=\nor increase the size to at least"); + output.shouldHaveExitValue(2); + } +}