--- a/hotspot/make/aix/makefiles/trace.make Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/make/aix/makefiles/trace.make Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2003, 2016, 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
@@ -57,11 +57,6 @@
TraceGeneratedNames += \
traceRequestables.hpp \
traceEventControl.hpp
-
-ifneq ($(INCLUDE_TRACE), false)
-TraceGeneratedNames += traceProducer.cpp
-endif
-
endif
TraceGeneratedFiles = $(TraceGeneratedNames:%=$(TraceOutDir)/%)
@@ -100,9 +95,6 @@
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
$(GENERATE_CODE)
-$(TraceOutDir)/traceProducer.cpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceProducer.xsl $(XML_DEPS)
- $(GENERATE_CODE)
-
$(TraceOutDir)/traceRequestables.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
$(GENERATE_CODE)
--- a/hotspot/make/bsd/makefiles/trace.make Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/make/bsd/makefiles/trace.make Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2003, 2016, 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
@@ -57,11 +57,6 @@
TraceGeneratedNames += \
traceRequestables.hpp \
traceEventControl.hpp
-
-ifneq ($(INCLUDE_TRACE), false)
-TraceGeneratedNames += traceProducer.cpp
-endif
-
endif
@@ -101,9 +96,6 @@
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
$(GENERATE_CODE)
-$(TraceOutDir)/traceProducer.cpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceProducer.xsl $(XML_DEPS)
- $(GENERATE_CODE)
-
$(TraceOutDir)/traceRequestables.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
$(GENERATE_CODE)
--- a/hotspot/make/linux/makefiles/trace.make Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/make/linux/makefiles/trace.make Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2003, 2016, 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
@@ -57,11 +57,6 @@
TraceGeneratedNames += \
traceRequestables.hpp \
traceEventControl.hpp
-
-ifneq ($(INCLUDE_TRACE), false)
-TraceGeneratedNames += traceProducer.cpp
-endif
-
endif
TraceGeneratedFiles = $(TraceGeneratedNames:%=$(TraceOutDir)/%)
@@ -100,9 +95,6 @@
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
$(GENERATE_CODE)
-$(TraceOutDir)/traceProducer.cpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceProducer.xsl $(XML_DEPS)
- $(GENERATE_CODE)
-
$(TraceOutDir)/traceRequestables.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
$(GENERATE_CODE)
--- a/hotspot/make/solaris/makefiles/trace.make Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/make/solaris/makefiles/trace.make Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2003, 2016, 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
@@ -56,8 +56,7 @@
ifeq ($(HAS_ALT_SRC), true)
TraceGeneratedNames += \
traceRequestables.hpp \
- traceEventControl.hpp \
- traceProducer.cpp
+ traceEventControl.hpp
endif
TraceGeneratedFiles = $(TraceGeneratedNames:%=$(TraceOutDir)/%)
@@ -96,9 +95,6 @@
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
$(GENERATE_CODE)
-$(TraceOutDir)/traceProducer.cpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceProducer.xsl $(XML_DEPS)
- $(GENERATE_CODE)
-
$(TraceOutDir)/traceRequestables.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
$(GENERATE_CODE)
--- a/hotspot/make/windows/makefiles/trace.make Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/make/windows/makefiles/trace.make Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2003, 2016, 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
@@ -43,8 +43,7 @@
!if EXISTS($(TraceAltSrcDir))
TraceGeneratedNames = $(TraceGeneratedNames) \
traceRequestables.hpp \
- traceEventControl.hpp \
- traceProducer.cpp
+ traceEventControl.hpp
!endif
@@ -58,8 +57,7 @@
!if EXISTS($(TraceAltSrcDir))
TraceGeneratedFiles = $(TraceGeneratedFiles) \
$(TraceOutDir)/traceRequestables.hpp \
- $(TraceOutDir)/traceEventControl.hpp \
- $(TraceOutDir)/traceProducer.cpp
+ $(TraceOutDir)/traceEventControl.hpp
!endif
XSLT = $(QUIETLY) $(REMOTE) $(RUN_JAVA) -classpath $(JvmtiOutDir) jvmtiGen
@@ -98,10 +96,6 @@
@echo Generating AltSrc $@
@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceEventClasses.xsl -OUT $(TraceOutDir)/traceEventClasses.hpp
-$(TraceOutDir)/traceProducer.cpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceProducer.xsl $(XML_DEPS)
- @echo Generating AltSrc $@
- @$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceProducer.xsl -OUT $(TraceOutDir)/traceProducer.cpp
-
$(TraceOutDir)/traceRequestables.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
@echo Generating AltSrc $@
@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceRequestables.xsl -OUT $(TraceOutDir)/traceRequestables.hpp
--- a/hotspot/src/share/vm/c1/c1_Compiler.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/c1/c1_Compiler.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -228,8 +228,6 @@
case vmIntrinsics::_getCharStringU:
case vmIntrinsics::_putCharStringU:
#ifdef TRACE_HAVE_INTRINSICS
- case vmIntrinsics::_classID:
- case vmIntrinsics::_threadID:
case vmIntrinsics::_counterTime:
#endif
break;
--- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -43,6 +43,9 @@
#if INCLUDE_ALL_GCS
#include "gc/g1/heapRegion.hpp"
#endif // INCLUDE_ALL_GCS
+#ifdef TRACE_HAVE_INTRINSICS
+#include "trace/traceMacros.hpp"
+#endif
#ifdef ASSERT
#define __ gen()->lir(__FILE__, __LINE__)->
@@ -3067,42 +3070,7 @@
__ move(reg, result);
}
-#ifdef TRACE_HAVE_INTRINSICS
-void LIRGenerator::do_ThreadIDIntrinsic(Intrinsic* x) {
- LIR_Opr thread = getThreadPointer();
- LIR_Opr osthread = new_pointer_register();
- __ move(new LIR_Address(thread, in_bytes(JavaThread::osthread_offset()), osthread->type()), osthread);
- size_t thread_id_size = OSThread::thread_id_size();
- if (thread_id_size == (size_t) BytesPerLong) {
- LIR_Opr id = new_register(T_LONG);
- __ move(new LIR_Address(osthread, in_bytes(OSThread::thread_id_offset()), T_LONG), id);
- __ convert(Bytecodes::_l2i, id, rlock_result(x));
- } else if (thread_id_size == (size_t) BytesPerInt) {
- __ move(new LIR_Address(osthread, in_bytes(OSThread::thread_id_offset()), T_INT), rlock_result(x));
- } else {
- ShouldNotReachHere();
- }
-}
-
-void LIRGenerator::do_ClassIDIntrinsic(Intrinsic* x) {
- CodeEmitInfo* info = state_for(x);
- CodeEmitInfo* info2 = new CodeEmitInfo(info); // Clone for the second null check
- BasicType klass_pointer_type = NOT_LP64(T_INT) LP64_ONLY(T_LONG);
- assert(info != NULL, "must have info");
- LIRItem arg(x->argument_at(1), this);
- arg.load_item();
- LIR_Opr klass = new_pointer_register();
- __ move(new LIR_Address(arg.result(), java_lang_Class::klass_offset_in_bytes(), klass_pointer_type), klass, info);
- LIR_Opr id = new_register(T_LONG);
- ByteSize offset = TRACE_ID_OFFSET;
- LIR_Address* trace_id_addr = new LIR_Address(klass, in_bytes(offset), T_LONG);
- __ move(trace_id_addr, id);
- __ logical_or(id, LIR_OprFact::longConst(0x01l), id);
- __ store(id, trace_id_addr);
- __ logical_and(id, LIR_OprFact::longConst(~0x3l), id);
- __ move(id, rlock_result(x));
-}
-#endif
+
void LIRGenerator::do_Intrinsic(Intrinsic* x) {
switch (x->id()) {
@@ -3115,8 +3083,6 @@
}
#ifdef TRACE_HAVE_INTRINSICS
- case vmIntrinsics::_threadID: do_ThreadIDIntrinsic(x); break;
- case vmIntrinsics::_classID: do_ClassIDIntrinsic(x); break;
case vmIntrinsics::_counterTime:
do_RuntimeCall(CAST_FROM_FN_PTR(address, TRACE_TIME_METHOD), x);
break;
--- a/hotspot/src/share/vm/c1/c1_LIRGenerator.hpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.hpp Tue Mar 01 23:46:09 2016 +0100
@@ -440,10 +440,7 @@
void do_SwitchRanges(SwitchRangeArray* x, LIR_Opr value, BlockBegin* default_sux);
void do_RuntimeCall(address routine, Intrinsic* x);
-#ifdef TRACE_HAVE_INTRINSICS
- void do_ThreadIDIntrinsic(Intrinsic* x);
- void do_ClassIDIntrinsic(Intrinsic* x);
-#endif
+
ciKlass* profile_type(ciMethodData* md, int md_first_offset, int md_offset, intptr_t profiled_k,
Value arg, LIR_Opr& mdp, bool not_null, ciKlass* signature_at_call_k,
ciKlass* callee_signature_k);
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -5380,7 +5380,7 @@
}
}
- TRACE_INIT_ID(ik);
+ TRACE_INIT_KLASS_ID(ik);
// If we reach here, all is well.
// Now remove the InstanceKlass* from the _klass_to_deallocate field
--- a/hotspot/src/share/vm/classfile/vmSymbols.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/classfile/vmSymbols.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -328,8 +328,6 @@
assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
switch(id) {
#ifdef TRACE_HAVE_INTRINSICS
- case vmIntrinsics::_classID:
- case vmIntrinsics::_threadID:
case vmIntrinsics::_counterTime:
#endif
case vmIntrinsics::_currentTimeMillis:
--- a/hotspot/src/share/vm/gc/shared/copyFailedInfo.hpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/gc/shared/copyFailedInfo.hpp Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016, 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
@@ -26,6 +26,7 @@
#define SHARE_VM_GC_SHARED_COPYFAILEDINFO_HPP
#include "runtime/thread.hpp"
+#include "trace/traceMacros.hpp"
#include "utilities/globalDefinitions.hpp"
class CopyFailedInfo : public CHeapObj<mtGC> {
@@ -63,26 +64,28 @@
};
class PromotionFailedInfo : public CopyFailedInfo {
- OSThread* _thread;
+ traceid _thread_trace_id;
public:
- PromotionFailedInfo() : CopyFailedInfo(), _thread(NULL) {}
+ PromotionFailedInfo() : CopyFailedInfo(), _thread_trace_id(0) {}
void register_copy_failure(size_t size) {
CopyFailedInfo::register_copy_failure(size);
- if (_thread == NULL) {
- _thread = Thread::current()->osthread();
+ if (_thread_trace_id == 0) {
+ _thread_trace_id = THREAD_TRACE_ID(Thread::current());
} else {
- assert(_thread == Thread::current()->osthread(), "The PromotionFailedInfo should be thread local.");
+ assert(THREAD_TRACE_ID(Thread::current()) == _thread_trace_id,
+ "The PromotionFailedInfo should be thread local.");
}
}
void reset() {
CopyFailedInfo::reset();
- _thread = NULL;
+ _thread_trace_id = 0;
}
- OSThread* thread() const { return _thread; }
+ traceid thread_trace_id() const { return _thread_trace_id; }
+
};
class EvacuationFailedInfo : public CopyFailedInfo {};
--- a/hotspot/src/share/vm/gc/shared/gcTraceSend.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/gc/shared/gcTraceSend.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016, 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
@@ -174,7 +174,7 @@
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_data(to_trace_struct(pf_info));
- e.set_thread(pf_info.thread()->thread_id());
+ e.set_thread(pf_info.thread_trace_id());
e.commit();
}
}
--- a/hotspot/src/share/vm/oops/arrayKlass.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/oops/arrayKlass.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -89,7 +89,7 @@
set_super(Universe::is_bootstrapping() ? (Klass*)NULL : SystemDictionary::Object_klass());
set_layout_helper(Klass::_lh_neutral_value);
set_is_cloneable(); // All arrays are considered to be cloneable (See JLS 20.1.5)
- TRACE_INIT_ID(this);
+ TRACE_INIT_KLASS_ID(this);
}
--- a/hotspot/src/share/vm/oops/instanceKlass.hpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/oops/instanceKlass.hpp Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, 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
@@ -839,7 +839,7 @@
// support for stub routines
static ByteSize init_state_offset() { return in_ByteSize(offset_of(InstanceKlass, _init_state)); }
- TRACE_DEFINE_OFFSET;
+ TRACE_DEFINE_KLASS_TRACE_ID_OFFSET;
static ByteSize init_thread_offset() { return in_ByteSize(offset_of(InstanceKlass, _init_thread)); }
// subclass/subinterface checks
--- a/hotspot/src/share/vm/oops/klass.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/oops/klass.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, 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
@@ -494,7 +494,7 @@
}
void Klass::restore_unshareable_info(ClassLoaderData* loader_data, Handle protection_domain, TRAPS) {
- TRACE_INIT_ID(this);
+ TRACE_INIT_KLASS_ID(this);
// If an exception happened during CDS restore, some of these fields may already be
// set. We leave the class on the CLD list, even if incomplete so that we don't
// modify the CLD list outside a safepoint.
--- a/hotspot/src/share/vm/oops/klass.hpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/oops/klass.hpp Tue Mar 01 23:46:09 2016 +0100
@@ -132,7 +132,7 @@
jint _modifier_flags; // Processed access flags, for use by Class.getModifiers.
AccessFlags _access_flags; // Access flags. The class/interface distinction is stored here.
- TRACE_DEFINE_KLASS_TRACE_ID;
+ TRACE_DEFINE_TRACE_ID_FIELD;
// Biased locking implementation and statistics
// (the 64-bit chunk goes first, to avoid some fragmentation)
@@ -569,7 +569,7 @@
jlong last_biased_lock_bulk_revocation_time() { return _last_biased_lock_bulk_revocation_time; }
void set_last_biased_lock_bulk_revocation_time(jlong cur_time) { _last_biased_lock_bulk_revocation_time = cur_time; }
- TRACE_DEFINE_KLASS_METHODS;
+ TRACE_DEFINE_TRACE_ID_METHODS;
// garbage collection support
void oops_do(OopClosure* cl);
--- a/hotspot/src/share/vm/opto/c2compiler.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/opto/c2compiler.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -400,8 +400,6 @@
case vmIntrinsics::_currentThread:
case vmIntrinsics::_isInterrupted:
#ifdef TRACE_HAVE_INTRINSICS
- case vmIntrinsics::_classID:
- case vmIntrinsics::_threadID:
case vmIntrinsics::_counterTime:
#endif
case vmIntrinsics::_currentTimeMillis:
--- a/hotspot/src/share/vm/opto/library_call.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/opto/library_call.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -49,7 +49,9 @@
#include "opto/subnode.hpp"
#include "prims/nativeLookup.hpp"
#include "runtime/sharedRuntime.hpp"
+#ifdef TRACE_HAVE_INTRINSICS
#include "trace/traceMacros.hpp"
+#endif
class LibraryIntrinsic : public InlineCallGenerator {
// Extend the set of intrinsics known to the runtime:
@@ -246,10 +248,7 @@
bool inline_unsafe_allocate();
bool inline_unsafe_copyMemory();
bool inline_native_currentThread();
-#ifdef TRACE_HAVE_INTRINSICS
- bool inline_native_classID();
- bool inline_native_threadID();
-#endif
+
bool inline_native_time_funcs(address method, const char* funcName);
bool inline_native_isInterrupted();
bool inline_native_Class_query(vmIntrinsics::ID id);
@@ -642,8 +641,6 @@
case vmIntrinsics::_isInterrupted: return inline_native_isInterrupted();
#ifdef TRACE_HAVE_INTRINSICS
- case vmIntrinsics::_classID: return inline_native_classID();
- case vmIntrinsics::_threadID: return inline_native_threadID();
case vmIntrinsics::_counterTime: return inline_native_time_funcs(CAST_FROM_FN_PTR(address, TRACE_TIME_METHOD), "counterTime");
#endif
case vmIntrinsics::_currentTimeMillis: return inline_native_time_funcs(CAST_FROM_FN_PTR(address, os::javaTimeMillis), "currentTimeMillis");
@@ -2932,52 +2929,6 @@
return true;
}
-#ifdef TRACE_HAVE_INTRINSICS
-/*
- * oop -> myklass
- * myklass->trace_id |= USED
- * return myklass->trace_id & ~0x3
- */
-bool LibraryCallKit::inline_native_classID() {
- null_check_receiver(); // null-check, then ignore
- Node* cls = null_check(argument(1), T_OBJECT);
- Node* kls = load_klass_from_mirror(cls, false, NULL, 0);
- kls = null_check(kls, T_OBJECT);
- ByteSize offset = TRACE_ID_OFFSET;
- Node* insp = basic_plus_adr(kls, in_bytes(offset));
- Node* tvalue = make_load(NULL, insp, TypeLong::LONG, T_LONG, MemNode::unordered);
- Node* bits = longcon(~0x03l); // ignore bit 0 & 1
- Node* andl = _gvn.transform(new AndLNode(tvalue, bits));
- Node* clsused = longcon(0x01l); // set the class bit
- Node* orl = _gvn.transform(new OrLNode(tvalue, clsused));
-
- const TypePtr *adr_type = _gvn.type(insp)->isa_ptr();
- store_to_memory(control(), insp, orl, T_LONG, adr_type, MemNode::unordered);
- set_result(andl);
- return true;
-}
-
-bool LibraryCallKit::inline_native_threadID() {
- Node* tls_ptr = NULL;
- Node* cur_thr = generate_current_thread(tls_ptr);
- Node* p = basic_plus_adr(top()/*!oop*/, tls_ptr, in_bytes(JavaThread::osthread_offset()));
- Node* osthread = make_load(NULL, p, TypeRawPtr::NOTNULL, T_ADDRESS, MemNode::unordered);
- p = basic_plus_adr(top()/*!oop*/, osthread, in_bytes(OSThread::thread_id_offset()));
-
- Node* threadid = NULL;
- size_t thread_id_size = OSThread::thread_id_size();
- if (thread_id_size == (size_t) BytesPerLong) {
- threadid = ConvL2I(make_load(control(), p, TypeLong::LONG, T_LONG, MemNode::unordered));
- } else if (thread_id_size == (size_t) BytesPerInt) {
- threadid = make_load(control(), p, TypeInt::INT, T_INT, MemNode::unordered);
- } else {
- ShouldNotReachHere();
- }
- set_result(threadid);
- return true;
-}
-#endif
-
//------------------------inline_native_time_funcs--------------
// inline code for System.currentTimeMillis() and System.nanoTime()
// these have the same type and signature
--- a/hotspot/src/share/vm/prims/jni.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/prims/jni.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -73,6 +73,7 @@
#include "runtime/vm_operations.hpp"
#include "services/memTracker.hpp"
#include "services/runtimeService.hpp"
+#include "trace/traceMacros.hpp"
#include "trace/tracing.hpp"
#include "utilities/defaultStream.hpp"
#include "utilities/dtrace.hpp"
@@ -3929,7 +3930,7 @@
EventThreadStart event;
if (event.should_commit()) {
- event.set_javalangthread(java_lang_Thread::thread_id(thread->threadObj()));
+ event.set_thread(THREAD_TRACE_ID(thread));
event.commit();
}
@@ -4149,7 +4150,7 @@
EventThreadStart event;
if (event.should_commit()) {
- event.set_javalangthread(java_lang_Thread::thread_id(thread->threadObj()));
+ event.set_thread(THREAD_TRACE_ID(thread));
event.commit();
}
--- a/hotspot/src/share/vm/runtime/java.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/runtime/java.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -64,6 +64,7 @@
#include "runtime/timer.hpp"
#include "runtime/vm_operations.hpp"
#include "services/memTracker.hpp"
+#include "trace/traceMacros.hpp"
#include "trace/tracing.hpp"
#include "utilities/dtrace.hpp"
#include "utilities/globalDefinitions.hpp"
@@ -485,7 +486,7 @@
EventThreadEnd event;
if (event.should_commit()) {
- event.set_javalangthread(java_lang_Thread::thread_id(thread->threadObj()));
+ event.set_thread(THREAD_TRACE_ID(thread));
event.commit();
}
--- a/hotspot/src/share/vm/runtime/objectMonitor.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/runtime/objectMonitor.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, 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
@@ -401,7 +401,7 @@
if (event.should_commit()) {
event.set_klass(((oop)this->object())->klass());
- event.set_previousOwner((TYPE_JAVALANGTHREAD)_previous_owner_tid);
+ event.set_previousOwner((TYPE_THREAD)_previous_owner_tid);
event.set_address((TYPE_ADDRESS)(uintptr_t)(this->object_addr()));
event.commit();
}
@@ -937,7 +937,7 @@
// get the owner's thread id for the MonitorEnter event
// if it is enabled and the thread isn't suspended
if (not_suspended && Tracing::is_event_enabled(TraceJavaMonitorEnterEvent)) {
- _previous_owner_tid = SharedRuntime::get_java_tid(Self);
+ _previous_owner_tid = THREAD_TRACE_ID(Self);
}
#endif
@@ -1391,11 +1391,12 @@
jlong notifier_tid,
jlong timeout,
bool timedout) {
+ assert(event != NULL, "invariant");
event->set_klass(((oop)this->object())->klass());
- event->set_timeout((TYPE_ULONG)timeout);
- event->set_address((TYPE_ADDRESS)(uintptr_t)(this->object_addr()));
- event->set_notifier((TYPE_OSTHREAD)notifier_tid);
- event->set_timedOut((TYPE_BOOLEAN)timedout);
+ event->set_timeout(timeout);
+ event->set_address((TYPE_ADDRESS)this->object_addr());
+ event->set_notifier(notifier_tid);
+ event->set_timedOut(timedout);
event->commit();
}
@@ -1655,7 +1656,7 @@
iterator->TState = ObjectWaiter::TS_ENTER;
}
iterator->_notified = 1;
- iterator->_notifier_tid = Self->osthread()->thread_id();
+ iterator->_notifier_tid = THREAD_TRACE_ID(Self);
ObjectWaiter * list = _EntryList;
if (list != NULL) {
--- a/hotspot/src/share/vm/runtime/thread.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/runtime/thread.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -1694,7 +1694,7 @@
EventThreadStart event;
if (event.should_commit()) {
- event.set_javalangthread(java_lang_Thread::thread_id(this->threadObj()));
+ event.set_thread(THREAD_TRACE_ID(this));
event.commit();
}
@@ -1799,7 +1799,7 @@
// from java_lang_Thread object
EventThreadEnd event;
if (event.should_commit()) {
- event.set_javalangthread(java_lang_Thread::thread_id(this->threadObj()));
+ event.set_thread(THREAD_TRACE_ID(this));
event.commit();
}
@@ -3554,6 +3554,10 @@
return status;
}
+ if (TRACE_INITIALIZE() != JNI_OK) {
+ vm_exit_during_initialization("Failed to initialize tracing backend");
+ }
+
// Should be done after the heap is fully created
main_thread->cache_global_variables();
@@ -3622,11 +3626,6 @@
quicken_jni_functions();
- // Must be run after init_ft which initializes ft_enabled
- if (TRACE_INITIALIZE() != JNI_OK) {
- vm_exit_during_initialization("Failed to initialize tracing backend");
- }
-
// No more stub generation allowed after that point.
StubCodeDesc::freeze();
--- a/hotspot/src/share/vm/runtime/thread.hpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/runtime/thread.hpp Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, 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
@@ -448,7 +448,8 @@
void incr_allocated_bytes(jlong size) { _allocated_bytes += size; }
inline jlong cooked_allocated_bytes();
- TRACE_DATA* trace_data() { return &_trace_data; }
+ TRACE_DEFINE_THREAD_TRACE_DATA_OFFSET;
+ TRACE_DATA* trace_data() const { return &_trace_data; }
const ThreadExt& ext() const { return _ext; }
ThreadExt& ext() { return _ext; }
--- a/hotspot/src/share/vm/runtime/vmThread.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/runtime/vmThread.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, 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
@@ -359,7 +359,7 @@
// Only write caller thread information for non-concurrent vm operations.
// For concurrent vm operations, the thread id is set to 0 indicating thread is unknown.
// This is because the caller thread could have exited already.
- event.set_caller(is_concurrent ? 0 : op->calling_thread()->osthread()->thread_id());
+ event.set_caller(is_concurrent ? 0 : THREAD_TRACE_ID(op->calling_thread()));
event.commit();
}
--- a/hotspot/src/share/vm/trace/trace.xml Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/trace/trace.xml Tue Mar 01 23:46:09 2016 +0100
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2012, 2016, 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
@@ -73,12 +73,12 @@
<events>
<event id="ThreadStart" path="java/thread_start" label="Java Thread Start"
has_thread="true" is_instant="true">
- <value type="JAVALANGTHREAD" field="javalangthread" label="Java Thread"/>
+ <value type="THREAD" field="thread" label="Java Thread"/>
</event>
<event id="ThreadEnd" path="java/thread_end" label="Java Thread End"
has_thread="true" is_instant="true">
- <value type="JAVALANGTHREAD" field="javalangthread" label="Java Thread"/>
+ <value type="THREAD" field="thread" label="Java Thread"/>
</event>
<event id="ThreadSleep" path="java/thread_sleep" label="Java Thread Sleep"
@@ -96,14 +96,14 @@
<event id="JavaMonitorEnter" path="java/monitor_enter" label="Java Monitor Blocked"
has_thread="true" has_stacktrace="true" is_instant="false">
<value type="CLASS" field="klass" label="Monitor Class"/>
- <value type="JAVALANGTHREAD" field="previousOwner" label="Previous Monitor Owner"/>
+ <value type="THREAD" field="previousOwner" label="Previous Monitor Owner"/>
<value type="ADDRESS" field="address" label="Monitor Address" relation="JAVA_MONITOR_ADDRESS"/>
</event>
<event id="JavaMonitorWait" path="java/monitor_wait" label="Java Monitor Wait" description="Waiting on a Java monitor"
has_thread="true" has_stacktrace="true" is_instant="false">
<value type="CLASS" field="klass" label="Monitor Class" description="Class of object waited on"/>
- <value type="OSTHREAD" field="notifier" label="Notifier Thread" description="Notifying Thread"/>
+ <value type="THREAD" field="notifier" label="Notifier Thread" description="Notifying Thread"/>
<value type="MILLIS" field="timeout" label="Timeout" description="Maximum wait time"/>
<value type="BOOLEAN" field="timedOut" label="Timed Out" description="Wait has been timed out"/>
<value type="ADDRESS" field="address" label="Monitor Address" description="Address of object waited on" relation="JAVA_MONITOR_ADDRESS"/>
@@ -434,7 +434,7 @@
description="Promotion of an object failed">
<value type="UINT" field="gcId" label="GC ID" relation="GC_ID"/>
<structvalue type="CopyFailed" field="data" label="Data"/>
- <value type="OSTHREAD" field="thread" label="Running thread"/>
+ <value type="THREAD" field="thread" label="Running thread"/>
</event>
<event id="EvacuationFailed" path="vm/gc/detailed/evacuation_failed" label="Evacuation Failed" is_instant="true"
@@ -496,6 +496,11 @@
<value type="UINT" field="allocContext" label="Allocation Context" />
</event>
+ <event id="VMError" path="vm/runtime/vm_error" label="VM Error"
+ description="VM shutdown due to an error" has_stacktrace="true" has_thread="true">
+ <value type="BOOLEAN" field="out_of_java_memory" label="Java Out Of Memory"/>
+ </event>
+
<!-- Compiler events -->
<event id="Compilation" path="vm/compiler/compilation" label="Compilation"
@@ -569,7 +574,7 @@
<value type="VMOPERATIONTYPE" field="operation" label="Operation" />
<value type="BOOLEAN" field="safepoint" label="At Safepoint" description="If the operation occured at a safepoint."/>
<value type="BOOLEAN" field="blocking" label="Caller Blocked" description="If the calling thread was blocked until the operation was complete."/>
- <value type="OSTHREAD" field="caller" label="Caller" transition="FROM" description="Thread requesting operation. If non-blocking, will be set to 0 indicating thread is unknown."/>
+ <value type="THREAD" field="caller" label="Caller" transition="FROM" description="Thread requesting operation. If non-blocking, will be set to 0 indicating thread is unknown."/>
</event>
<!-- Allocation events -->
--- a/hotspot/src/share/vm/trace/traceBackend.hpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/trace/traceBackend.hpp Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016, 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
@@ -47,6 +47,10 @@
static void on_unloading_classes(void) {
}
+
+ static void on_vm_error(bool) {
+ }
+
};
class TraceThreadData {
--- a/hotspot/src/share/vm/trace/traceDataTypes.hpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/trace/traceDataTypes.hpp Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016, 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
@@ -31,39 +31,32 @@
enum {
CONTENT_TYPE_NONE = 0,
- CONTENT_TYPE_BYTES = 1,
- CONTENT_TYPE_EPOCHMILLIS = 2,
- CONTENT_TYPE_MILLIS = 3,
- CONTENT_TYPE_NANOS = 4,
- CONTENT_TYPE_TICKS = 5,
- CONTENT_TYPE_ADDRESS = 6,
+ CONTENT_TYPE_CLASS = 20,
+ CONTENT_TYPE_UTF8 = 21,
+ CONTENT_TYPE_THREAD = 22,
+ CONTENT_TYPE_STACKTRACE = 23,
+ CONTENT_TYPE_BYTES = 24,
+ CONTENT_TYPE_EPOCHMILLIS = 25,
+ CONTENT_TYPE_MILLIS = 26,
+ CONTENT_TYPE_NANOS = 27,
+ CONTENT_TYPE_TICKS = 28,
+ CONTENT_TYPE_ADDRESS = 29,
+ CONTENT_TYPE_PERCENTAGE = 30,
- CONTENT_TYPE_OSTHREAD,
- CONTENT_TYPE_JAVALANGTHREAD,
- CONTENT_TYPE_STACKTRACE,
- CONTENT_TYPE_CLASS,
- CONTENT_TYPE_PERCENTAGE,
-
- JVM_CONTENT_TYPES_START = 30,
- JVM_CONTENT_TYPES_END = 100
+ JVM_CONTENT_TYPES_START = 33,
+ JVM_CONTENT_TYPES_END = 255
};
enum ReservedEvent {
- EVENT_PRODUCERS,
+ EVENT_METADATA,
EVENT_CHECKPOINT,
EVENT_BUFFERLOST,
- NUM_RESERVED_EVENTS
+ NUM_RESERVED_EVENTS = JVM_CONTENT_TYPES_END
};
typedef enum ReservedEvent ReservedEvent;
-typedef u8 classid;
-typedef u8 stacktraceid;
-typedef u8 methodid;
-typedef u8 fieldid;
-
-class TraceUnicodeString;
+class Symbol;
#endif // SHARE_VM_TRACE_TRACEDATATYPES_HPP
-
--- a/hotspot/src/share/vm/trace/traceEvent.hpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/trace/traceEvent.hpp Tue Mar 01 23:46:09 2016 +0100
@@ -99,8 +99,13 @@
cancel();
return;
}
- if (_endTime == 0) {
- static_cast<T*>(this)->set_endtime(Tracing::time());
+
+ if (_startTime == 0) {
+ static_cast<T*>(this)->set_starttime(Tracing::time());
+ } else {
+ if (_endTime == 0) {
+ static_cast<T*>(this)->set_endtime(Tracing::time());
+ }
}
if (static_cast<T*>(this)->should_write()) {
static_cast<T*>(this)->writeEvent();
--- a/hotspot/src/share/vm/trace/traceEventClasses.xsl Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/trace/traceEventClasses.xsl Tue Mar 01 23:46:09 2016 +0100
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2012, 2016, 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
@@ -52,8 +52,8 @@
class TraceEvent {
public:
TraceEvent() {}
- void set_starttime(const Ticks& time) {}
- void set_endtime(const Ticks& time) {}
+ void set_starttime(const Ticks& ignore) {}
+ void set_endtime(const Ticks& ignore) {}
bool should_commit() const { return false; }
static bool is_enabled() { return false; }
void commit() {}
--- a/hotspot/src/share/vm/trace/traceEventIds.xsl Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/trace/traceEventIds.xsl Tue Mar 01 23:46:09 2016 +0100
@@ -43,7 +43,7 @@
_traceeventbase = (NUM_RESERVED_EVENTS-1), // Make sure we start at right index.
// Events -> enum entry
-<xsl:for-each select="trace/events/event">
+<xsl:for-each select="trace/events/*">
<xsl:value-of select="concat(' Trace', @id, 'Event,', $newline)"/>
</xsl:for-each>
MaxTraceEventId
--- a/hotspot/src/share/vm/trace/traceMacros.hpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/trace/traceMacros.hpp Tue Mar 01 23:46:09 2016 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -25,19 +25,28 @@
#ifndef SHARE_VM_TRACE_TRACEMACROS_HPP
#define SHARE_VM_TRACE_TRACEMACROS_HPP
+typedef u8 traceid;
+
#define EVENT_THREAD_EXIT(thread)
#define EVENT_THREAD_DESTRUCT(thread)
-#define TRACE_INIT_ID(k)
+#define TRACE_INIT_KLASS_ID(k)
+#define TRACE_INIT_THREAD_ID(td)
#define TRACE_DATA TraceThreadData
+#define THREAD_TRACE_ID(thread) ((traceid)thread->osthread()->thread_id())
#define TRACE_START() JNI_OK
#define TRACE_INITIALIZE() JNI_OK
-#define TRACE_DEFINE_KLASS_METHODS typedef int ___IGNORED_hs_trace_type1
-#define TRACE_DEFINE_KLASS_TRACE_ID typedef int ___IGNORED_hs_trace_type2
-#define TRACE_DEFINE_OFFSET typedef int ___IGNORED_hs_trace_type3
-#define TRACE_ID_OFFSET in_ByteSize(0); ShouldNotReachHere()
+#define TRACE_DEFINE_TRACE_ID_METHODS typedef int ___IGNORED_hs_trace_type1
+#define TRACE_DEFINE_TRACE_ID_FIELD typedef int ___IGNORED_hs_trace_type2
+#define TRACE_DEFINE_KLASS_TRACE_ID_OFFSET typedef int ___IGNORED_hs_trace_type3
+#define TRACE_KLASS_TRACE_ID_OFFSET in_ByteSize(0); ShouldNotReachHere()
+#define TRACE_DEFINE_THREAD_TRACE_DATA_OFFSET typedef int ___IGNORED_hs_trace_type4
+#define TRACE_THREAD_TRACE_DATA_OFFSET in_ByteSize(0); ShouldNotReachHere()
+#define TRACE_DEFINE_THREAD_TRACE_ID_OFFSET typedef int ___IGNORED_hs_trace_type5
+#define TRACE_THREAD_TRACE_ID_OFFSET in_ByteSize(0); ShouldNotReachHere()
+#define TRACE_DEFINE_THREAD_ID_SIZE typedef int ___IGNORED_hs_trace_type6
#define TRACE_TEMPLATES(template)
#define TRACE_INTRINSICS(do_intrinsic, do_class, do_name, do_signature, do_alias)
--- a/hotspot/src/share/vm/trace/tracetypes.xml Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/trace/tracetypes.xml Tue Mar 01 23:46:09 2016 +0100
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2012, 2016, 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
@@ -60,27 +60,16 @@
<types>
<content_types>
<content_type id="Thread" hr_name="Thread"
- type="U4" builtin_type="OSTHREAD">
- <value type="UTF8" field="name" label="Thread name"/>
- </content_type>
-
- <content_type id="VMThread" hr_name="VM Thread"
- type="U8" jvm_type="VMTHREAD">
- <value type="OSTHREAD" field="thread" label="VM Thread"/>
- </content_type>
-
- <content_type id="JavaThread" hr_name="Java thread"
- type="U8" builtin_type="JAVALANGTHREAD">
- <value type="OSTHREAD" field="thread" label="OS Thread ID"/>
- <value type="BYTES64" field="allocInsideTla"
- label="Allocated bytes inside TLAs"/>
- <value type="BYTES64" field="allocOutsideTla"
- label="Allocated bytes outside TLAs"/>
+ type="U8" builtin_type="THREAD">
+ <value type="UTF8" field="osName" label="OS Thread Name"/>
+ <value type="LONG" field="osThreadID" label="OS Thread ID"/>
+ <value type="UTF8" field="javaName" label="Java Lang Thread Name"/>
+ <value type="LONG" field="javaThreadID" label="Java Lang Thread ID"/>
<value type="THREADGROUP" field="group" label="Java Thread Group"/>
</content_type>
<content_type id="ThreadGroup" hr_name="Thread group"
- type="U4" jvm_type="THREADGROUP">
+ type="U8" jvm_type="THREADGROUP">
<value type="THREADGROUP" field="parent" label="Parent"/>
<value type="UTF8" field="name" label="Name"/>
</content_type>
@@ -107,82 +96,82 @@
</content_type>
<content_type id="ThreadState" hr_name="Java Thread State"
- type="U2" jvm_type="THREADSTATE">
+ type="U8" jvm_type="THREADSTATE">
<value type="UTF8" field="name" label="Name"/>
</content_type>
<content_type id="GCName" hr_name="GC Name"
- type="U1" jvm_type="GCNAME">
+ type="U8" jvm_type="GCNAME">
<value type="UTF8" field="name" label="name" />
</content_type>
<content_type id="GCCause" hr_name="GC Cause"
- type="U2" jvm_type="GCCAUSE">
+ type="U8" jvm_type="GCCAUSE">
<value type="UTF8" field="cause" label="cause" />
</content_type>
<content_type id="GCWhen" hr_name="GC When"
- type="U1" jvm_type="GCWHEN">
+ type="U8" jvm_type="GCWHEN">
<value type="UTF8" field="when" label="when" />
</content_type>
<content_type id="G1HeapRegionType" hr_name="G1 Heap Region Type"
- type="U1" jvm_type="G1HEAPREGIONTYPE">
+ type="U8" jvm_type="G1HEAPREGIONTYPE">
<value type="UTF8" field="type" label="type" />
</content_type>
<content_type id="G1YCType" hr_name="G1 YC Type"
- type="U1" jvm_type="G1YCTYPE">
+ type="U8" jvm_type="G1YCTYPE">
<value type="UTF8" field="type" label="type" />
</content_type>
<content_type id="GCThresholdUpdater" hr_name="GC Treshold Updater"
- type="U1" jvm_type="GCTHRESHOLDUPDATER">
+ type="U8" jvm_type="GCTHRESHOLDUPDATER">
<value type="UTF8" field="updater" label="updater" />
</content_type>
<content_type id="ReferenceType" hr_name="Reference Type"
- type="U1" jvm_type="REFERENCETYPE">
+ type="U8" jvm_type="REFERENCETYPE">
<value type="UTF8" field="type" label="type" />
</content_type>
<content_type id="MetadataType" hr_name="Metadata Type"
- type="U1" jvm_type="METADATATYPE">
+ type="U8" jvm_type="METADATATYPE">
<value type="UTF8" field="type" label="type" />
</content_type>
<content_type id="MetaspaceObjectType" hr_name="Metaspace Object Type"
- type="U1" jvm_type="METASPACEOBJTYPE">
+ type="U8" jvm_type="METASPACEOBJTYPE">
<value type="UTF8" field="type" label="type" />
</content_type>
<content_type id="NARROW_OOP_MODE" hr_name="Narrow Oop Mode"
- type="U1" jvm_type="NARROWOOPMODE">
+ type="U8" jvm_type="NARROWOOPMODE">
<value type="UTF8" field="mode" label="mode" />
</content_type>
<content_type id="VMOperationType" hr_name="VM Operation Type"
- type="U2" jvm_type="VMOPERATIONTYPE">
+ type="U8" jvm_type="VMOPERATIONTYPE">
<value type="UTF8" field="type" label="type" />
</content_type>
<content_type id="CompilerPhaseType" hr_name="Compiler Phase Type"
- type="U1" jvm_type="COMPILERPHASETYPE">
+ type="U8" jvm_type="COMPILERPHASETYPE">
<value type="UTF8" field="phase" label="phase" />
</content_type>
<content_type id="FlagValueOrigin" hr_name="Flag Value Origin"
- type="U1" jvm_type="FLAGVALUEORIGIN">
+ type="U8" jvm_type="FLAGVALUEORIGIN">
<value type="UTF8" field="origin" label="origin" />
</content_type>
<content_type id="CodeBlobType" hr_name="Code Blob Type"
- type="U1" jvm_type="CODEBLOBTYPE">
+ type="U8" jvm_type="CODEBLOBTYPE">
<value type="UTF8" field="type" label="type" />
</content_type>
<content_type id="InflateCause" hr_name="Inflation Cause"
- type="U1" jvm_type="INFLATECAUSE">
+ type="U8" jvm_type="INFLATECAUSE">
<value type="UTF8" field="cause" label="cause" />
</content_type>
</content_types>
@@ -245,11 +234,11 @@
type="bool" sizeop="1"/>
<!-- 32-bit unsigned integer, SEMANTIC value BYTES -->
- <primary_type symbol="BYTES" datatype="U4" contenttype="BYTES"
- type="u4" sizeop="sizeof(u4)"/>
+ <primary_type symbol="BYTES" datatype="U8" contenttype="BYTES"
+ type="u8" sizeop="sizeof(u8)"/>
- <primary_type symbol="IOBYTES" datatype="U4" contenttype="BYTES"
- type="u4" sizeop="sizeof(u4)"/>
+ <primary_type symbol="IOBYTES" datatype="U8" contenttype="BYTES"
+ type="u8" sizeop="sizeof(u8)"/>
<!-- 64-bit unsigned integer, SEMANTIC value BYTES -->
<primary_type symbol="BYTES64" datatype="U8" contenttype="BYTES"
@@ -280,122 +269,109 @@
type="u8" sizeop="sizeof(u8)"/>
<!-- 32-bit float, SEMANTIC value PERCENTAGE (0.0-1.0) -->
- <primary_type symbol="PERCENT" datatype="FLOAT" contenttype="PERCENTAGE"
+ <primary_type symbol="PERCENTAGE" datatype="FLOAT" contenttype="PERCENTAGE"
type="float" sizeop="sizeof(float)"/>
- <!-- UTF-encoded string, max length 64k -->
+ <!-- UTF8-encoded string, max length Integer.MAX_VALUE -->
<primary_type symbol="UTF8" datatype="UTF8" contenttype="NONE"
- type="const char *" sizeop="sizeof_utf(%)"/>
-
- <!-- UTF-16 encoded (Unicode) string, max length maxjuint -->
- <primary_type symbol="STRING" datatype="STRING" contenttype="NONE"
- type="TraceUnicodeString*" sizeop="sizeof_unicode(%)"/>
+ type="const char*" sizeop="sizeof_utf(%)"/>
<!-- Symbol* constant. Note that this may currently ONLY be used by
classes, methods fields. This restriction might be lifted. -->
<primary_type symbol="SYMBOL" datatype="U8" contenttype="SYMBOL"
- type="Symbol *" sizeop="sizeof(u8)"/>
+ type="const Symbol*" sizeop="sizeof(u8)"/>
<!-- A Klass *. The actual class is marked as "used" and will
eventually be written into the recording constant pool -->
<primary_type symbol="CLASS" datatype="U8" contenttype="CLASS"
- type="Klass *" sizeop="sizeof(u8)"/>
+ type="const Klass*" sizeop="sizeof(u8)"/>
<!-- A Method *. The method is marked as "used" and will eventually be
written into the recording constant pool. -->
<primary_type symbol="METHOD" datatype="U8" contenttype="METHOD"
- type="Method *" sizeop="sizeof(u8)"/>
+ type="const Method*" sizeop="sizeof(u8)"/>
<!-- The type for stacktraces in the recording. Shoudl not be used by
events explicitly -->
<primary_type symbol="STACKTRACE" datatype="U8" contenttype="STACKTRACE"
type="u8" sizeop="sizeof(u8)"/>
- <!-- OS Thread ID -->
- <primary_type symbol="OSTHREAD" datatype="U4" contenttype="OSTHREAD"
- type="u4" sizeop="sizeof(u4)"/>
-
- <!-- VM Thread ID Note: changed from U2 to U8 for hotspot -->
- <primary_type symbol="VMTHREAD" datatype="U8" contenttype="VMTHREAD"
- type="u8" sizeop="sizeof(u8)"/>
-
- <!-- Java Thread ID -->
- <primary_type symbol="JAVALANGTHREAD" datatype="LONG"
- contenttype="JAVALANGTHREAD" type="s8"
- sizeop="sizeof(s8)"/>
+ <!-- Thread ID -->
+ <primary_type symbol="THREAD" datatype="U8" contenttype="THREAD"
+ type="u8" sizeop="sizeof(u8)"/>
<!-- Threadgroup THIS TYPE MAY NOT BE USED IN NORMAL EVENTS (ATM). Only
for thread constant pool // KK TODO: u8 should be ObjectP -->
- <primary_type symbol="THREADGROUP" datatype="U4" contenttype="THREADGROUP"
+ <primary_type symbol="THREADGROUP" datatype="U8" contenttype="THREADGROUP"
type="u8"
- sizeop="sizeof(u4)"/>
+ sizeop="sizeof(u8)"/>
<!-- FRAMETYPE enum -->
- <primary_type symbol="FRAMETYPE" datatype="U1" contenttype="FRAMETYPE"
- type="u1" sizeop="sizeof(u1)"/>
+ <primary_type symbol="FRAMETYPE" datatype="U8" contenttype="FRAMETYPE"
+ type="u8" sizeop="sizeof(u8)"/>
<!-- THREADSTATE enum -->
- <primary_type symbol="THREADSTATE" datatype="U2" contenttype="THREADSTATE"
- type="u2" sizeop="sizeof(u2)"/>
+ <primary_type symbol="THREADSTATE" datatype="U8" contenttype="THREADSTATE"
+ type="u8" sizeop="sizeof(u8)"/>
<!-- GCName -->
- <primary_type symbol="GCNAME" datatype="U1" contenttype="GCNAME"
- type="u1" sizeop="sizeof(u1)" />
+ <primary_type symbol="GCNAME" datatype="U8" contenttype="GCNAME"
+ type="u8" sizeop="sizeof(u8)" />
<!-- GCCAUSE -->
- <primary_type symbol="GCCAUSE" datatype="U2" contenttype="GCCAUSE"
- type="u2" sizeop="sizeof(u2)" />
+ <primary_type symbol="GCCAUSE" datatype="U8" contenttype="GCCAUSE"
+ type="u8" sizeop="sizeof(u8)" />
<!-- GCWHEN -->
- <primary_type symbol="GCWHEN" datatype="U1" contenttype="GCWHEN"
- type="u1" sizeop="sizeof(u1)" />
+ <primary_type symbol="GCWHEN" datatype="U8" contenttype="GCWHEN"
+ type="u8" sizeop="sizeof(u8)" />
<!-- G1HEAPREGIONTYPE -->
- <primary_type symbol="G1HEAPREGIONTYPE" datatype="U1" contenttype="G1HEAPREGIONTYPE"
- type="u1" sizeop="sizeof(u1)" />
+ <primary_type symbol="G1HEAPREGIONTYPE" datatype="U8" contenttype="G1HEAPREGIONTYPE"
+ type="u8" sizeop="sizeof(u8)" />
<!-- G1YCType -->
- <primary_type symbol="G1YCTYPE" datatype="U1" contenttype="G1YCTYPE"
- type="u1" sizeop="sizeof(u1)" />
+ <primary_type symbol="G1YCTYPE" datatype="U8" contenttype="G1YCTYPE"
+ type="u8" sizeop="sizeof(u8)" />
<!-- GCTHRESHOLDUPDATER -->
- <primary_type symbol="GCTHRESHOLDUPDATER" datatype="U1" contenttype="GCTHRESHOLDUPDATER"
- type="u1" sizeop="sizeof(u1)" />
+ <primary_type symbol="GCTHRESHOLDUPDATER" datatype="U8" contenttype="GCTHRESHOLDUPDATER"
+ type="u8" sizeop="sizeof(u8)" />
<!-- REFERENCETYPE -->
- <primary_type symbol="REFERENCETYPE" datatype="U1"
- contenttype="REFERENCETYPE" type="u1" sizeop="sizeof(u1)" />
+ <primary_type symbol="REFERENCETYPE" datatype="U8"
+ contenttype="REFERENCETYPE" type="u8" sizeop="sizeof(u8)" />
<!-- METADATATYPE -->
- <primary_type symbol="METADATATYPE" datatype="U1"
- contenttype="METADATATYPE" type="u1" sizeop="sizeof(u1)" />
+ <primary_type symbol="METADATATYPE" datatype="U8"
+ contenttype="METADATATYPE" type="u8" sizeop="sizeof(u8)" />
<!-- METADATAOBJTYPE -->
- <primary_type symbol="METASPACEOBJTYPE" datatype="U1"
- contenttype="METASPACEOBJTYPE" type="u1" sizeop="sizeof(u1)" />
+ <primary_type symbol="METASPACEOBJTYPE" datatype="U8"
+ contenttype="METASPACEOBJTYPE" type="u8" sizeop="sizeof(u8)" />
<!-- NARROWOOPMODE -->
- <primary_type symbol="NARROWOOPMODE" datatype="U1"
- contenttype="NARROWOOPMODE" type="u1" sizeop="sizeof(u1)" />
+ <primary_type symbol="NARROWOOPMODE" datatype="U8"
+ contenttype="NARROWOOPMODE" type="u8" sizeop="sizeof(u8)" />
<!-- COMPILERPHASETYPE -->
- <primary_type symbol="COMPILERPHASETYPE" datatype="U1"
- contenttype="COMPILERPHASETYPE" type="u1" sizeop="sizeof(u1)" />
+ <primary_type symbol="COMPILERPHASETYPE" datatype="U8"
+ contenttype="COMPILERPHASETYPE" type="u8" sizeop="sizeof(u8)" />
<!-- VMOPERATIONTYPE -->
- <primary_type symbol="VMOPERATIONTYPE" datatype="U2" contenttype="VMOPERATIONTYPE"
- type="u2" sizeop="sizeof(u2)" />
+ <primary_type symbol="VMOPERATIONTYPE" datatype="U8" contenttype="VMOPERATIONTYPE"
+ type="u8" sizeop="sizeof(u8)" />
<!-- FLAGVALUEORIGIN -->
- <primary_type symbol="FLAGVALUEORIGIN" datatype="U1"
- contenttype="FLAGVALUEORIGIN" type="u1" sizeop="sizeof(u1)" />
+ <primary_type symbol="FLAGVALUEORIGIN" datatype="U8"
+ contenttype="FLAGVALUEORIGIN" type="u8" sizeop="sizeof(u8)" />
<!-- CODEBLOBTYPE -->
- <primary_type symbol="CODEBLOBTYPE" datatype="U1"
- contenttype="CODEBLOBTYPE" type="u1" sizeop="sizeof(u1)" />
+ <primary_type symbol="CODEBLOBTYPE" datatype="U8"
+ contenttype="CODEBLOBTYPE" type="u8" sizeop="sizeof(u8)" />
<!-- INFLATECAUSE -->
- <primary_type symbol="INFLATECAUSE" datatype="U1"
- contenttype="INFLATECAUSE" type="u1" sizeop="sizeof(u1)" />
+ <primary_type symbol="INFLATECAUSE" datatype="U8"
+ contenttype="INFLATECAUSE" type="u8" sizeop="sizeof(u8)" />
</primary_types>
</types>
--- a/hotspot/src/share/vm/utilities/debug.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/utilities/debug.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -51,9 +51,14 @@
#include "services/heapDumper.hpp"
#include "utilities/defaultStream.hpp"
#include "utilities/events.hpp"
+#include "utilities/macros.hpp"
#include "utilities/top.hpp"
#include "utilities/vmError.hpp"
+#if INCLUDE_TRACE
+#include "trace/tracing.hpp"
+#endif
+
#ifndef ASSERT
# ifdef _DEBUG
// NOTE: don't turn the lines below into a comment -- if you're getting
@@ -280,6 +285,12 @@
exit(2);
}
+static void notify_tracing() {
+#if INCLUDE_TRACE
+ Tracing::on_vm_error(true);
+#endif
+}
+
void report_insufficient_metaspace(size_t required_size) {
warning("\nThe MaxMetaspaceSize of " SIZE_FORMAT " bytes is not large enough.\n"
"Either don't specify the -XX:MaxMetaspaceSize=<size>\n"
@@ -302,6 +313,8 @@
HeapDumper::dump_heap_from_oome();
}
+ notify_tracing();
+
if (OnOutOfMemoryError && OnOutOfMemoryError[0]) {
VMError::report_java_out_of_memory(message);
}
--- a/hotspot/src/share/vm/utilities/hashtable.cpp Tue Mar 01 09:42:19 2016 +0100
+++ b/hotspot/src/share/vm/utilities/hashtable.cpp Tue Mar 01 23:46:09 2016 +0100
@@ -383,4 +383,9 @@
template class BasicHashtable<mtSymbol>;
template class BasicHashtable<mtCode>;
template class BasicHashtable<mtInternal>;
+#if INCLUDE_TRACE
+template class Hashtable<Symbol*, mtTracing>;
+template class HashtableEntry<Symbol*, mtTracing>;
+template class BasicHashtable<mtTracing>;
+#endif
template class BasicHashtable<mtCompiler>;