--- old/src/hotspot/share/gc/shared/gcConfig.cpp 2018-04-27 10:59:11.248573648 +0200 +++ new/src/hotspot/share/gc/shared/gcConfig.cpp 2018-04-27 10:59:11.031564210 +0200 @@ -38,9 +38,10 @@ bool& _flag; CollectedHeap::Name _name; GCArguments& _arguments; + const char* _hs_err_name; - SupportedGC(bool& flag, CollectedHeap::Name name, GCArguments& arguments) : - _flag(flag), _name(name), _arguments(arguments) {} + SupportedGC(bool& flag, CollectedHeap::Name name, GCArguments& arguments, const char* hs_err_name) : + _flag(flag), _name(name), _arguments(arguments), _hs_err_name(hs_err_name) {} }; static SerialArguments serialArguments; @@ -53,12 +54,12 @@ // Table of supported GCs, for translating between command // line flag, CollectedHeap::Name and GCArguments instance. static const SupportedGC SupportedGCs[] = { - SupportedGC(UseSerialGC, CollectedHeap::Serial, serialArguments), + SupportedGC(UseSerialGC, CollectedHeap::Serial, serialArguments, "serialgc" ), #if INCLUDE_ALL_GCS - SupportedGC(UseParallelGC, CollectedHeap::Parallel, parallelArguments), - SupportedGC(UseParallelOldGC, CollectedHeap::Parallel, parallelArguments), - SupportedGC(UseConcMarkSweepGC, CollectedHeap::CMS, cmsArguments), - SupportedGC(UseG1GC, CollectedHeap::G1, g1Arguments), + SupportedGC(UseParallelGC, CollectedHeap::Parallel, parallelArguments, "parallelgc"), + SupportedGC(UseParallelOldGC, CollectedHeap::Parallel, parallelArguments, "parallelgc"), + SupportedGC(UseConcMarkSweepGC, CollectedHeap::CMS, cmsArguments, "cmsgc" ), + SupportedGC(UseG1GC, CollectedHeap::G1, g1Arguments, "g1gc" ), #endif // INCLUDE_ALL_GCS }; @@ -172,6 +173,20 @@ return _gc_selected_ergonomically; } +const char* GCConfig::hs_err_name() { + if (is_exactly_one_gc_selected()) { + // Exacly one GC selected + for (size_t i = 0; i < ARRAY_SIZE(SupportedGCs); i++) { + if (SupportedGCs[i]._flag) { + return SupportedGCs[i]._hs_err_name; + } + } + } + + // Zero or more than one GC selected + return ""; +} + GCArguments* GCConfig::arguments() { assert(_arguments != NULL, "Not initialized"); return _arguments; --- old/src/hotspot/share/gc/shared/gcConfig.hpp 2018-04-27 10:59:11.575587871 +0200 +++ new/src/hotspot/share/gc/shared/gcConfig.hpp 2018-04-27 10:59:11.347577954 +0200 @@ -48,6 +48,8 @@ static bool is_gc_selected(CollectedHeap::Name name); static bool is_gc_selected_ergonomically(); + static const char* hs_err_name(); + static GCArguments* arguments(); }; --- old/src/hotspot/share/utilities/vmError.cpp 2018-04-27 10:59:11.930603311 +0200 +++ new/src/hotspot/share/utilities/vmError.cpp 2018-04-27 10:59:11.700593308 +0200 @@ -27,7 +27,7 @@ #include "code/codeCache.hpp" #include "compiler/compileBroker.hpp" #include "compiler/disassembler.hpp" -#include "gc/shared/collectedHeap.hpp" +#include "gc/shared/gcConfig.hpp" #include "logging/logConfiguration.hpp" #include "memory/resourceArea.hpp" #include "prims/whitebox.hpp" @@ -304,14 +304,6 @@ st->print_cr("# This output file may be truncated or incomplete."); } -static const char* gc_mode() { - if (UseG1GC) return "g1 gc"; - if (UseParallelGC) return "parallel gc"; - if (UseConcMarkSweepGC) return "concurrent mark sweep gc"; - if (UseSerialGC) return "serial gc"; - return "ERROR in GC mode"; -} - static void report_vm_version(outputStream* st, char* buf, int buflen) { // VM version st->print_cr("#"); @@ -340,7 +332,7 @@ "", "", #endif UseCompressedOops ? ", compressed oops" : "", - gc_mode(), + GCConfig::hs_err_name(), Abstract_VM_Version::vm_platform_string() ); }