Fwd: cross compile OpenJDK-9+158 minimal variant failed when link libjvm.so

David Holmes david.holmes at oracle.com
Thu Mar 2 04:32:00 UTC 2017


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_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
>>
>>
>>
>>
>>


More information about the hotspot-dev mailing list