Fwd: cross compile OpenJDK-9+158 minimal variant failed when link libjvm.so
David Holmes
david.holmes at oracle.com
Thu Mar 9 01:49:28 UTC 2017
On 9/03/2017 11:25 AM, Zhu Yong wrote:
> Here is my latest update with good news
>
> Yesterday pulled tips code from jdk9-dev and built with my current
> toolchain (no change), this time client and minimal VM finished the test
> code without any issue.
>
> The issue might relate to
> https://bugs.openjdk.java.net/browse/JDK-8175567, the final solution
> in http://hg.openjdk.java.net/jdk9/dev/hotspot/rev/d6a0fe7ae0e8 is
> different from the very initial proposed solution (which I used in my
> previous build).
Easy enough to test that theory. :)
Glad things are now working.
David
-----
> On Tue, Mar 7, 2017 at 5:54 AM, Chris Plummer <chris.plummer at oracle.com
> <mailto:chris.plummer at oracle.com>> wrote:
>
> I haven't been following this too closely, but one thing to consider
> is that you are not getting proper floating point calling
> conventions. You mentioned your configure target ABI is
> arm-vfp-sflt. This means you have VFP support, but use the old
> softfloat calling conventions (FP values passed in GPRs). Most
> platforms these days with VFP support use the new hardfloat calling
> conventions (FP values passed in FPRs). So this could simply be the
> case of building the wrong binary for your platform.
>
> - Use arm-vfp-hflt is you have VFP support and want to use hard
> float calling
> conventions.
> - Use arm-vfp-sflt if you have VFP support and want to use the
> older soft float
> calling conventions.
> - Use arm-sflt is you have a true soft float platform.
>
> There's also a very old arm sflt ABI that I don't think we support.
> The main difference from arm-sflt is the word endianess of of 64-bit
> values. I believe the presence of -mfpu=vfp is what is used to get
> the more modern endianess, which to say the least is very
> non-obvious option for doing this, but is the reason you will see
> -mfpu=vfp for all our supported arm platforms (arm-vfp-hflt,
> arm-vfp-sflt, and arm-sflt). Here's the logic from the configure script:
>
> if test "x$ARM_FLOAT_TYPE" = xvfp-sflt; then
> ARM_FLOAT_TYPE_FLAGS='-mfloat-abi=softfp -mfpu=vfp
> -DFLOAT_ARCH=-vfp-sflt'
> elif test "x$ARM_FLOAT_TYPE" = xvfp-hflt; then
> ARM_FLOAT_TYPE_FLAGS='-mfloat-abi=hard -mfpu=vfp
> -DFLOAT_ARCH=-vfp-hflt'
> elif test "x$ARM_FLOAT_TYPE" = xsflt; then
> ARM_FLOAT_TYPE_FLAGS='-msoft-float -mfpu=vfp'
> fi
>
> BTW, for the arm-sflt case, FLOAT_ARCH gets set internally to
> "-sflt". I'm not sure why for arm-sflt it's handled in the source
> and the other two platforms set it in the configure script.
>
> cheers,
>
> Chris
>
>
> On 3/5/17 8:30 PM, Zhu Yong wrote:
>
> Sometime later this week, I might get newer version of Marvell
> toolchain, I
> will do a build and test again then.
> I will update this thread when I get result.
>
> Thank you very much for helping.
>
> On Mon, Mar 6, 2017 at 9:09 AM, David Holmes
> <david.holmes at oracle.com <mailto:david.holmes at oracle.com>>
> wrote:
>
> On 3/03/2017 6:59 PM, Zhu Yong wrote:
>
> 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-
> <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.
>
> This suggests to me that a floating-point register is not
> being preserved
> when needed. When you run with the breakpoint you will get full
> save/restore of all the register state. Just a theory.
>
> 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.
>
> It is a native code issue not a bytecode issue, so javap
> wont help here.
>
> 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?
>
> Can you get access to a different gcc to build with?
>
> David
> -----
>
>
> On Thu, Mar 2, 2017 at 12:32 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:
>
> 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/d65c26d39fe5d549d1b406c7c84e
> <https://gist.github.com/yongzhy/d65c26d39fe5d549d1b406c7c84e>
> acd4
>
> <https://gist.github.com/yongzhy/d65c26d39fe5d549d1b406c7c84
> <https://gist.github.com/yongzhy/d65c26d39fe5d549d1b406c7c84>
> eacd4>
>
> 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>
> <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 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>>
> <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 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/>>
>
> <http://www.okayan.jp/DhrystoneApplet/
> <http://www.okayan.jp/DhrystoneApplet/>
> <http://www.okayan.jp/DhrystoneApplet/
> <http://www.okayan.jp/DhrystoneApplet/>>>
>
> <http://www.okayan.jp/DhrystoneApplet/
> <http://www.okayan.jp/DhrystoneApplet/>
> <http://www.okayan.jp/DhrystoneApplet/
> <http://www.okayan.jp/DhrystoneApplet/>>
>
> <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>>
>
>
> <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>>>
>
>
> <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>>
>
>
> <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>>>
> <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
> <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 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/jvmtiE
> nvBase.cpp
> | 74
> ++++++++++++++++++++++
>
> .../src/share/vm/prims/jvmtiE
> nvBase.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::all
> ocate_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_fra
> me();
> + } 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_fra
> me_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_fra
> me_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_fra
> me_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_fra
> me_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>>>>
> <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
> <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>
> <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
> <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_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),
>
>
More information about the hotspot-dev
mailing list