--- old/src/hotspot/share/services/diagnosticCommand.cpp 2019-08-07 12:43:56.000000000 -0400 +++ new/src/hotspot/share/services/diagnosticCommand.cpp 2019-08-07 12:43:56.000000000 -0400 @@ -96,6 +96,7 @@ DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); + DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); #if INCLUDE_JVMTI // Both JVMTI and SERVICES have to be enabled to have this dcmd DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); @@ -1077,6 +1078,29 @@ #endif +PrintClassLayoutDCmd::PrintClassLayoutDCmd(outputStream* output, bool heap) : + DCmdWithParser(output, heap), + _classname("classname", "Name of class whose layout should be printed. ", + "STRING", true) { + _dcmdparser.add_dcmd_argument(&_classname); +} + +void PrintClassLayoutDCmd::execute(DCmdSource source, TRAPS) { + VM_PrintClassLayout printClassLayoutOp(output(), _classname.value()); + VMThread::execute(&printClassLayoutOp); +} + +int PrintClassLayoutDCmd::num_arguments() { + ResourceMark rm; + PrintClassLayoutDCmd* dcmd = new PrintClassLayoutDCmd(NULL, false); + if (dcmd != NULL) { + DCmdMark mark(dcmd); + return dcmd->_dcmdparser.num_arguments(); + } else { + return 0; + } +} + class VM_DumpTouchedMethods : public VM_Operation { private: outputStream* _out;