RFR: 8259037: livenmethods cannot find hsdis library

Chris Plummer cjplummer at openjdk.java.net
Mon Jan 4 22:38:14 UTC 2021


On Sun, 3 Jan 2021 14:31:44 GMT, Yasumasa Suenaga <ysuenaga at openjdk.org> wrote:

> `livenmethods` CLHSDB command could not find hsdis library even though it deployed to `$JAVA_HOME/lib/server/`.
> 
> sun.jvm.hotspot.debugger.DebuggerException: /usr/local/jdk-15.0.1/lib/amd64/hsdis-amd64.so: cannot open shared object file: No such file or directory
>         at jdk.hotspot.agent/sun.jvm.hotspot.asm.Disassembler.load_library(Native Method)
>         at jdk.hotspot.agent/sun.jvm.hotspot.asm.Disassembler.<init>(Disassembler.java:95)
>         at jdk.hotspot.agent/sun.jvm.hotspot.asm.Disassembler.decode(Disassembler.java:52)
>         at jdk.hotspot.agent/sun.jvm.hotspot.asm.Disassembler.decode(Disassembler.java:43)
>         at jdk.hotspot.agent/sun.jvm.hotspot.ui.classbrowser.HTMLGenerator.genHTML(HTMLGenerator.java:1435)
>         at jdk.hotspot.agent/sun.jvm.hotspot.CommandProcessor$45.doit(CommandProcessor.java:1651)
>         at jdk.hotspot.agent/sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:2051)
>         at jdk.hotspot.agent/sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:2021)
>         at jdk.hotspot.agent/sun.jvm.hotspot.CommandProcessor.run(CommandProcessor.java:1901)
>         at jdk.hotspot.agent/sun.jvm.hotspot.CLHSDB.run(CLHSDB.java:99)
>         at jdk.hotspot.agent/sun.jvm.hotspot.CLHSDB.main(CLHSDB.java:40)
>         at jdk.hotspot.agent/sun.jvm.hotspot.SALauncher.runCLHSDB(SALauncher.java:280)
>         at jdk.hotspot.agent/sun.jvm.hotspot.SALauncher.main(SALauncher.java:483)
> 
> JDK directory layout has been changed since JDK 9, however `livenmethods` hasn't followed it yet.

Changes requested by cjplummer (Reviewer).

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/asm/Disassembler.java line 80:

> 78:          }
> 79: 
> 80:          String jvmPattern = "^(lib)?jvm\\" + ext + "$";

A comment before this section would be useful. Something like "Find the full path to libjvm.so (jvm.dll and libjvm.dylib on Windows and OSX)."

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/asm/Disassembler.java line 90:

> 88:                           .findAny()
> 89:                           .get();
> 90:          String arch = targetSysProps.getProperty("os.arch");

Newline before this line.

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/asm/Disassembler.java line 67:

> 65:       // Lazily load hsdis
> 66:       if (decode_function == 0) {
> 67:          // 1. <home>/lib/<vm>/libhsdis-<arch>.so

Before this comment add a comment stating "Search for hsdis library in the following 4 locations:"

src/jdk.hotspot.agent/share/native/libsaproc/sadis.c line 150:

> 148:   hsdis_handle = dlopen(libname, RTLD_LAZY | RTLD_GLOBAL);
> 149:   if (hsdis_handle == NULL) {
> 150:     hsdis_handle = dlopen(libname, RTLD_LAZY | RTLD_GLOBAL);

If the first dlopen fails, then you are just repeating it. Same for the windows code just above this. I think the second attempt is no longer needed since you are now dealing with a libname that you know exists due to the changes in Disassembler.java.

-------------

PR: https://git.openjdk.java.net/jdk/pull/1920


More information about the serviceability-dev mailing list