8358799: Refactor os::jvm_path()
Reviewed-by: dholmes, jsjolen
This commit is contained in:
parent
a2f99fd88b
commit
500a3a2d0a
@ -1261,69 +1261,6 @@ void os::pd_print_cpu_info(outputStream* st, char* buf, size_t buflen) {
|
|||||||
// Nothing to do beyond of what os::print_cpu_info() does.
|
// Nothing to do beyond of what os::print_cpu_info() does.
|
||||||
}
|
}
|
||||||
|
|
||||||
static char saved_jvm_path[MAXPATHLEN] = {0};
|
|
||||||
|
|
||||||
// Find the full path to the current module, libjvm.so.
|
|
||||||
void os::jvm_path(char *buf, jint buflen) {
|
|
||||||
// Error checking.
|
|
||||||
if (buflen < MAXPATHLEN) {
|
|
||||||
assert(false, "must use a large-enough buffer");
|
|
||||||
buf[0] = '\0';
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Lazy resolve the path to current module.
|
|
||||||
if (saved_jvm_path[0] != 0) {
|
|
||||||
strcpy(buf, saved_jvm_path);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Dl_info dlinfo;
|
|
||||||
int ret = dladdr(CAST_FROM_FN_PTR(void *, os::jvm_path), &dlinfo);
|
|
||||||
assert(ret != 0, "cannot locate libjvm");
|
|
||||||
char* rp = os::realpath((char *)dlinfo.dli_fname, buf, buflen);
|
|
||||||
assert(rp != nullptr, "error in realpath(): maybe the 'path' argument is too long?");
|
|
||||||
|
|
||||||
// If executing unit tests we require JAVA_HOME to point to the real JDK.
|
|
||||||
if (Arguments::executing_unit_tests()) {
|
|
||||||
// Look for JAVA_HOME in the environment.
|
|
||||||
char* java_home_var = ::getenv("JAVA_HOME");
|
|
||||||
if (java_home_var != nullptr && java_home_var[0] != 0) {
|
|
||||||
|
|
||||||
// Check the current module name "libjvm.so".
|
|
||||||
const char* p = strrchr(buf, '/');
|
|
||||||
if (p == nullptr) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
assert(strstr(p, "/libjvm") == p, "invalid library name");
|
|
||||||
|
|
||||||
stringStream ss(buf, buflen);
|
|
||||||
rp = os::realpath(java_home_var, buf, buflen);
|
|
||||||
if (rp == nullptr) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert((int)strlen(buf) < buflen, "Ran out of buffer room");
|
|
||||||
ss.print("%s/lib", buf);
|
|
||||||
|
|
||||||
if (0 == access(buf, F_OK)) {
|
|
||||||
// Use current module name "libjvm.so"
|
|
||||||
ss.print("/%s/libjvm%s", Abstract_VM_Version::vm_variant(), JNI_LIB_SUFFIX);
|
|
||||||
assert(strcmp(buf + strlen(buf) - strlen(JNI_LIB_SUFFIX), JNI_LIB_SUFFIX) == 0,
|
|
||||||
"buf has been truncated");
|
|
||||||
} else {
|
|
||||||
// Go back to path of .so
|
|
||||||
rp = os::realpath((char *)dlinfo.dli_fname, buf, buflen);
|
|
||||||
if (rp == nullptr) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
strncpy(saved_jvm_path, buf, sizeof(saved_jvm_path));
|
|
||||||
saved_jvm_path[sizeof(saved_jvm_path) - 1] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Virtual Memory
|
// Virtual Memory
|
||||||
|
|
||||||
|
@ -1482,83 +1482,6 @@ void os::print_memory_info(outputStream* st) {
|
|||||||
st->cr();
|
st->cr();
|
||||||
}
|
}
|
||||||
|
|
||||||
static char saved_jvm_path[MAXPATHLEN] = {0};
|
|
||||||
|
|
||||||
// Find the full path to the current module, libjvm
|
|
||||||
void os::jvm_path(char *buf, jint buflen) {
|
|
||||||
// Error checking.
|
|
||||||
if (buflen < MAXPATHLEN) {
|
|
||||||
assert(false, "must use a large-enough buffer");
|
|
||||||
buf[0] = '\0';
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Lazy resolve the path to current module.
|
|
||||||
if (saved_jvm_path[0] != 0) {
|
|
||||||
strcpy(buf, saved_jvm_path);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
char dli_fname[MAXPATHLEN];
|
|
||||||
dli_fname[0] = '\0';
|
|
||||||
bool ret = dll_address_to_library_name(
|
|
||||||
CAST_FROM_FN_PTR(address, os::jvm_path),
|
|
||||||
dli_fname, sizeof(dli_fname), nullptr);
|
|
||||||
assert(ret, "cannot locate libjvm");
|
|
||||||
char *rp = nullptr;
|
|
||||||
if (ret && dli_fname[0] != '\0') {
|
|
||||||
rp = os::realpath(dli_fname, buf, buflen);
|
|
||||||
}
|
|
||||||
if (rp == nullptr) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If executing unit tests we require JAVA_HOME to point to the real JDK.
|
|
||||||
if (Arguments::executing_unit_tests()) {
|
|
||||||
// Look for JAVA_HOME in the environment.
|
|
||||||
char* java_home_var = ::getenv("JAVA_HOME");
|
|
||||||
if (java_home_var != nullptr && java_home_var[0] != 0) {
|
|
||||||
|
|
||||||
// Check the current module name "libjvm"
|
|
||||||
const char* p = strrchr(buf, '/');
|
|
||||||
assert(strstr(p, "/libjvm") == p, "invalid library name");
|
|
||||||
|
|
||||||
stringStream ss(buf, buflen);
|
|
||||||
rp = os::realpath(java_home_var, buf, buflen);
|
|
||||||
if (rp == nullptr) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert((int)strlen(buf) < buflen, "Ran out of buffer space");
|
|
||||||
// Add the appropriate library and JVM variant subdirs
|
|
||||||
ss.print("%s/lib/%s", buf, Abstract_VM_Version::vm_variant());
|
|
||||||
|
|
||||||
if (0 != access(buf, F_OK)) {
|
|
||||||
ss.reset();
|
|
||||||
ss.print("%s/lib", buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the path exists within JAVA_HOME, add the JVM library name
|
|
||||||
// to complete the path to JVM being overridden. Otherwise fallback
|
|
||||||
// to the path to the current library.
|
|
||||||
if (0 == access(buf, F_OK)) {
|
|
||||||
// Use current module name "libjvm"
|
|
||||||
ss.print("/libjvm%s", JNI_LIB_SUFFIX);
|
|
||||||
assert(strcmp(buf + strlen(buf) - strlen(JNI_LIB_SUFFIX), JNI_LIB_SUFFIX) == 0,
|
|
||||||
"buf has been truncated");
|
|
||||||
} else {
|
|
||||||
// Fall back to path of current library
|
|
||||||
rp = os::realpath(dli_fname, buf, buflen);
|
|
||||||
if (rp == nullptr) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
strncpy(saved_jvm_path, buf, MAXPATHLEN);
|
|
||||||
saved_jvm_path[MAXPATHLEN - 1] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Virtual Memory
|
// Virtual Memory
|
||||||
|
|
||||||
|
@ -2746,77 +2746,6 @@ void os::get_summary_cpu_info(char* cpuinfo, size_t length) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static char saved_jvm_path[MAXPATHLEN] = {0};
|
|
||||||
|
|
||||||
// Find the full path to the current module, libjvm.so
|
|
||||||
void os::jvm_path(char *buf, jint buflen) {
|
|
||||||
// Error checking.
|
|
||||||
if (buflen < MAXPATHLEN) {
|
|
||||||
assert(false, "must use a large-enough buffer");
|
|
||||||
buf[0] = '\0';
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Lazy resolve the path to current module.
|
|
||||||
if (saved_jvm_path[0] != 0) {
|
|
||||||
strcpy(buf, saved_jvm_path);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
char dli_fname[MAXPATHLEN];
|
|
||||||
dli_fname[0] = '\0';
|
|
||||||
bool ret = dll_address_to_library_name(
|
|
||||||
CAST_FROM_FN_PTR(address, os::jvm_path),
|
|
||||||
dli_fname, sizeof(dli_fname), nullptr);
|
|
||||||
assert(ret, "cannot locate libjvm");
|
|
||||||
char *rp = nullptr;
|
|
||||||
if (ret && dli_fname[0] != '\0') {
|
|
||||||
rp = os::realpath(dli_fname, buf, buflen);
|
|
||||||
}
|
|
||||||
if (rp == nullptr) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If executing unit tests we require JAVA_HOME to point to the real JDK.
|
|
||||||
if (Arguments::executing_unit_tests()) {
|
|
||||||
// Look for JAVA_HOME in the environment.
|
|
||||||
char* java_home_var = ::getenv("JAVA_HOME");
|
|
||||||
if (java_home_var != nullptr && java_home_var[0] != 0) {
|
|
||||||
|
|
||||||
// Check the current module name "libjvm.so".
|
|
||||||
const char* p = strrchr(buf, '/');
|
|
||||||
if (p == nullptr) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
assert(strstr(p, "/libjvm") == p, "invalid library name");
|
|
||||||
|
|
||||||
stringStream ss(buf, buflen);
|
|
||||||
rp = os::realpath(java_home_var, buf, buflen);
|
|
||||||
if (rp == nullptr) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert((int)strlen(buf) < buflen, "Ran out of buffer room");
|
|
||||||
ss.print("%s/lib", buf);
|
|
||||||
|
|
||||||
if (0 == access(buf, F_OK)) {
|
|
||||||
// Use current module name "libjvm.so"
|
|
||||||
ss.print("/%s/libjvm%s", Abstract_VM_Version::vm_variant(), JNI_LIB_SUFFIX);
|
|
||||||
assert(strcmp(buf + strlen(buf) - strlen(JNI_LIB_SUFFIX), JNI_LIB_SUFFIX) == 0,
|
|
||||||
"buf has been truncated");
|
|
||||||
} else {
|
|
||||||
// Go back to path of .so
|
|
||||||
rp = os::realpath(dli_fname, buf, buflen);
|
|
||||||
if (rp == nullptr) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
strncpy(saved_jvm_path, buf, MAXPATHLEN);
|
|
||||||
saved_jvm_path[MAXPATHLEN - 1] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Virtual Memory
|
// Virtual Memory
|
||||||
|
|
||||||
|
@ -1060,6 +1060,95 @@ bool os::same_files(const char* file1, const char* file2) {
|
|||||||
return is_same;
|
return is_same;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char saved_jvm_path[MAXPATHLEN] = {0};
|
||||||
|
|
||||||
|
// Find the full path to the current module, libjvm.so
|
||||||
|
void os::jvm_path(char *buf, jint buflen) {
|
||||||
|
// Error checking.
|
||||||
|
if (buflen < MAXPATHLEN) {
|
||||||
|
assert(false, "must use a large-enough buffer");
|
||||||
|
buf[0] = '\0';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Lazy resolve the path to current module.
|
||||||
|
if (saved_jvm_path[0] != 0) {
|
||||||
|
strcpy(buf, saved_jvm_path);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* fname;
|
||||||
|
#ifdef AIX
|
||||||
|
Dl_info dlinfo;
|
||||||
|
int ret = dladdr(CAST_FROM_FN_PTR(void *, os::jvm_path), &dlinfo);
|
||||||
|
assert(ret != 0, "cannot locate libjvm");
|
||||||
|
if (ret == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fname = dlinfo.dli_fname;
|
||||||
|
#else
|
||||||
|
char dli_fname[MAXPATHLEN];
|
||||||
|
dli_fname[0] = '\0';
|
||||||
|
bool ret = dll_address_to_library_name(
|
||||||
|
CAST_FROM_FN_PTR(address, os::jvm_path),
|
||||||
|
dli_fname, sizeof(dli_fname), nullptr);
|
||||||
|
assert(ret, "cannot locate libjvm");
|
||||||
|
if (!ret) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fname = dli_fname;
|
||||||
|
#endif // AIX
|
||||||
|
char* rp = nullptr;
|
||||||
|
if (fname[0] != '\0') {
|
||||||
|
rp = os::realpath(dli_fname, buf, buflen);
|
||||||
|
}
|
||||||
|
if (rp == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If executing unit tests we require JAVA_HOME to point to the real JDK.
|
||||||
|
if (Arguments::executing_unit_tests()) {
|
||||||
|
// Look for JAVA_HOME in the environment.
|
||||||
|
char* java_home_var = ::getenv("JAVA_HOME");
|
||||||
|
if (java_home_var != nullptr && java_home_var[0] != 0) {
|
||||||
|
|
||||||
|
// Check the current module name "libjvm.so".
|
||||||
|
const char* p = strrchr(buf, '/');
|
||||||
|
if (p == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
assert(strstr(p, "/libjvm") == p, "invalid library name");
|
||||||
|
|
||||||
|
stringStream ss(buf, buflen);
|
||||||
|
rp = os::realpath(java_home_var, buf, buflen);
|
||||||
|
if (rp == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert((int)strlen(buf) < buflen, "Ran out of buffer room");
|
||||||
|
ss.print("%s/lib", buf);
|
||||||
|
|
||||||
|
// If the path exists within JAVA_HOME, add the VM variant directory and JVM
|
||||||
|
// library name to complete the path to JVM being overridden. Otherwise fallback
|
||||||
|
// to the path to the current library.
|
||||||
|
if (0 == access(buf, F_OK)) {
|
||||||
|
// Use current module name "libjvm.so"
|
||||||
|
ss.print("/%s/libjvm%s", Abstract_VM_Version::vm_variant(), JNI_LIB_SUFFIX);
|
||||||
|
assert(strcmp(buf + strlen(buf) - strlen(JNI_LIB_SUFFIX), JNI_LIB_SUFFIX) == 0,
|
||||||
|
"buf has been truncated");
|
||||||
|
} else {
|
||||||
|
// Go back to path of .so
|
||||||
|
rp = os::realpath(dli_fname, buf, buflen);
|
||||||
|
if (rp == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
strncpy(saved_jvm_path, buf, MAXPATHLEN);
|
||||||
|
saved_jvm_path[MAXPATHLEN - 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
// Called when creating the thread. The minimum stack sizes have already been calculated
|
// Called when creating the thread. The minimum stack sizes have already been calculated
|
||||||
size_t os::Posix::get_initial_stack_size(ThreadType thr_type, size_t req_stack_size) {
|
size_t os::Posix::get_initial_stack_size(ThreadType thr_type, size_t req_stack_size) {
|
||||||
size_t stack_size;
|
size_t stack_size;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user