RFR(XS): 8043264: hsdis library not picked up correctly on expected paths

Krystal Mok rednaxelafx at gmail.com
Thu May 15 20:19:18 UTC 2014

Hi everyone,

May I have a couple of review for this small patch, please?

*Bug*: https://bugs.openjdk.java.net/browse/JDK-8043264

*Patch*: (against jdk9/hs)

diff -r 466b58fa837b src/share/vm/compiler/disassembler.cpp
--- a/src/share/vm/compiler/disassembler.cpp Thu May 15 11:35:26 2014 -0700
+++ b/src/share/vm/compiler/disassembler.cpp Thu May 15 13:14:58 2014 -0700
@@ -86,7 +86,7 @@
     // Match "jvm[^/]*" in jvm_path.
     const char* base = buf;
-    const char* p = strrchr(buf, '/');
+    const char* p = strrchr(buf, *os::file_separator());
     if (p != NULL) lib_offset = p - base + 1;
     p = strstr(p ? p : base, "jvm");
     if (p != NULL)  jvm_offset = p - base;
@@ -111,7 +111,7 @@
     if (_library == NULL) {
       // 3. <home>/jre/lib/<arch>/hsdis-<arch>.so
       buf[lib_offset - 1] = '\0';
-      const char* p = strrchr(buf, '/');
+      const char* p = strrchr(buf, *os::file_separator());
       if (p != NULL) {
         lib_offset = p - buf + 1;
         strcpy(&buf[lib_offset], hsdis_library_name);


(Copied from the bug)

On Windows, the hsdis library isn't picked up correctly in all expected
paths described in Disassembler::load_library():

  // Find the disassembler shared library.
  // Search for several paths derived from libjvm, in this order:
  // 1. <home>/jre/lib/<arch>/<vm>/libhsdis-<arch>.so (for compatibility)
  // 2. <home>/jre/lib/<arch>/<vm>/hsdis-<arch>.so
  // 3. <home>/jre/lib/<arch>/hsdis-<arch>.so
  // 4. hsdis-<arch>.so (using LD_LIBRARY_PATH)

The reason is that the code that concatenates the paths doesn't take
os::file_separator() into account, and always uses '/' instead, like:

const char* p = strrchr(buf, '/');

The fix is to change the use of '/' into *os::file_separator() on two lines
in Disassembler::load_library().


The change was tested by a friend of mine on Windows and he said hsdis.dll
could be picked up from expected paths after the change. I don't have a
Windows box to test it myself, so I'd like someone from Oracle to help me
test it.

P.S. I wanted to upload a webrev, but somehow I couldn't get the the
connection to work. Could it be that my publickey is missing on

The authenticity of host 'cr.openjdk.java.net (' can't be
RSA key fingerprint is d2:d1:ee:03:4b:11:45:49:ec:46:99:8c:e4:c3:00:c4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cr.openjdk.java.net,' (RSA) to the
list of known hosts.
Permission denied (publickey).
lost connection

Best regards,
Kris (OpenJDK username: kmo)

More information about the hotspot-runtime-dev mailing list