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