src/share/vm/compiler/disassembler.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
7062856 Cdiff src/share/vm/compiler/disassembler.cpp
src/share/vm/compiler/disassembler.cpp
Print this page
*** 76,100 ****
// Try to load it.
char ebuf[1024];
char buf[JVM_MAXPATHLEN];
os::jvm_path(buf, sizeof(buf));
int jvm_offset = -1;
{
// Match "jvm[^/]*" in jvm_path.
const char* base = buf;
const char* p = strrchr(buf, '/');
p = strstr(p ? p : base, "jvm");
if (p != NULL) jvm_offset = p - base;
}
if (jvm_offset >= 0) {
! // Find the disassembler next to libjvm.so.
strcpy(&buf[jvm_offset], hsdis_library_name);
strcat(&buf[jvm_offset], os::dll_file_extension());
_library = os::dll_load(buf, ebuf, sizeof ebuf);
}
if (_library == NULL) {
! // Try a free-floating lookup.
strcpy(&buf[0], hsdis_library_name);
strcat(&buf[0], os::dll_file_extension());
_library = os::dll_load(buf, ebuf, sizeof ebuf);
}
if (_library != NULL) {
--- 76,125 ----
// Try to load it.
char ebuf[1024];
char buf[JVM_MAXPATHLEN];
os::jvm_path(buf, sizeof(buf));
int jvm_offset = -1;
+ int lib_offset = -1;
{
// Match "jvm[^/]*" in jvm_path.
const char* base = buf;
const char* p = strrchr(buf, '/');
+ if (p != NULL) lib_offset = p - base + 1;
p = strstr(p ? p : base, "jvm");
if (p != NULL) jvm_offset = p - base;
}
+ // 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)
if (jvm_offset >= 0) {
! // 1. <home>/jre/lib/<arch>/<vm>/libhsdis-<arch>.so
strcpy(&buf[jvm_offset], hsdis_library_name);
strcat(&buf[jvm_offset], os::dll_file_extension());
_library = os::dll_load(buf, ebuf, sizeof ebuf);
+ if (_library == NULL) {
+ // 2. <home>/jre/lib/<arch>/<vm>/hsdis-<arch>.so
+ strcpy(&buf[lib_offset], hsdis_library_name);
+ strcat(&buf[lib_offset], os::dll_file_extension());
+ _library = os::dll_load(buf, ebuf, sizeof ebuf);
}
if (_library == NULL) {
! // 3. <home>/jre/lib/<arch>/hsdis-<arch>.so
! buf[lib_offset - 1] = '\0';
! const char* p = strrchr(buf, '/');
! if (p != NULL) {
! lib_offset = p - buf + 1;
! strcpy(&buf[lib_offset], hsdis_library_name);
! strcat(&buf[lib_offset], os::dll_file_extension());
! _library = os::dll_load(buf, ebuf, sizeof ebuf);
! }
! }
! }
! if (_library == NULL) {
! // 4. hsdis-<arch>.so (using LD_LIBRARY_PATH)
strcpy(&buf[0], hsdis_library_name);
strcat(&buf[0], os::dll_file_extension());
_library = os::dll_load(buf, ebuf, sizeof ebuf);
}
if (_library != NULL) {
*** 247,257 ****
--- 272,288 ----
if (arg != NULL) {
print_address(arg);
return arg;
}
} else if (match(event, "mach")) {
+ static char buffer[32] = { 0, };
+ if (strcmp(buffer, (const char*)arg) != 0 ||
+ strlen((const char*)arg) > sizeof(buffer) - 1) {
+ // Only print this when the mach changes
+ strncpy(buffer, (const char*)arg, sizeof(buffer) - 1);
output()->print_cr("[Disassembling for mach='%s']", arg);
+ }
} else if (match(event, "format bytes-per-line")) {
_bytes_per_line = (int) (intptr_t) arg;
} else {
// ignore unrecognized markup
}
src/share/vm/compiler/disassembler.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File