hotspot/src/os/bsd/vm/os_bsd.cpp
changeset 11593 288a647ff773
parent 11485 f4225c55d338
child 11601 f359304c1856
equal deleted inserted replaced
11590:02eafbcc30bc 11593:288a647ff773
   299 #  endif
   299 #  endif
   300 #else
   300 #else
   301 #error Add appropriate cpu_arch setting
   301 #error Add appropriate cpu_arch setting
   302 #endif
   302 #endif
   303 
   303 
       
   304 // Compiler variant
       
   305 #ifdef COMPILER2
       
   306 #define COMPILER_VARIANT "server"
       
   307 #else
       
   308 #define COMPILER_VARIANT "client"
       
   309 #endif
   304 
   310 
   305 #ifndef _ALLBSD_SOURCE
   311 #ifndef _ALLBSD_SOURCE
   306 // pid_t gettid()
   312 // pid_t gettid()
   307 //
   313 //
   308 // Returns the kernel thread id of the currently running thread. Kernel
   314 // Returns the kernel thread id of the currently running thread. Kernel
  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       }