Questions about including a library for a JTREG native test being built in JPRT

Gerald Thornbrugh gerald.thornbrugh at oracle.com
Tue May 17 14:43:54 UTC 2016


Hi Eric,

Thanks for the information!

Jerry
> Hello,
>
> This really has nothing to do with JPRT.
>
> What you are introducing is a new kind of native test binary that has 
> a dependency on libjvm.so. So far we haven't had any of these, so the 
> native jtreg compilation does not depend on building hotspot first, 
> and the LDFLAGS used for linking do not add the directory of the 
> libjvm. Fixing this is non trivial and further shows the necessity of 
> a flags cleanup we have planned for a while, but not yet had time for. 
> I've made an attempt at just fixing this particular LDFLAG here:
>
> http://cr.openjdk.java.net/~erikj/native-tests-depend-on-libjvm/webrev.01/ 
>
>
> There are warnings in the build of invoke.c so I had to disable 
> warnings are errors to get it to work. (I also had to fix 
> TestFilesCompilation.gmk to actually honor disabling warnings as errors).
>
> Please see if this works for you.
>
> /Erik
>
> On 2016-05-17 15:26, Gerald Thornbrugh wrote:
>> Hi Everyone
>>
>> I am trying to fix JDK-8144278 which is a bug to convert a "c" source 
>> file test from being built at test run time
>> to being built and included in the test bundle. The test relies on 
>> the "jvm" library to call JVM functions from a
>> "c" program.
>>
>> Here are my changes to JtregNative.gmk:
>>
>> diff -r 13a7f3426b89 make/test/JtregNative.gmk
>> --- a/make/test/JtregNative.gmk Thu Apr 14 20:43:16 2016 -0700
>> +++ b/make/test/JtregNative.gmk Mon May 09 07:51:26 2016 -0700
>> @@ -59,6 +59,15 @@
>>      $(HOTSPOT_TOPDIR)/test/runtime/ThreadSignalMask
>>  endif
>>
>> +ifeq ($(OPENJDK_TARGET_OS), linux)
>> +BUILD_HOTSPOT_JTREG_NATIVE_SRC += \
>> +    $(HOTSPOT_TOPDIR)/test/runtime/StackGuardPages
>> +endif
>> +
>> +ifeq ($(OPENJDK_TARGET_OS), linux)
>> +    BUILD_HOTSPOT_JTREG_EXECUTABLES_LDFLAGS_exeinvoke := -ljvm 
>> -lpthread
>> +endif
>> +
>>  ifeq ($(TOOLCHAIN_TYPE), solstudio)
>>      BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_liboverflow := -lc
>>  endif
>>
>>
>>
>> The current test sets LD_LIBRARY_PATH like this:
>>
>> LD_LIBRARY_PATH=.:${TESTJAVA}/jre/lib/${VM_CPU}/${VM_TYPE}:${TESTJAVA}/lib/${VM_CPU}/${VM_TYPE}:/usr/lib:$LD_LIBRARY_PATH 
>>
>>
>>
>> Here is the JPRT job:
>>
>> http://scaaa637.us.oracle.com//archive/2016/05/2016-05-09-131846.gthornbr.jdk9 
>>
>>
>> It looks like when the "-ljvm" option is being specified at link time 
>> correctly but the "jvm" library cannot be found (see the red text 
>> below).
>>
>> Linking executable invoke
>> ( 
>> /opt/jprt/jib-data/install/jpg/infra/builddeps/devkit-linux_x64/gcc4.9.2-OEL6.4+1.0/devkit-linux_x64-gcc4.9.2-OEL6.4+1.0.tar.gz/bin/gcc 
>> -Wl,-z,defs -Wl,-O1 -Wl,--allow-shlib-undefined -ljvm -lpthread 
>> --sysroot=/opt/jprt/jib-data/install/jpg/infra/builddeps/devkit-linux_x64/gcc4.9.2-OEL6.4+1.0/devkit-linux_x64-gcc4.9.2-OEL6.4+1.0.tar.gz/x86_64-unknown-linux-gnu/sysroot 
>> -o 
>> /scratch/opt/jprt/T/P1/131846.gthornbr/s/build/linux-x64/support/test/hotspot/jtreg/native/bin/invoke 
>> /scratch/opt/jprt/T/P1/131846.gthornbr/s/build/linux-x64/support/test/hotspot/jtreg/native/support/exeinvoke/exeinvoke.o 
>> > >(/usr/bin/tee 
>> /scratch/opt/jprt/T/P1/131846.gthornbr/s/build/linux-x64/support/test/hotspot/jtreg/native/support/exeinvoke/BUILD_TEST_invoke_link.log) 
>> 2> >(/usr/bin/tee 
>> /scratch/opt/jprt/T/P1/131846.gthornbr/s/build/linux-x64/support/test/hotspot/jtreg/native/support/exeinvoke/BUILD_TEST_invoke_link.log 
>> >&2) || ( exitcode=$? && /usr/bin/cp 
>> /scratch/opt/jprt/T/P1/131846.gthornbr/s/build/linux-x64/support/test/hotspot/jtreg/native/support/exeinvoke/BUILD_TEST_invoke_link.log 
>> /scratch/opt/jprt/T/P1/131846.gthornbr/s/build/linux-x64/make-support/failure-logs/support_test_hotspot_jtreg_native_support_exeinvoke_BUILD_TEST_invoke_link.log 
>> && exit $exitcode ) )
>> JtregNative.gmk:85: recipe for target 
>> '/scratch/opt/jprt/T/P1/131846.gthornbr/s/build/linux-x64/support/test/hotspot/jtreg/native/bin/invoke' 
>> failed
>> make[3]: Leaving directory 
>> '/scratch/opt/jprt/T/P1/131846.gthornbr/s/hotspot/make/test'
>> make/Main.gmk:377: recipe for target 
>> 'build-test-hotspot-jtreg-native' failed
>> /scratch/opt/jprt/jib-data/install/jpg/infra/builddeps/devkit-linux_x64/gcc4.9.2-OEL6.4+1.0/devkit-linux_x64-gcc4.9.2-OEL6.4+1.0.tar.gz/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/bin/ld: 
>> cannot find -ljvm
>> collect2: error: ld returned 1 exit status
>> make[3]: *** 
>> [/scratch/opt/jprt/T/P1/131846.gthornbr/s/build/linux-x64/support/test/hotspot/jtreg/native/bin/invoke] 
>> Error 1
>> make[2]: *** [build-test-hotspot-jtreg-native] Error 1
>> make[2]: *** Waiting for unfinished jobs....
>>
>>
>> So it looks like LD_LIBRARY_PATH needs to include the jvm library.
>>
>> Is there a way I can do this  in the 
>> hotspot/make/test/JtregNative.gmk file?
>>
>> What is the JPRT path I need to use to include the jvm library?
>>
>> Thanks!
>>
>> Jerry
>




More information about the build-dev mailing list