7129724: MAC: Core file location is wrong in crash report
Summary: Updated core path location to reflect macosx default
Reviewed-by: dholmes, kamg
--- a/hotspot/src/os/bsd/vm/os_bsd.cpp Tue Jul 03 01:41:29 2012 -0400
+++ b/hotspot/src/os/bsd/vm/os_bsd.cpp Tue Jul 03 17:35:00 2012 -0700
@@ -5801,3 +5801,14 @@
return true;
}
+
+// Get the default path to the core file
+// Returns the length of the string
+int os::get_core_path(char* buffer, size_t bufferSize) {
+ int n = jio_snprintf(buffer, bufferSize, "/cores");
+
+ // Truncate if theoretical string was longer than bufferSize
+ n = MIN2(n, (int)bufferSize);
+
+ return n;
+}
--- a/hotspot/src/os/linux/vm/os_linux.cpp Tue Jul 03 01:41:29 2012 -0400
+++ b/hotspot/src/os/linux/vm/os_linux.cpp Tue Jul 03 17:35:00 2012 -0700
@@ -5447,6 +5447,18 @@
return true;
}
+// Get the default path to the core file
+// Returns the length of the string
+int os::get_core_path(char* buffer, size_t bufferSize) {
+ const char* p = get_current_directory(buffer, bufferSize);
+
+ if (p == NULL) {
+ assert(p != NULL, "failed to get current directory");
+ return 0;
+ }
+
+ return strlen(buffer);
+}
#ifdef JAVASE_EMBEDDED
//
--- a/hotspot/src/os/posix/vm/os_posix.cpp Tue Jul 03 01:41:29 2012 -0400
+++ b/hotspot/src/os/posix/vm/os_posix.cpp Tue Jul 03 17:35:00 2012 -0700
@@ -34,19 +34,19 @@
// Check core dump limit and report possible place where core can be found
void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char* buffer, size_t bufferSize) {
+ int n;
struct rlimit rlim;
- static char cwd[O_BUFLEN];
bool success;
- get_current_directory(cwd, sizeof(cwd));
+ n = get_core_path(buffer, bufferSize);
if (getrlimit(RLIMIT_CORE, &rlim) != 0) {
- jio_snprintf(buffer, bufferSize, "%s/core or core.%d (may not exist)", cwd, current_process_id());
+ jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d (may not exist)", current_process_id());
success = true;
} else {
switch(rlim.rlim_cur) {
case RLIM_INFINITY:
- jio_snprintf(buffer, bufferSize, "%s/core or core.%d", cwd, current_process_id());
+ jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d", current_process_id());
success = true;
break;
case 0:
@@ -54,7 +54,7 @@
success = false;
break;
default:
- jio_snprintf(buffer, bufferSize, "%s/core or core.%d (max size %lu kB). To ensure a full core dump, try \"ulimit -c unlimited\" before starting Java again", cwd, current_process_id(), (unsigned long)(rlim.rlim_cur >> 10));
+ jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d (max size %lu kB). To ensure a full core dump, try \"ulimit -c unlimited\" before starting Java again", current_process_id(), (unsigned long)(rlim.rlim_cur >> 10));
success = true;
break;
}
--- a/hotspot/src/os/solaris/vm/os_solaris.cpp Tue Jul 03 01:41:29 2012 -0400
+++ b/hotspot/src/os/solaris/vm/os_solaris.cpp Tue Jul 03 17:35:00 2012 -0700
@@ -6537,3 +6537,16 @@
INTERRUPTIBLE_RETURN_INT_NORESTART(::bind(fd, him, len),\
os::Solaris::clear_interrupted);
}
+
+// Get the default path to the core file
+// Returns the length of the string
+int os::get_core_path(char* buffer, size_t bufferSize) {
+ const char* p = get_current_directory(buffer, bufferSize);
+
+ if (p == NULL) {
+ assert(p != NULL, "failed to get current directory");
+ return 0;
+ }
+
+ return strlen(buffer);
+}
--- a/hotspot/src/share/vm/runtime/os.hpp Tue Jul 03 01:41:29 2012 -0400
+++ b/hotspot/src/share/vm/runtime/os.hpp Tue Jul 03 17:35:00 2012 -0700
@@ -665,6 +665,10 @@
// On Windows this will create an actual minidump, on Linux/Solaris it will simply check core dump limits
static void check_or_create_dump(void* exceptionRecord, void* contextRecord, char* buffer, size_t bufferSize);
+ // Get the default path to the core file
+ // Returns the length of the string
+ static int get_core_path(char* buffer, size_t bufferSize);
+
// JVMTI & JVM monitoring and management support
// The thread_cpu_time() and current_thread_cpu_time() are only
// supported if is_thread_cpu_time_supported() returns true.