Question on location of hsdis library for JDK7

Krystal Mok rednaxelafx at gmail.com
Tue Jul 5 16:03:15 PDT 2011


Cool, thank you very much for pinpointing the problem and fixing it so quickly :-)
Would it be better to document the exact search path in hsdis's README file?

Regards,
Kris Mok

On 2011-7-6, at 3:02, Tom Rodriguez <tom.rodriguez at oracle.com> wrote:

> This looks like a bug in disassembler.cpp that was masked by how LD_LIBRARY_PATH was setup by older JDKs.  The 1.6 launcher always setup the LD_LIBRARY_PATH to point into jre/lib/<arch> and jre/lib/<arch>/<vm> but the 1.7 one doesn't.  It relies on $ORIGIN and some extra smarts to avoid having to re-exec to setup LD_LIBRARY_PATH.  This is 6367077.
> 
> The bug is that when hotspot looks for hsdis next to libjvm.so it's not stripping the lib path of the path so it tries to open libhsdis-i386.so.
> 
> /7:     open("/net/jre.us.oracle.com/p/v33/jdk/6_14/fcs/b08/binaries/solaris-amd64/fastdebug/jre/lib/i386/client/libhsdis-i386.so", O_RDONLY|O_NONBLOCK) Err#2 ENOENT
> 
> It then falls back to an LD_LIBRARY_PATH lookup on hsdis-i386.so which in 1.6 will find it next to libjvm.so or even in jre/lib/<arch> but which will fail in 1.7.  I filed 7062856 for this.
> 
> For now, you can rename your library to libhdis-<arch>.so.
> 
> tom
> 
> On Jul 2, 2011, at 5:14 AM, Krystal Mok wrote:
> 
>> Hi all,
>> 
>> I used to build the hsdis library and put it along side $LIBARCH/libjvm.so and it worked fine.
>> 
>> But when I was trying it out today with JDK7 build 147 x64 on Ubuntu, putting hsdis-amd64.so along side libjvm.so didn't work.
>> The log says:
>> Could not load hsdis-amd64.so; library not loadable; PrintAssembly is disabled
>> 
>> Instead, setting LD_LIBRARY_PATH to the where hsdis-amd64.so is in did work like before. e.g.
>> $ export LD_LIBRARY_PATH=.:/home/sajia/jdk/7b147_x64_debug/fastdebug/jre/lib/amd64/server
>> 
>> I'm not sure from which version it started to behave like this, or which platforms are affected.
>> 
>> On the same machine, JDK6u25 can load the same hsdis-amd64.so from along side libjvm.so without problem.
>> Then I copied libjvm.so from JDK7b147 to my JDK6u25 installation and tried again:
>> 
>> $ echo $LD_LIBRARY_PATH
>> 
>> $ java -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly | head -n5
>> Java HotSpot(TM) 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
>> VM option '+UnlockDiagnosticVMOptions'
>> VM option '+PrintAssembly'
>> Loaded disassembler from hsdis-amd64.so
>> Decoding compiled method 0x00002aaaab118910:
>> $ java -version
>> java version "1.6.0_25"
>> Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
>> Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17-fastdebug, mixed mode)
>> 
>> And it worked. And then doing the reverse, copied the libjvm.so to JDK7b147's installation:
>> 
>> $ export JAVA_HOME=~/jdk/7b147_x64_debug/fastdebug
>> $ export PATH=$JAVA_HOME/bin:$PATH
>> $ echo $LD_LIBRARY_PATH
>> 
>> $ java -version
>> java version "1.7.0-fastdebug"
>> Java(TM) SE Runtime Environment (build 1.7.0-fastdebug-b147)
>> Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode)
>> $ ls $JAVA_HOME/jre/lib/amd64/server/
>> hsdis-amd64.so  libjsig.so  libjvm.so  libjvm.so.orig  Xusage.txt
>> $ java -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly | head -n5
>> Java HotSpot(TM) 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
>> Could not load hsdis-amd64.so; library not loadable; PrintAssembly is disabled
>> 
>> From that I'd guess it's a JDK7-only behavior; doesn't seem to be a HotSpot VM problem.
>> Does anybody have a clue on this?
>> 
>> Regards,
>> Kris Mok
> 



More information about the hotspot-dev mailing list