Fwd: cross compile OpenJDK-9+158 minimal variant failed when link libjvm.so
Zhu Yong
zhuyong.me at gmail.com
Fri Mar 3 08:59:23 UTC 2017
Thank you very much for helping.
Today I tried to debug the test code, but without luck, still can't figure
out why.
First, I followed the instruction
http://stackoverflow.com/questions/29916995/intellij-idea-remotely-debug-java-console-program,
changed suspend=y because the test code is short, it will exit before debug
start if not suspend first. Unfortunately, with remote debug, I was not
able to reproduce the issue. Same class file, directly run, will produce
the issue, remote debug won't.
Then, I tried *jdb *from my OpenJDK9 client vm, run directly on my target
system to debug the code. If I set breakpoint, program run without issue,
however, if don't set breakpoint, just "run" in jdb, problem reproduced.
Next, I tried to use *javap *to decompile the output class file, run
OpenJDK9 client vm javap and host side javap on same class file, the output
is same for getTime function.
One interesting point I noticed today is the output like below when problem
happen, 2nd call of getTime() has value of 1st call result / 1000. Looks
like 2nd call getTime(), double variable q was not updated
startTime: 284092.063000 endTime: 284.092063 runTime: -283807.970937
What should I do so that I can come a conclusion that it's due to compiler
issue?
On Thu, Mar 2, 2017 at 12:32 PM, David Holmes <david.holmes at oracle.com>
wrote:
> I built your sample program with latest JDK 9 for arm-vfp-sflt and ran on
> an emulator I have available, and I had no issues.
>
> So I still have concerns this may be a build/compiler issue.
>
> David
>
>
> On 2/03/2017 12:51 PM, David Holmes wrote:
>
>> I've moved this discussion over to hotspot-dev as this seems no longer a
>> build issue but a C1 soft-float issue.
>>
>> David
>>
>> On 2/03/2017 12:35 PM, Zhu Yong wrote:
>>
>>> If run with -Xint, it works.
>>>
>>> I have created simplified FP test by remove all non-related code from
>>> Whetstone test code.
>>> The test code is here:
>>> https://gist.github.com/yongzhy/d65c26d39fe5d549d1b406c7c84eacd4
>>>
>>> I am not sure if the test code can help or not. The behaviour is weird :
>>> - If I print both itime and q, program will run OK
>>> - inside condition block if(q<1.0f), if I use exit code 2,3,4,5, problem
>>> appears, however, if I use exit code >=6, program run OK.
>>>
>>> I always get exit code 5, the line q = (double)itime is wrong?
>>>
>>> public static double getTime()
>>> {
>>> double q;
>>> long itime;
>>> itime = System.currentTimeMillis();
>>> if(itime<1000000) {
>>> System.exit(1);
>>> }
>>> //System.out.printf("time long value %d\n", itime);
>>> q = (double) itime;
>>> if(q < 1.0f) {
>>> System.exit(5); // I always get exit code 5
>>> }
>>> //System.out.printf("time float value %f\n", q);
>>> return q / 1000.0;
>>> }
>>>
>>>
>>>
>>> On Wed, Mar 1, 2017 at 5:31 PM, David Holmes <david.holmes at oracle.com
>>> <mailto:david.holmes at oracle.com>> wrote:
>>>
>>> On 1/03/2017 6:45 PM, Zhu Yong wrote:
>>>
>>> OK, for the Whetstone Benchmark, I added debug printing and
>>> found it's
>>> due to function getTime(), it only get good value on 1st call,
>>> all
>>> following calls get 0s.
>>> Debug printing of itime value is correct. So reason should be
>>> the return
>>> division line. Could it because toolchain's floating point
>>> operation???
>>> But why server VM Ok?
>>>
>>>
>>> Server and client implement FP logic differently, and particularly
>>> as this is soft-fp, they may well not be in sync. Does -Xint work?
>>>
>>> Can you isolate to a simple FP test?
>>>
>>> David
>>>
>>> public static double getTime()
>>> {
>>> double q;
>>> long itime;
>>> itime = System.currentTimeMillis();
>>> q = (double) itime;
>>> return q / 1000.0;
>>> }
>>>
>>> On Wed, Mar 1, 2017 at 3:14 PM, David Holmes
>>> <david.holmes at oracle.com <mailto:david.holmes at oracle.com>
>>> <mailto:david.holmes at oracle.com
>>> <mailto:david.holmes at oracle.com>>> wrote:
>>>
>>> On 1/03/2017 4:26 PM, Zhu Yong wrote:
>>>
>>> We use armv7-marvell-linux-gnueabi-softfp toolchain
>>>
>>> gcc version 4.6.4 (Marvell GCC release
>>> 20150204-c4af733b 64K
>>> MAXPAGESIZE
>>> ALIGN CVE-2015-0235)
>>>
>>> Is this toolchain too old? I am asking because I saw
>>> other strange
>>> issues as well:
>>>
>>>
>>> We last used gcc 4.7.2. I can't really say if 4.6.4 is "too
>>> old".
>>>
>>> I have successfully build server, client and minimal VM,
>>> when I run
>>> Dhrystone benchmark file (the same jar file from
>>> http://www.okayan.jp/DhrystoneApplet/
>>> <http://www.okayan.jp/DhrystoneApplet/>
>>> <http://www.okayan.jp/DhrystoneApplet/
>>> <http://www.okayan.jp/DhrystoneApplet/>>), the performance from
>>> server VM
>>> is much better than client and minimal VM.
>>> (minimal: 1629852, client: 1615508, server: 2338871 )
>>>
>>>
>>> That's expected. The server VM is high performance.
>>>
>>> And when run Whetstone Benchmark
>>> from
>>> http://www.roylongbottom.org.uk/online/whetjava2.html
>>> <http://www.roylongbottom.org.uk/online/whetjava2.html>
>>> <http://www.roylongbottom.org.uk/online/whetjava2.html
>>> <http://www.roylongbottom.org.uk/online/whetjava2.html>>,
>>> server VM
>>> finished with good result, client and minimal VM not
>>> able to finish
>>> (program stuck there forever after print 1st line of
>>> output).
>>>
>>>
>>> That needs investigating. You need to try and generate a
>>> stackdump
>>> to see where things are stuck.
>>>
>>> David
>>>
>>>
>>> On Wed, Mar 1, 2017 at 1:56 PM, David Holmes
>>> <david.holmes at oracle.com
>>> <mailto:david.holmes at oracle.com> <mailto:david.holmes at oracle.com
>>> <mailto:david.holmes at oracle.com>>
>>> <mailto:david.holmes at oracle.com
>>> <mailto:david.holmes at oracle.com>
>>> <mailto:david.holmes at oracle.com
>>> <mailto:david.holmes at oracle.com>>>> wrote:
>>>
>>> On 1/03/2017 3:39 PM, Zhu Yong wrote:
>>>
>>> Thank you for the information, I managed to make
>>> minimal
>>> build
>>> pass now.
>>>
>>> Initially I though JVM_EXCLUDE_FILES need to add
>>> additional 3
>>> generated
>>> files (they appeared
>>> in _BUILD_LIBJVM_objectfilenames.txt) :
>>> bytecodeInterpreterWithChecks.cpp jvmtiEnter.cpp
>>> jvmtiEnterTrace.cpp
>>> But build still fail with same error message.
>>>
>>> Finally I figured out it's due to those 8 doit()
>>> functions
>>> implementation in jvmtiEnvBase.hpp file. After
>>> move all
>>> those 8
>>> doit()
>>> implementations to jvmtiEnvBase.cpp, build of
>>> minimal VM
>>> passed
>>> without
>>> any issue.
>>>
>>>
>>> That seems to be a compiler issue.
>>> jvmtiEnvBase.hpp is
>>> unconditionally included in a couple of places
>>> because we
>>> have to
>>> have enough of the JVMTI code to say JVMTI is not
>>> available.
>>> Those
>>> doit() implementations, though arguably could be
>>> conditional on
>>> INCLUDE_JVMTI, are not referenced by any called code
>>> and so
>>> should
>>> not linked in. But in your case it seems they are.
>>>
>>> What toolchain are you using?
>>>
>>> David
>>> -----
>>>
>>> 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.holmes at oracle.com
>>> <mailto:david.holmes at oracle.com>
>>> <mailto:david.holmes at oracle.com
>>> <mailto:david.holmes at oracle.com>>
>>> <mailto:david.holmes at oracle.com <mailto:david.holmes at oracle.com>
>>> <mailto:david.holmes at oracle.com
>>> <mailto:david.holmes at oracle.com>>>
>>> <mailto:david.holmes at oracle.com
>>> <mailto:david.holmes at oracle.com>
>>> <mailto:david.holmes at oracle.com
>>> <mailto:david.holmes at oracle.com>>
>>>
>>> <mailto:david.holmes at oracle.com
>>> <mailto:david.holmes at oracle.com>
>>> <mailto:david.holmes at oracle.com
>>> <mailto:david.holmes at 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_con
>>> tended_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
>>>
>>>
>>>
>>>
>>>
>>>
More information about the hotspot-dev
mailing list