Changes appended
=============
---
.../src/share/vm/prims/jvmtiEnvBase.cpp | 74
++++++++++++++++++++++
.../src/share/vm/prims/jvmtiEnvBase.hpp | 68
+++-----------------
2 files changed, 82 insertions(+), 60 deletions(-)
mode change 100644 => 100755
hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.cpp
mode change 100644 => 100755
hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.hpp
diff --git a/hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.cpp
b/hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.cpp
old mode 100644
new mode 100755
index dd241a0..e5832ba
--- a/hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.cpp
+++ b/hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.cpp
@@ -1283,6 +1283,80 @@
VM_GetMultipleStackTraces::allocate_and_fill_stacks(jint thread_count) {
"the last copied frame info must be the last record");
}
+void
+VM_UpdateForPopTopFrame::doit() {
+ JavaThread* jt = _state->get_thread();
+ if (Threads::includes(jt) && !jt->is_exiting() && jt->threadObj() !=
NULL) {
+ _state->update_for_pop_top_frame();
+ } else {
+ _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
+ }
+}
+
+void
+VM_SetFramePop::doit() {
+ JavaThread* jt = _state->get_thread();
+ if (Threads::includes(jt) && !jt->is_exiting() && jt->threadObj() !=
NULL) {
+ int frame_number = _state->count_frames() - _depth;
+
_state->env_thread_state((JvmtiEnvBase*)_env)->set_frame_pop(frame_number);
+ } else {
+ _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
+ }
+}
+
+void
+VM_GetOwnedMonitorInfo::doit() {
+ _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
+ if (Threads::includes(_java_thread) && !_java_thread->is_exiting()
+ && _java_thread->threadObj() !=
NULL) {
+ _result = ((JvmtiEnvBase
*)_env)->get_owned_monitors(_calling_thread, _java_thread,
+
_owned_monitors_list);
+ }
+}
+
+void
+VM_GetObjectMonitorUsage::doit() {
+ _result = ((JvmtiEnvBase*)
_env)->get_object_monitor_usage(_calling_thread, _object, _info_ptr);
+}
+
+void
+VM_GetCurrentContendedMonitor::doit() {
+ _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
+ if (Threads::includes(_java_thread) && !_java_thread->is_exiting() &&
+ _java_thread->threadObj() != NULL) {
+ _result = ((JvmtiEnvBase
*)_env)->get_current_contended_monitor(_calling_thread,_java_thread,_owned_monitor_ptr);
+ }
+}
+
+void
+VM_GetStackTrace::doit() {
+ _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
+ if (Threads::includes(_java_thread) && !_java_thread->is_exiting()
+ && _java_thread->threadObj() !=
NULL) {
+ _result = ((JvmtiEnvBase *)_env)->get_stack_trace(_java_thread,
+ _start_depth,
_max_count,
+ _frame_buffer,
_count_ptr);
+ }
+}
+
+void
+VM_GetFrameCount::doit() {
+ _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
+ JavaThread* jt = _state->get_thread();
+ if (Threads::includes(jt) && !jt->is_exiting() && jt->threadObj() !=
NULL) {
+ _result = ((JvmtiEnvBase*)_env)->get_frame_count(_state, _count_ptr);
+ }
+}
+
+void
+VM_GetFrameLocation::doit() {
+ _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
+ if (Threads::includes(_java_thread) && !_java_thread->is_exiting() &&
+ _java_thread->threadObj() != NULL) {
+ _result = ((JvmtiEnvBase*)_env)->get_frame_location(_java_thread,
_depth,
+ _method_ptr,
_location_ptr);
+ }
+}
void
VM_GetThreadListStackTraces::doit() {
diff --git a/hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.hpp
b/hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.hpp
old mode 100644
new mode 100755
index 04e6869..00b9890
--- a/hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.hpp
+++ b/hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.hpp
@@ -359,14 +359,7 @@ public:
}
VMOp_Type type() const { return VMOp_UpdateForPopTopFrame; }
jvmtiError result() { return _result; }
- void doit() {
- JavaThread* jt = _state->get_thread();
- if (Threads::includes(jt) && !jt->is_exiting() && jt->threadObj()
!= NULL) {
- _state->update_for_pop_top_frame();
- } else {
- _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
- }
- }
+ void doit();
};
// VM operation to set frame pop.
@@ -389,15 +382,7 @@ public:
bool allow_nested_vm_operations() const { return true; }
VMOp_Type type() const { return VMOp_SetFramePop; }
jvmtiError result() { return _result; }
- void doit() {
- JavaThread* jt = _state->get_thread();
- if (Threads::includes(jt) && !jt->is_exiting() && jt->threadObj()
!= NULL) {
- int frame_number = _state->count_frames() - _depth;
-
_state->env_thread_state((JvmtiEnvBase*)_env)->set_frame_pop(frame_number);
- } else {
- _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
- }
- }
+ void doit();
};
@@ -421,14 +406,7 @@ public:
_result = JVMTI_ERROR_NONE;
}
VMOp_Type type() const { return VMOp_GetOwnedMonitorInfo; }
- void doit() {
- _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
- if (Threads::includes(_java_thread) && !_java_thread->is_exiting()
- && _java_thread->threadObj() !=
NULL) {
- _result = ((JvmtiEnvBase
*)_env)->get_owned_monitors(_calling_thread, _java_thread,
-
_owned_monitors_list);
- }
- }
+ void doit();
jvmtiError result() { return _result; }
};
@@ -451,10 +429,7 @@ public:
}
VMOp_Type type() const { return VMOp_GetObjectMonitorUsage; }
jvmtiError result() { return _result; }
- void doit() {
- _result = ((JvmtiEnvBase*)
_env)->get_object_monitor_usage(_calling_thread, _object, _info_ptr);
- }
-
+ void doit();
};
// VM operation to get current contended monitor.
@@ -475,13 +450,7 @@ public:
}
VMOp_Type type() const { return VMOp_GetCurrentContendedMonitor; }
jvmtiError result() { return _result; }
- void doit() {
- _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
- if (Threads::includes(_java_thread) && !_java_thread->is_exiting() &&
- _java_thread->threadObj() != NULL) {
- _result = ((JvmtiEnvBase
*)_env)->get_current_contended_monitor(_calling_thread,_java_thread,_owned_monitor_ptr);
- }
- }
+ void doit();
};
// VM operation to get stack trace at safepoint.
@@ -508,15 +477,7 @@ public:
}
jvmtiError result() { return _result; }
VMOp_Type type() const { return VMOp_GetStackTrace; }
- void doit() {
- _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
- if (Threads::includes(_java_thread) && !_java_thread->is_exiting()
- && _java_thread->threadObj() !=
NULL) {
- _result = ((JvmtiEnvBase *)_env)->get_stack_trace(_java_thread,
- _start_depth,
_max_count,
- _frame_buffer,
_count_ptr);
- }
- }
+ void doit();
};
// forward declaration
@@ -606,13 +567,7 @@ public:
}
VMOp_Type type() const { return VMOp_GetFrameCount; }
jvmtiError result() { return _result; }
- void doit() {
- _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
- JavaThread* jt = _state->get_thread();
- if (Threads::includes(jt) && !jt->is_exiting() && jt->threadObj()
!= NULL) {
- _result = ((JvmtiEnvBase*)_env)->get_frame_count(_state, _count_ptr);
- }
- }
+ void doit();
};
// VM operation to frame location at safepoint.
@@ -636,14 +591,7 @@ public:
}
VMOp_Type type() const { return VMOp_GetFrameLocation; }
jvmtiError result() { return _result; }
- void doit() {
- _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
- if (Threads::includes(_java_thread) && !_java_thread->is_exiting() &&
- _java_thread->threadObj() != NULL) {
- _result = ((JvmtiEnvBase*)_env)->get_frame_location(_java_thread,
_depth,
- _method_ptr,
_location_ptr);
- }
- }
+ void doit();
};
--
2.1.4
On Tue, Feb 28, 2017 at 6:11 PM, David Holmes <david.hol...@oracle.com
<mailto:david.hol...@oracle.com>> wrote:
On 28/02/2017 7:35 PM, David Holmes wrote:
On 28/02/2017 6:51 PM, Zhu Yong wrote:
Dear All,
I am testing cross compile OpenJDK-9+158 for our embedded
system using
buildroot, I can build server and client variants
successfully, but the
output compact1 profile file size is too big, then I tried
to build
minimal
variant, failed when linking libjvm.so.
I checked
build/linux-arm-normal-minimal-release/hotspot/variant-minimal/
libjvm/objs/_BUILD_LIBJVM_objectfilenames.txt, jvmtiEnvBase.o
and jvmtiEnvThreadState.o are not listed in the file (which
is required
from the error message below).
Right - JVM TI is not part of the Minimal VM. At the moment it looks
like some service has either been enabled when it should not
have been,
or has not been correctly if'def in the source.
As far as I can see your error messages are complaining about
missing functions that are called from the same sources as the
functions that are missing! ie.
undefined reference to
`JvmtiEnvBase::get_current_contended_monitor(JavaThread*, JavaThread*,
_jobject**)'
/tmp/cc27HS5M.ltrans0.ltrans.o: In function
`VM_GetOwnedMonitorInfo::doit()
but VM_GetOwnedMonitorInfo is defined in jvmtiEnv.cpp which should
be included or excluded the same as jvmtiEnBase.cpp. Here's the
logic in the makefile that controls this:
ifneq ($(call check-jvm-feature, jvmti), true)
JVM_CFLAGS_FEATURES += -DINCLUDE_JVMTI=0
JVM_EXCLUDE_FILES += jvmtiGetLoadedClasses.cpp
jvmtiThreadState.cpp jvmtiExtensions.cpp \
jvmtiImpl.cpp jvmtiManageCapabilities.cpp jvmtiRawMonitor.cpp
jvmtiUtil.cpp jvmtiTrace.cpp \
jvmtiCodeBlobEvents.cpp jvmtiEnv.cpp jvmtiRedefineClasses.cpp
jvmtiEnvBase.cpp jvmtiEnvThreadState.cpp \
jvmtiTagMap.cpp jvmtiEventController.cpp evmCompat.cpp
jvmtiEnter.xsl jvmtiExport.cpp \
jvmtiClassFileReconstituter.cpp
endif
Can you run with LOG=trace so that each compiled file is listed in
the build log, then see if there are any jvmti* files listed there.
Thanks,
David
Can you provide the lines from your spec.gmk that define the
JVM_FEATURES_* variables please.
Thanks,
David
------
=== Output from failing command(s) repeated here ===
* For target
hotspot_variant-minimal_libjvm_objs_BUILD_LIBJVM_link:
/tmp/cc27HS5M.ltrans0.ltrans.o: In function
`VM_GetStackTrace::doit()
[clone .local.640]':
cc27HS5M.ltrans0.o:(.text+0xce5e): undefined reference to
`JvmtiEnvBase::get_stack_trace(JavaThread*, int, int,
_jvmtiFrameInfo*,
int*)'
/tmp/cc27HS5M.ltrans0.ltrans.o: In function
`VM_GetCurrentContendedMonitor::doit()
[clone .local.639]':
cc27HS5M.ltrans0.o:(.text+0xcec2): undefined reference to
`JvmtiEnvBase::get_current_contended_monitor(JavaThread*,
JavaThread*,
_jobject**)'
/tmp/cc27HS5M.ltrans0.ltrans.o: In function
`VM_GetOwnedMonitorInfo::doit()
[clone .local.638]':
cc27HS5M.ltrans0.o:(.text+0xcf26): undefined reference to
`JvmtiEnvBase::get_owned_monitors(JavaThread*, JavaThread*,
GrowableArray<_
jvmtiMonitorStackDepthInfo*>*)'
/tmp/cc27HS5M.ltrans0.ltrans.o: In function
`VM_GetFrameCount::doit()
[clone .local.637]':
cc27HS5M.ltrans0.o:(.text+0xcf8a): undefined reference to
`JvmtiEnvBase::get_frame_count(JvmtiThreadState*, int*)'
/tmp/cc27HS5M.ltrans0.ltrans.o: In function
`VM_SetFramePop::doit()
[clone
.local.636]':
cc27HS5M.ltrans0.o:(.text+0xcfea): undefined reference to
`JvmtiThreadState::count_frames()'
cc27HS5M.ltrans0.o:(.text+0xd030): undefined reference to
`JvmtiEnvThreadState::set_frame_pop(int)'
/tmp/cc27HS5M.ltrans0.ltrans.o: In function
`VM_GetFrameLocation::doit()
[clone .local.641]':
... (rest of output omitted)
My configuration:
--with-jdk-variant=normal \
--with-jvm-variants=minimal \
--with-debug-level=release \
--disable-warnings-as-errors \
--disable-hotspot-gtest \
--with-abi-profile=arm-vfp-sflt \
--openjdk-target=$(GNU_TARGET_NAME) \
--with-sys-root=$(STAGING_DIR) \
--with-tools-dir=$(HOST_DIR) \
--with-freetype-include=$(STAGING_DIR)/usr/include \
--with-freetype-lib=$(STAGING_DIR)/usr/lib \
--with-freetype=$(STAGING_DIR)/usr/ \
--with-alsa-include=$(STAGING_DIR)/usr/include \
--with-alsa-lib=$(STAGING_DIR)/usr/lib \
--with-alsa=$(STAGING_DIR)/usr/ \
--with-cups=$(STAGING_DIR)/usr/ \
--with-x=$(STAGING_DIR)/usr/include \
--with-extra-ldflags=--sysroot=$(STAGING_DIR) \
--enable-headless-only \
--disable-freetype-bundling \
--enable-unlimited-crypto \
--with-boot-jdk=/opt/java/jdk1.8.0_102