2505 print_signal_handler(st, BREAK_SIGNAL, buf, buflen); |
2511 print_signal_handler(st, BREAK_SIGNAL, buf, buflen); |
2506 } |
2512 } |
2507 |
2513 |
2508 static char saved_jvm_path[MAXPATHLEN] = {0}; |
2514 static char saved_jvm_path[MAXPATHLEN] = {0}; |
2509 |
2515 |
2510 // Find the full path to the current module, libjvm.so or libjvm_g.so |
2516 // Find the full path to the current module, libjvm or libjvm_g |
2511 void os::jvm_path(char *buf, jint buflen) { |
2517 void os::jvm_path(char *buf, jint buflen) { |
2512 // Error checking. |
2518 // Error checking. |
2513 if (buflen < MAXPATHLEN) { |
2519 if (buflen < MAXPATHLEN) { |
2514 assert(false, "must use a large-enough buffer"); |
2520 assert(false, "must use a large-enough buffer"); |
2515 buf[0] = '\0'; |
2521 buf[0] = '\0'; |
2530 if (rp == NULL) |
2536 if (rp == NULL) |
2531 return; |
2537 return; |
2532 |
2538 |
2533 if (Arguments::created_by_gamma_launcher()) { |
2539 if (Arguments::created_by_gamma_launcher()) { |
2534 // Support for the gamma launcher. Typical value for buf is |
2540 // Support for the gamma launcher. Typical value for buf is |
2535 // "<JAVA_HOME>/jre/lib/<arch>/<vmtype>/libjvm.so". If "/jre/lib/" appears at |
2541 // "<JAVA_HOME>/jre/lib/<arch>/<vmtype>/libjvm". If "/jre/lib/" appears at |
2536 // the right place in the string, then assume we are installed in a JDK and |
2542 // the right place in the string, then assume we are installed in a JDK and |
2537 // we're done. Otherwise, check for a JAVA_HOME environment variable and fix |
2543 // we're done. Otherwise, check for a JAVA_HOME environment variable and |
2538 // up the path so it looks like libjvm.so is installed there (append a |
2544 // construct a path to the JVM being overridden. |
2539 // fake suffix hotspot/libjvm.so). |
2545 |
2540 const char *p = buf + strlen(buf) - 1; |
2546 const char *p = buf + strlen(buf) - 1; |
2541 for (int count = 0; p > buf && count < 5; ++count) { |
2547 for (int count = 0; p > buf && count < 5; ++count) { |
2542 for (--p; p > buf && *p != '/'; --p) |
2548 for (--p; p > buf && *p != '/'; --p) |
2543 /* empty */ ; |
2549 /* empty */ ; |
2544 } |
2550 } |
2548 char* java_home_var = ::getenv("JAVA_HOME"); |
2554 char* java_home_var = ::getenv("JAVA_HOME"); |
2549 if (java_home_var != NULL && java_home_var[0] != 0) { |
2555 if (java_home_var != NULL && java_home_var[0] != 0) { |
2550 char* jrelib_p; |
2556 char* jrelib_p; |
2551 int len; |
2557 int len; |
2552 |
2558 |
2553 // Check the current module name "libjvm.so" or "libjvm_g.so". |
2559 // Check the current module name "libjvm" or "libjvm_g". |
2554 p = strrchr(buf, '/'); |
2560 p = strrchr(buf, '/'); |
2555 assert(strstr(p, "/libjvm") == p, "invalid library name"); |
2561 assert(strstr(p, "/libjvm") == p, "invalid library name"); |
2556 p = strstr(p, "_g") ? "_g" : ""; |
2562 p = strstr(p, "_g") ? "_g" : ""; |
2557 |
2563 |
2558 rp = realpath(java_home_var, buf); |
2564 rp = realpath(java_home_var, buf); |
2561 |
2567 |
2562 // determine if this is a legacy image or modules image |
2568 // determine if this is a legacy image or modules image |
2563 // modules image doesn't have "jre" subdirectory |
2569 // modules image doesn't have "jre" subdirectory |
2564 len = strlen(buf); |
2570 len = strlen(buf); |
2565 jrelib_p = buf + len; |
2571 jrelib_p = buf + len; |
2566 snprintf(jrelib_p, buflen-len, "/jre/lib/%s", cpu_arch); |
2572 |
|
2573 // Add the appropriate library subdir |
|
2574 snprintf(jrelib_p, buflen-len, "/jre/lib"); |
2567 if (0 != access(buf, F_OK)) { |
2575 if (0 != access(buf, F_OK)) { |
2568 snprintf(jrelib_p, buflen-len, "/lib/%s", cpu_arch); |
2576 snprintf(jrelib_p, buflen-len, "/lib"); |
2569 } |
2577 } |
2570 |
2578 |
|
2579 // Add the appropriate client or server subdir |
|
2580 len = strlen(buf); |
|
2581 jrelib_p = buf + len; |
|
2582 snprintf(jrelib_p, buflen-len, "/%s", COMPILER_VARIANT); |
|
2583 if (0 != access(buf, F_OK)) { |
|
2584 snprintf(jrelib_p, buflen-len, ""); |
|
2585 } |
|
2586 |
|
2587 // If the path exists within JAVA_HOME, add the JVM library name |
|
2588 // to complete the path to JVM being overridden. Otherwise fallback |
|
2589 // to the path to the current library. |
2571 if (0 == access(buf, F_OK)) { |
2590 if (0 == access(buf, F_OK)) { |
2572 // Use current module name "libjvm[_g].so" instead of |
2591 // Use current module name "libjvm[_g]" instead of |
2573 // "libjvm"debug_only("_g")".so" since for fastdebug version |
2592 // "libjvm"debug_only("_g")"" since for fastdebug version |
2574 // we should have "libjvm.so" but debug_only("_g") adds "_g"! |
2593 // we should have "libjvm" but debug_only("_g") adds "_g"! |
2575 len = strlen(buf); |
2594 len = strlen(buf); |
2576 snprintf(buf + len, buflen-len, "/hotspot/libjvm%s.so", p); |
2595 snprintf(buf + len, buflen-len, "/libjvm%s%s", p, JNI_LIB_SUFFIX); |
2577 } else { |
2596 } else { |
2578 // Go back to path of .so |
2597 // Fall back to path of current library |
2579 rp = realpath(dli_fname, buf); |
2598 rp = realpath(dli_fname, buf); |
2580 if (rp == NULL) |
2599 if (rp == NULL) |
2581 return; |
2600 return; |
2582 } |
2601 } |
2583 } |
2602 } |