review for 7062856: Disassembler needs to be smarter about finding hsdis after 1.7 launcher changes (original) (raw)

Vladimir Kozlov vladimir.kozlov at oracle.com
Tue Jul 5 15:43:32 PDT 2011


Good.

Vladimir

Tom Rodriguez wrote:

Yes that's better. I changed it slightly and copied the different step comments to the appropriate places. It's slightly verbose but very explicit.

tom diff -r de6a837d75cf src/share/vm/compiler/disassembler.cpp --- a/src/share/vm/compiler/disassembler.cpp +++ b/src/share/vm/compiler/disassembler.cpp @@ -78,21 +78,46 @@ char buf[JVMMAXPATHLEN]; os::jvmpath(buf, sizeof(buf)); int jvmoffset = -1; + int liboffset = -1; { // Match "jvm[^/]*" in jvmpath. const char* base = buf; const char* p = strrchr(buf, '/'); + if (p != NULL) liboffset = p - base + 1; p = strstr(p ? p : base, "jvm"); if (p != NULL) jvmoffset = p - base; } + // Find the disassembler shared library. + // Search for several paths derived from libjvm, in this order: + // 1. /jre/lib///libhsdis-.so (for compatibility) + // 2. /jre/lib///hsdis-.so + // 3. /jre/lib//hsdis-.so + // 4. hsdis-.so (using LDLIBRARYPATH) if (jvmoffset >= 0) { - // Find the disassembler next to libjvm.so. + // 1. /jre/lib///libhsdis-.so strcpy(&buf[jvmoffset], hsdislibraryname); strcat(&buf[jvmoffset], os::dllfileextension()); library = os::dllload(buf, ebuf, sizeof ebuf); + if (library == NULL) { + // 2. /jre/lib///hsdis-.so + strcpy(&buf[liboffset], hsdislibraryname); + strcat(&buf[liboffset], os::dllfileextension()); + library = os::dllload(buf, ebuf, sizeof ebuf); + } + if (library == NULL) { + // 3. /jre/lib//hsdis-.so + buf[liboffset - 1] = '\0'; + const char* p = strrchr(buf, '/'); + if (p != NULL) { + liboffset = p - buf + 1; + strcpy(&buf[liboffset], hsdislibraryname); + strcat(&buf[liboffset], os::dllfileextension()); + library = os::dllload(buf, ebuf, sizeof ebuf); + } + } } if (library == NULL) { - // Try a free-floating lookup. + // 4. hsdis-.so (using LDLIBRARYPATH) strcpy(&buf[0], hsdislibraryname); strcat(&buf[0], os::dllfileextension()); library = os::dllload(buf, ebuf, sizeof ebuf); tom On Jul 5, 2011, at 3:15 PM, John Rose wrote:

Good. Thanks for fixing that.

Instead of the comment "First try libhsdis for compatibility" I suggest laying out the whole search path, something like the following. // Search for several paths derived from libjvm, in this order: // 1. /jre/lib///libhsdis.so // 2. /jre/lib///hsdis.so // 3. /jre/lib//hsdis.so // 4. hsdis.so (no path) -- John On Jul 5, 2011, at 3:01 PM, Vladimir Kozlov wrote:

Looks good.

Vladimir Tom Rodriguez wrote: http://cr.openjdk.java.net/~never/7062856 29 lines changed: 27 ins; 0 del; 2 mod; 487 unchg

7062856: Disassembler needs to be smarter about finding hsdis after 1.7 launcher changes Summary: do explicit lookup emulating old LDLIBRARYPATH search



More information about the hotspot-compiler-dev mailing list