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/), 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, 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.hol...@oracle.com
<mailto:david.hol...@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.hol...@oracle.com <mailto:david.hol...@oracle.com>
        <mailto: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



Reply via email to