Fwd: cross compile OpenJDK-9+158 minimal variant failed when link libjvm.so
David Holmes
david.holmes at oracle.com
Tue Feb 28 10:11:39 UTC 2017
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 build-dev
mailing list