Mercurial > hg > truffle
comparison src/os/linux/vm/os_linux.cpp @ 1642:0e7d2a08b605
6967423: Hotspot support for modules image
Summary: Add hotspot support for modules image
Reviewed-by: acorn
author | mchung |
---|---|
date | Wed, 07 Jul 2010 15:35:58 -0700 |
parents | c18cbe5936b8 |
children | 126ea7725993 |
comparison
equal
deleted
inserted
replaced
1641:5087ecc10458 | 1642:0e7d2a08b605 |
---|---|
2077 } | 2077 } |
2078 | 2078 |
2079 static char saved_jvm_path[MAXPATHLEN] = {0}; | 2079 static char saved_jvm_path[MAXPATHLEN] = {0}; |
2080 | 2080 |
2081 // Find the full path to the current module, libjvm.so or libjvm_g.so | 2081 // Find the full path to the current module, libjvm.so or libjvm_g.so |
2082 void os::jvm_path(char *buf, jint len) { | 2082 void os::jvm_path(char *buf, jint buflen) { |
2083 // Error checking. | 2083 // Error checking. |
2084 if (len < MAXPATHLEN) { | 2084 if (buflen < MAXPATHLEN) { |
2085 assert(false, "must use a large-enough buffer"); | 2085 assert(false, "must use a large-enough buffer"); |
2086 buf[0] = '\0'; | 2086 buf[0] = '\0'; |
2087 return; | 2087 return; |
2088 } | 2088 } |
2089 // Lazy resolve the path to current module. | 2089 // Lazy resolve the path to current module. |
2115 | 2115 |
2116 if (strncmp(p, "/jre/lib/", 9) != 0) { | 2116 if (strncmp(p, "/jre/lib/", 9) != 0) { |
2117 // Look for JAVA_HOME in the environment. | 2117 // Look for JAVA_HOME in the environment. |
2118 char* java_home_var = ::getenv("JAVA_HOME"); | 2118 char* java_home_var = ::getenv("JAVA_HOME"); |
2119 if (java_home_var != NULL && java_home_var[0] != 0) { | 2119 if (java_home_var != NULL && java_home_var[0] != 0) { |
2120 char* jrelib_p; | |
2121 int len; | |
2122 | |
2120 // Check the current module name "libjvm.so" or "libjvm_g.so". | 2123 // Check the current module name "libjvm.so" or "libjvm_g.so". |
2121 p = strrchr(buf, '/'); | 2124 p = strrchr(buf, '/'); |
2122 assert(strstr(p, "/libjvm") == p, "invalid library name"); | 2125 assert(strstr(p, "/libjvm") == p, "invalid library name"); |
2123 p = strstr(p, "_g") ? "_g" : ""; | 2126 p = strstr(p, "_g") ? "_g" : ""; |
2124 | 2127 |
2125 if (realpath(java_home_var, buf) == NULL) | 2128 if (realpath(java_home_var, buf) == NULL) |
2126 return; | 2129 return; |
2127 sprintf(buf + strlen(buf), "/jre/lib/%s", cpu_arch); | 2130 |
2131 // determine if this is a legacy image or modules image | |
2132 // modules image doesn't have "jre" subdirectory | |
2133 len = strlen(buf); | |
2134 jrelib_p = buf + len; | |
2135 snprintf(jrelib_p, buflen-len, "/jre/lib/%s", cpu_arch); | |
2136 if (0 != access(buf, F_OK)) { | |
2137 snprintf(jrelib_p, buflen-len, "/lib/%s", cpu_arch); | |
2138 } | |
2139 | |
2128 if (0 == access(buf, F_OK)) { | 2140 if (0 == access(buf, F_OK)) { |
2129 // Use current module name "libjvm[_g].so" instead of | 2141 // Use current module name "libjvm[_g].so" instead of |
2130 // "libjvm"debug_only("_g")".so" since for fastdebug version | 2142 // "libjvm"debug_only("_g")".so" since for fastdebug version |
2131 // we should have "libjvm.so" but debug_only("_g") adds "_g"! | 2143 // we should have "libjvm.so" but debug_only("_g") adds "_g"! |
2132 // It is used when we are choosing the HPI library's name | 2144 // It is used when we are choosing the HPI library's name |
2133 // "libhpi[_g].so" in hpi::initialize_get_interface(). | 2145 // "libhpi[_g].so" in hpi::initialize_get_interface(). |
2134 sprintf(buf + strlen(buf), "/hotspot/libjvm%s.so", p); | 2146 len = strlen(buf); |
2147 snprintf(buf + len, buflen-len, "/hotspot/libjvm%s.so", p); | |
2135 } else { | 2148 } else { |
2136 // Go back to path of .so | 2149 // Go back to path of .so |
2137 if (realpath(dli_fname, buf) == NULL) | 2150 if (realpath(dli_fname, buf) == NULL) |
2138 return; | 2151 return; |
2139 } | 2152 } |