1 /*
   2  * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "jvm.h"
  27 #include "code/codeCache.hpp"
  28 #include "compiler/compileBroker.hpp"
  29 #include "compiler/disassembler.hpp"
  30 #include "gc/shared/gcConfig.hpp"
  31 #include "logging/logConfiguration.hpp"
  32 #include "jfr/jfrEvents.hpp"
  33 #include "memory/resourceArea.hpp"
  34 #include "prims/whitebox.hpp"
  35 #include "runtime/arguments.hpp"
  36 #include "runtime/atomic.hpp"
  37 #include "runtime/frame.inline.hpp"
  38 #include "runtime/init.hpp"
  39 #include "runtime/os.hpp"
  40 #include "runtime/thread.inline.hpp"
  41 #include "runtime/threadSMR.hpp"
  42 #include "runtime/vmThread.hpp"
  43 #include "runtime/vmOperations.hpp"
  44 #include "runtime/vm_version.hpp"
  45 #include "runtime/flags/jvmFlag.hpp"
  46 #include "services/memTracker.hpp"
  47 #include "utilities/debug.hpp"
  48 #include "utilities/decoder.hpp"
  49 #include "utilities/defaultStream.hpp"
  50 #include "utilities/events.hpp"
  51 #include "utilities/vmError.hpp"
  52 #include "utilities/macros.hpp"
  53 #if INCLUDE_JFR
  54 #include "jfr/jfr.hpp"
  55 #endif
  56 
  57 #ifndef PRODUCT
  58 #include <signal.h>
  59 #endif // PRODUCT
  60 
  61 bool VMError::_error_reported = false;
  62 
  63 // call this when the VM is dying--it might loosen some asserts
  64 bool VMError::is_error_reported() { return _error_reported; }
  65 
  66 // returns an address which is guaranteed to generate a SIGSEGV on read,
  67 // for test purposes, which is not NULL and contains bits in every word
  68 void* VMError::get_segfault_address() {
  69   return (void*)
  70 #ifdef _LP64
  71     0xABC0000000000ABCULL;
  72 #else
  73     0x00000ABC;
  74 #endif
  75 }
  76 
  77 // List of environment variables that should be reported in error log file.
  78 const char *env_list[] = {
  79   // All platforms
  80   "JAVA_HOME", "JRE_HOME", "JAVA_TOOL_OPTIONS", "_JAVA_OPTIONS", "CLASSPATH",
  81   "JAVA_COMPILER", "PATH", "USERNAME",
  82 
  83   // Env variables that are defined on Solaris/Linux/BSD
  84   "LD_LIBRARY_PATH", "LD_PRELOAD", "SHELL", "DISPLAY",
  85   "HOSTTYPE", "OSTYPE", "ARCH", "MACHTYPE",
  86 
  87   // defined on AIX
  88   "LIBPATH", "LDR_PRELOAD", "LDR_PRELOAD64",
  89 
  90   // defined on Linux
  91   "LD_ASSUME_KERNEL", "_JAVA_SR_SIGNUM",
  92 
  93   // defined on Darwin
  94   "DYLD_LIBRARY_PATH", "DYLD_FALLBACK_LIBRARY_PATH",
  95   "DYLD_FRAMEWORK_PATH", "DYLD_FALLBACK_FRAMEWORK_PATH",
  96   "DYLD_INSERT_LIBRARIES",
  97 
  98   // defined on Windows
  99   "OS", "PROCESSOR_IDENTIFIER", "_ALT_JAVA_HOME_DIR",
 100 
 101   (const char *)0
 102 };
 103 
 104 // A simple parser for -XX:OnError, usage:
 105 //  ptr = OnError;
 106 //  while ((cmd = next_OnError_command(buffer, sizeof(buffer), &ptr) != NULL)
 107 //     ... ...
 108 static char* next_OnError_command(char* buf, int buflen, const char** ptr) {
 109   if (ptr == NULL || *ptr == NULL) return NULL;
 110 
 111   const char* cmd = *ptr;
 112 
 113   // skip leading blanks or ';'
 114   while (*cmd == ' ' || *cmd == ';') cmd++;
 115 
 116   if (*cmd == '\0') return NULL;
 117 
 118   const char * cmdend = cmd;
 119   while (*cmdend != '\0' && *cmdend != ';') cmdend++;
 120 
 121   Arguments::copy_expand_pid(cmd, cmdend - cmd, buf, buflen);
 122 
 123   *ptr = (*cmdend == '\0' ? cmdend : cmdend + 1);
 124   return buf;
 125 }
 126 
 127 static void print_bug_submit_message(outputStream *out, Thread *thread) {
 128   if (out == NULL) return;
 129   out->print_raw_cr("# If you would like to submit a bug report, please visit:");
 130   out->print_raw   ("#   ");
 131   out->print_raw_cr(Arguments::java_vendor_url_bug());
 132   // If the crash is in native code, encourage user to submit a bug to the
 133   // provider of that code.
 134   if (thread && thread->is_Java_thread() &&
 135       !thread->is_hidden_from_external_view()) {
 136     JavaThread* jt = (JavaThread*)thread;
 137     if (jt->thread_state() == _thread_in_native) {
 138       out->print_cr("# The crash happened outside the Java Virtual Machine in native code.\n# See problematic frame for where to report the bug.");
 139     }
 140   }
 141   out->print_raw_cr("#");
 142 }
 143 
 144 bool VMError::coredump_status;
 145 char VMError::coredump_message[O_BUFLEN];
 146 
 147 void VMError::record_coredump_status(const char* message, bool status) {
 148   coredump_status = status;
 149   strncpy(coredump_message, message, sizeof(coredump_message));
 150   coredump_message[sizeof(coredump_message)-1] = 0;
 151 }
 152 
 153 // Return a string to describe the error
 154 char* VMError::error_string(char* buf, int buflen) {
 155   char signame_buf[64];
 156   const char *signame = os::exception_name(_id, signame_buf, sizeof(signame_buf));
 157 
 158   if (signame) {
 159     jio_snprintf(buf, buflen,
 160                  "%s (0x%x) at pc=" PTR_FORMAT ", pid=%d, tid=" UINTX_FORMAT,
 161                  signame, _id, _pc,
 162                  os::current_process_id(), os::current_thread_id());
 163   } else if (_filename != NULL && _lineno > 0) {
 164     // skip directory names
 165     char separator = os::file_separator()[0];
 166     const char *p = strrchr(_filename, separator);
 167     int n = jio_snprintf(buf, buflen,
 168                          "Internal Error at %s:%d, pid=%d, tid=" UINTX_FORMAT,
 169                          p ? p + 1 : _filename, _lineno,
 170                          os::current_process_id(), os::current_thread_id());
 171     if (n >= 0 && n < buflen && _message) {
 172       if (strlen(_detail_msg) > 0) {
 173         jio_snprintf(buf + n, buflen - n, "%s%s: %s",
 174         os::line_separator(), _message, _detail_msg);
 175       } else {
 176         jio_snprintf(buf + n, buflen - n, "%sError: %s",
 177                      os::line_separator(), _message);
 178       }
 179     }
 180   } else {
 181     jio_snprintf(buf, buflen,
 182                  "Internal Error (0x%x), pid=%d, tid=" UINTX_FORMAT,
 183                  _id, os::current_process_id(), os::current_thread_id());
 184   }
 185 
 186   return buf;
 187 }
 188 
 189 void VMError::print_stack_trace(outputStream* st, JavaThread* jt,
 190                                 char* buf, int buflen, bool verbose) {
 191 #ifdef ZERO
 192   if (jt->zero_stack()->sp() && jt->top_zero_frame()) {
 193     // StackFrameStream uses the frame anchor, which may not have
 194     // been set up.  This can be done at any time in Zero, however,
 195     // so if it hasn't been set up then we just set it up now and
 196     // clear it again when we're done.
 197     bool has_last_Java_frame = jt->has_last_Java_frame();
 198     if (!has_last_Java_frame)
 199       jt->set_last_Java_frame();
 200     st->print("Java frames:");
 201     st->cr();
 202 
 203     // Print the frames
 204     StackFrameStream sfs(jt);
 205     for(int i = 0; !sfs.is_done(); sfs.next(), i++) {
 206       sfs.current()->zero_print_on_error(i, st, buf, buflen);
 207       st->cr();
 208     }
 209 
 210     // Reset the frame anchor if necessary
 211     if (!has_last_Java_frame)
 212       jt->reset_last_Java_frame();
 213   }
 214 #else
 215   if (jt->has_last_Java_frame()) {
 216     st->print_cr("Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)");
 217     for(StackFrameStream sfs(jt); !sfs.is_done(); sfs.next()) {
 218       sfs.current()->print_on_error(st, buf, buflen, verbose);
 219       st->cr();
 220     }
 221   }
 222 #endif // ZERO
 223 }
 224 
 225 void VMError::print_native_stack(outputStream* st, frame fr, Thread* t, char* buf, int buf_size) {
 226 
 227   // see if it's a valid frame
 228   if (fr.pc()) {
 229     st->print_cr("Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)");
 230 
 231     int count = 0;
 232     while (count++ < StackPrintLimit) {
 233       fr.print_on_error(st, buf, buf_size);
 234       if (fr.pc()) { // print source file and line, if available
 235         char buf[128];
 236         int line_no;
 237         if (Decoder::get_source_info(fr.pc(), buf, sizeof(buf), &line_no)) {
 238           st->print("  (%s:%d)", buf, line_no);
 239         }
 240       }
 241       st->cr();
 242       // Compiled code may use EBP register on x86 so it looks like
 243       // non-walkable C frame. Use frame.sender() for java frames.
 244       if (t && t->is_Java_thread()) {
 245         // Catch very first native frame by using stack address.
 246         // For JavaThread stack_base and stack_size should be set.
 247         if (!t->on_local_stack((address)(fr.real_fp() + 1))) {
 248           break;
 249         }
 250         if (fr.is_java_frame() || fr.is_native_frame() || fr.is_runtime_frame()) {
 251           RegisterMap map((JavaThread*)t, false); // No update
 252           fr = fr.sender(&map);
 253         } else {
 254           // is_first_C_frame() does only simple checks for frame pointer,
 255           // it will pass if java compiled code has a pointer in EBP.
 256           if (os::is_first_C_frame(&fr)) break;
 257           fr = os::get_sender_for_C_frame(&fr);
 258         }
 259       } else {
 260         if (os::is_first_C_frame(&fr)) break;
 261         fr = os::get_sender_for_C_frame(&fr);
 262       }
 263     }
 264 
 265     if (count > StackPrintLimit) {
 266       st->print_cr("...<more frames>...");
 267     }
 268 
 269     st->cr();
 270   }
 271 }
 272 
 273 static void print_oom_reasons(outputStream* st) {
 274   st->print_cr("# Possible reasons:");
 275   st->print_cr("#   The system is out of physical RAM or swap space");
 276   if (UseCompressedOops) {
 277     st->print_cr("#   The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap");
 278   }
 279   if (LogBytesPerWord == 2) {
 280     st->print_cr("#   In 32 bit mode, the process size limit was hit");
 281   }
 282   st->print_cr("# Possible solutions:");
 283   st->print_cr("#   Reduce memory load on the system");
 284   st->print_cr("#   Increase physical memory or swap space");
 285   st->print_cr("#   Check if swap backing store is full");
 286   if (LogBytesPerWord == 2) {
 287     st->print_cr("#   Use 64 bit Java on a 64 bit OS");
 288   }
 289   st->print_cr("#   Decrease Java heap size (-Xmx/-Xms)");
 290   st->print_cr("#   Decrease number of Java threads");
 291   st->print_cr("#   Decrease Java thread stack sizes (-Xss)");
 292   st->print_cr("#   Set larger code cache with -XX:ReservedCodeCacheSize=");
 293   if (UseCompressedOops) {
 294     switch (Universe::narrow_oop_mode()) {
 295       case Universe::UnscaledNarrowOop:
 296         st->print_cr("#   JVM is running with Unscaled Compressed Oops mode in which the Java heap is");
 297         st->print_cr("#     placed in the first 4GB address space. The Java Heap base address is the");
 298         st->print_cr("#     maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress");
 299         st->print_cr("#     to set the Java Heap base and to place the Java Heap above 4GB virtual address.");
 300         break;
 301       case Universe::ZeroBasedNarrowOop:
 302         st->print_cr("#   JVM is running with Zero Based Compressed Oops mode in which the Java heap is");
 303         st->print_cr("#     placed in the first 32GB address space. The Java Heap base address is the");
 304         st->print_cr("#     maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress");
 305         st->print_cr("#     to set the Java Heap base and to place the Java Heap above 32GB virtual address.");
 306         break;
 307       default:
 308         break;
 309     }
 310   }
 311   st->print_cr("# This output file may be truncated or incomplete.");
 312 }
 313 
 314 static void report_vm_version(outputStream* st, char* buf, int buflen) {
 315    // VM version
 316    st->print_cr("#");
 317    JDK_Version::current().to_string(buf, buflen);
 318    const char* runtime_name = JDK_Version::runtime_name() != NULL ?
 319                                 JDK_Version::runtime_name() : "";
 320    const char* runtime_version = JDK_Version::runtime_version() != NULL ?
 321                                    JDK_Version::runtime_version() : "";
 322    const char* jdk_debug_level = VM_Version::printable_jdk_debug_level() != NULL ?
 323                                    VM_Version::printable_jdk_debug_level() : "";
 324 
 325    st->print_cr("# JRE version: %s (%s) (%sbuild %s)", runtime_name, buf,
 326                  jdk_debug_level, runtime_version);
 327 
 328    // This is the long version with some default settings added
 329    st->print_cr("# Java VM: %s (%s%s, %s%s%s%s%s, %s, %s)",
 330                  VM_Version::vm_name(),
 331                  jdk_debug_level,
 332                  VM_Version::vm_release(),
 333                  VM_Version::vm_info_string(),
 334                  TieredCompilation ? ", tiered" : "",
 335 #if INCLUDE_JVMCI
 336                  EnableJVMCI ? ", jvmci" : "",
 337                  UseJVMCICompiler ? ", jvmci compiler" : "",
 338 #else
 339                  "", "",
 340 #endif
 341                  UseCompressedOops ? ", compressed oops" : "",
 342                  GCConfig::hs_err_name(),
 343                  VM_Version::vm_platform_string()
 344                );
 345 }
 346 
 347 // This is the main function to report a fatal error. Only one thread can
 348 // call this function, so we don't need to worry about MT-safety. But it's
 349 // possible that the error handler itself may crash or die on an internal
 350 // error, for example, when the stack/heap is badly damaged. We must be
 351 // able to handle recursive errors that happen inside error handler.
 352 //
 353 // Error reporting is done in several steps. If a crash or internal error
 354 // occurred when reporting an error, the nested signal/exception handler
 355 // can skip steps that are already (or partially) done. Error reporting will
 356 // continue from the next step. This allows us to retrieve and print
 357 // information that may be unsafe to get after a fatal error. If it happens,
 358 // you may find nested report_and_die() frames when you look at the stack
 359 // in a debugger.
 360 //
 361 // In general, a hang in error handler is much worse than a crash or internal
 362 // error, as it's harder to recover from a hang. Deadlock can happen if we
 363 // try to grab a lock that is already owned by current thread, or if the
 364 // owner is blocked forever (e.g. in os::infinite_sleep()). If possible, the
 365 // error handler and all the functions it called should avoid grabbing any
 366 // lock. An important thing to notice is that memory allocation needs a lock.
 367 //
 368 // We should avoid using large stack allocated buffers. Many errors happen
 369 // when stack space is already low. Making things even worse is that there
 370 // could be nested report_and_die() calls on stack (see above). Only one
 371 // thread can report error, so large buffers are statically allocated in data
 372 // segment.
 373 
 374 int          VMError::_current_step;
 375 const char*  VMError::_current_step_info;
 376 
 377 volatile jlong VMError::_reporting_start_time = -1;
 378 volatile bool VMError::_reporting_did_timeout = false;
 379 volatile jlong VMError::_step_start_time = -1;
 380 volatile bool VMError::_step_did_timeout = false;
 381 
 382 // Helper, return current timestamp for timeout handling.
 383 jlong VMError::get_current_timestamp() {
 384   return os::javaTimeNanos();
 385 }
 386 // Factor to translate the timestamp to seconds.
 387 #define TIMESTAMP_TO_SECONDS_FACTOR (1000 * 1000 * 1000)
 388 
 389 void VMError::record_reporting_start_time() {
 390   const jlong now = get_current_timestamp();
 391   Atomic::store(now, &_reporting_start_time);
 392 }
 393 
 394 jlong VMError::get_reporting_start_time() {
 395   return Atomic::load(&_reporting_start_time);
 396 }
 397 
 398 void VMError::record_step_start_time() {
 399   const jlong now = get_current_timestamp();
 400   Atomic::store(now, &_step_start_time);
 401 }
 402 
 403 jlong VMError::get_step_start_time() {
 404   return Atomic::load(&_step_start_time);
 405 }
 406 
 407 void VMError::report(outputStream* st, bool _verbose) {
 408 
 409 # define BEGIN if (_current_step == 0) { _current_step = __LINE__;
 410 # define STEP(s) } if (_current_step < __LINE__) { _current_step = __LINE__; _current_step_info = s; \
 411   record_step_start_time(); _step_did_timeout = false;
 412 # define END }
 413 
 414   // don't allocate large buffer on stack
 415   static char buf[O_BUFLEN];
 416 
 417   BEGIN
 418 
 419   STEP("printing fatal error message")
 420 
 421     st->print_cr("#");
 422     if (should_report_bug(_id)) {
 423       st->print_cr("# A fatal error has been detected by the Java Runtime Environment:");
 424     } else {
 425       st->print_cr("# There is insufficient memory for the Java "
 426                    "Runtime Environment to continue.");
 427     }
 428 
 429 #ifndef PRODUCT
 430   // Error handler self tests
 431 
 432   // test secondary error handling. Test it twice, to test that resetting
 433   // error handler after a secondary crash works.
 434   STEP("test secondary crash 1")
 435     if (_verbose && TestCrashInErrorHandler != 0) {
 436       st->print_cr("Will crash now (TestCrashInErrorHandler=" UINTX_FORMAT ")...",
 437         TestCrashInErrorHandler);
 438       controlled_crash(TestCrashInErrorHandler);
 439     }
 440 
 441   STEP("test secondary crash 2")
 442     if (_verbose && TestCrashInErrorHandler != 0) {
 443       st->print_cr("Will crash now (TestCrashInErrorHandler=" UINTX_FORMAT ")...",
 444         TestCrashInErrorHandler);
 445       controlled_crash(TestCrashInErrorHandler);
 446     }
 447 
 448   // TestUnresponsiveErrorHandler: We want to test both step timeouts and global timeout.
 449   // Step to global timeout ratio is 4:1, so in order to be absolutely sure we hit the
 450   // global timeout, let's execute the timeout step five times.
 451   // See corresponding test in test/runtime/ErrorHandling/TimeoutInErrorHandlingTest.java
 452   #define TIMEOUT_TEST_STEP STEP("test unresponsive error reporting step") \
 453     if (_verbose && TestUnresponsiveErrorHandler) { os::infinite_sleep(); }
 454   TIMEOUT_TEST_STEP
 455   TIMEOUT_TEST_STEP
 456   TIMEOUT_TEST_STEP
 457   TIMEOUT_TEST_STEP
 458   TIMEOUT_TEST_STEP
 459 
 460   STEP("test safefetch in error handler")
 461     // test whether it is safe to use SafeFetch32 in Crash Handler. Test twice
 462     // to test that resetting the signal handler works correctly.
 463     if (_verbose && TestSafeFetchInErrorHandler) {
 464       st->print_cr("Will test SafeFetch...");
 465       if (CanUseSafeFetch32()) {
 466         int* const invalid_pointer = (int*) get_segfault_address();
 467         const int x = 0x76543210;
 468         int i1 = SafeFetch32(invalid_pointer, x);
 469         int i2 = SafeFetch32(invalid_pointer, x);
 470         if (i1 == x && i2 == x) {
 471           st->print_cr("SafeFetch OK."); // Correctly deflected and returned default pattern
 472         } else {
 473           st->print_cr("??");
 474         }
 475       } else {
 476         st->print_cr("not possible; skipped.");
 477       }
 478     }
 479 #endif // PRODUCT
 480 
 481   STEP("printing type of error")
 482 
 483      switch(static_cast<unsigned int>(_id)) {
 484        case OOM_MALLOC_ERROR:
 485        case OOM_MMAP_ERROR:
 486          if (_size) {
 487            st->print("# Native memory allocation ");
 488            st->print((_id == (int)OOM_MALLOC_ERROR) ? "(malloc) failed to allocate " :
 489                                                  "(mmap) failed to map ");
 490            jio_snprintf(buf, sizeof(buf), SIZE_FORMAT, _size);
 491            st->print("%s", buf);
 492            st->print(" bytes");
 493            if (strlen(_detail_msg) > 0) {
 494              st->print(" for ");
 495              st->print("%s", _detail_msg);
 496            }
 497            st->cr();
 498          } else {
 499            if (strlen(_detail_msg) > 0) {
 500              st->print("# ");
 501              st->print_cr("%s", _detail_msg);
 502            }
 503          }
 504          // In error file give some solutions
 505          if (_verbose) {
 506            print_oom_reasons(st);
 507          } else {
 508            return;  // that's enough for the screen
 509          }
 510          break;
 511        case INTERNAL_ERROR:
 512        default:
 513          break;
 514      }
 515 
 516   STEP("printing exception/signal name")
 517 
 518      st->print_cr("#");
 519      st->print("#  ");
 520      // Is it an OS exception/signal?
 521      if (os::exception_name(_id, buf, sizeof(buf))) {
 522        st->print("%s", buf);
 523        st->print(" (0x%x)", _id);                // signal number
 524        st->print(" at pc=" PTR_FORMAT, p2i(_pc));
 525        if (_siginfo != NULL && os::signal_sent_by_kill(_siginfo)) {
 526          st->print(" (sent by kill)");
 527        }
 528      } else {
 529        if (should_report_bug(_id)) {
 530          st->print("Internal Error");
 531        } else {
 532          st->print("Out of Memory Error");
 533        }
 534        if (_filename != NULL && _lineno > 0) {
 535 #ifdef PRODUCT
 536          // In product mode chop off pathname?
 537          char separator = os::file_separator()[0];
 538          const char *p = strrchr(_filename, separator);
 539          const char *file = p ? p+1 : _filename;
 540 #else
 541          const char *file = _filename;
 542 #endif
 543          st->print(" (%s:%d)", file, _lineno);
 544        } else {
 545          st->print(" (0x%x)", _id);
 546        }
 547      }
 548 
 549   STEP("printing current thread and pid")
 550 
 551      // process id, thread id
 552      st->print(", pid=%d", os::current_process_id());
 553      st->print(", tid=" UINTX_FORMAT, os::current_thread_id());
 554      st->cr();
 555 
 556   STEP("printing error message")
 557 
 558      if (should_report_bug(_id)) {  // already printed the message.
 559        // error message
 560        if (strlen(_detail_msg) > 0) {
 561          st->print_cr("#  %s: %s", _message ? _message : "Error", _detail_msg);
 562        } else if (_message) {
 563          st->print_cr("#  Error: %s", _message);
 564        }
 565      }
 566 
 567   STEP("printing Java version string")
 568 
 569      report_vm_version(st, buf, sizeof(buf));
 570 
 571   STEP("printing problematic frame")
 572 
 573      // Print current frame if we have a context (i.e. it's a crash)
 574      if (_context) {
 575        st->print_cr("# Problematic frame:");
 576        st->print("# ");
 577        frame fr = os::fetch_frame_from_context(_context);
 578        fr.print_on_error(st, buf, sizeof(buf));
 579        st->cr();
 580        st->print_cr("#");
 581      }
 582 
 583   STEP("printing core file information")
 584     st->print("# ");
 585     if (CreateCoredumpOnCrash) {
 586       if (coredump_status) {
 587         st->print("Core dump will be written. Default location: %s", coredump_message);
 588       } else {
 589         st->print("No core dump will be written. %s", coredump_message);
 590       }
 591     } else {
 592       st->print("CreateCoredumpOnCrash turned off, no core file dumped");
 593     }
 594     st->cr();
 595     st->print_cr("#");
 596 
 597   STEP("printing bug submit message")
 598 
 599      if (should_report_bug(_id) && _verbose) {
 600        print_bug_submit_message(st, _thread);
 601      }
 602 
 603   STEP("printing summary")
 604 
 605      if (_verbose) {
 606        st->cr();
 607        st->print_cr("---------------  S U M M A R Y ------------");
 608        st->cr();
 609      }
 610 
 611   STEP("printing VM option summary")
 612 
 613      if (_verbose) {
 614        // VM options
 615        Arguments::print_summary_on(st);
 616        st->cr();
 617      }
 618 
 619   STEP("printing summary machine and OS info")
 620 
 621      if (_verbose) {
 622        os::print_summary_info(st, buf, sizeof(buf));
 623      }
 624 
 625 
 626   STEP("printing date and time")
 627 
 628      if (_verbose) {
 629        os::print_date_and_time(st, buf, sizeof(buf));
 630      }
 631 
 632   STEP("printing thread")
 633 
 634      if (_verbose) {
 635        st->cr();
 636        st->print_cr("---------------  T H R E A D  ---------------");
 637        st->cr();
 638      }
 639 
 640   STEP("printing current thread")
 641 
 642      // current thread
 643      if (_verbose) {
 644        if (_thread) {
 645          st->print("Current thread (" PTR_FORMAT "):  ", p2i(_thread));
 646          _thread->print_on_error(st, buf, sizeof(buf));
 647          st->cr();
 648        } else {
 649          st->print_cr("Current thread is native thread");
 650        }
 651        st->cr();
 652      }
 653 
 654   STEP("printing current compile task")
 655 
 656      if (_verbose && _thread && _thread->is_Compiler_thread()) {
 657         CompilerThread* t = (CompilerThread*)_thread;
 658         if (t->task()) {
 659            st->cr();
 660            st->print_cr("Current CompileTask:");
 661            t->task()->print_line_on_error(st, buf, sizeof(buf));
 662            st->cr();
 663         }
 664      }
 665 
 666 
 667   STEP("printing stack bounds")
 668 
 669      if (_verbose) {
 670        st->print("Stack: ");
 671 
 672        address stack_top;
 673        size_t stack_size;
 674 
 675        if (_thread) {
 676           stack_top = _thread->stack_base();
 677           stack_size = _thread->stack_size();
 678        } else {
 679           stack_top = os::current_stack_base();
 680           stack_size = os::current_stack_size();
 681        }
 682 
 683        address stack_bottom = stack_top - stack_size;
 684        st->print("[" PTR_FORMAT "," PTR_FORMAT "]", p2i(stack_bottom), p2i(stack_top));
 685 
 686        frame fr = _context ? os::fetch_frame_from_context(_context)
 687                            : os::current_frame();
 688 
 689        if (fr.sp()) {
 690          st->print(",  sp=" PTR_FORMAT, p2i(fr.sp()));
 691          size_t free_stack_size = pointer_delta(fr.sp(), stack_bottom, 1024);
 692          st->print(",  free space=" SIZE_FORMAT "k", free_stack_size);
 693        }
 694 
 695        st->cr();
 696      }
 697 
 698   STEP("printing native stack")
 699 
 700    if (_verbose) {
 701      if (os::platform_print_native_stack(st, _context, buf, sizeof(buf))) {
 702        // We have printed the native stack in platform-specific code
 703        // Windows/x64 needs special handling.
 704      } else {
 705        frame fr = _context ? os::fetch_frame_from_context(_context)
 706                            : os::current_frame();
 707 
 708        print_native_stack(st, fr, _thread, buf, sizeof(buf));
 709      }
 710    }
 711 
 712   STEP("printing Java stack")
 713 
 714      if (_verbose && _thread && _thread->is_Java_thread()) {
 715        print_stack_trace(st, (JavaThread*)_thread, buf, sizeof(buf));
 716      }
 717 
 718   STEP("printing target Java thread stack")
 719 
 720      // printing Java thread stack trace if it is involved in GC crash
 721      if (_verbose && _thread && (_thread->is_Named_thread())) {
 722        JavaThread*  jt = ((NamedThread *)_thread)->processed_thread();
 723        if (jt != NULL) {
 724          st->print_cr("JavaThread " PTR_FORMAT " (nid = %d) was being processed", p2i(jt), jt->osthread()->thread_id());
 725          print_stack_trace(st, jt, buf, sizeof(buf), true);
 726        }
 727      }
 728 
 729   STEP("printing siginfo")
 730 
 731      // signal no, signal code, address that caused the fault
 732      if (_verbose && _siginfo) {
 733        st->cr();
 734        os::print_siginfo(st, _siginfo);
 735        st->cr();
 736      }
 737 
 738   STEP("CDS archive access warning")
 739 
 740      // Print an explicit hint if we crashed on access to the CDS archive.
 741      if (_verbose && _siginfo) {
 742        check_failing_cds_access(st, _siginfo);
 743        st->cr();
 744      }
 745 
 746   STEP("printing register info")
 747 
 748      // decode register contents if possible
 749      if (_verbose && _context && Universe::is_fully_initialized()) {
 750        os::print_register_info(st, _context);
 751        st->cr();
 752      }
 753 
 754   STEP("printing registers, top of stack, instructions near pc")
 755 
 756      // registers, top of stack, instructions near pc
 757      if (_verbose && _context) {
 758        os::print_context(st, _context);
 759        st->cr();
 760      }
 761 
 762   STEP("inspecting top of stack")
 763 
 764      // decode stack contents if possible
 765      if (_verbose && _context && Universe::is_fully_initialized()) {
 766        frame fr = os::fetch_frame_from_context(_context);
 767        const int slots = 8;
 768        const intptr_t *start = fr.sp();
 769        const intptr_t *end = start + slots;
 770        if (is_aligned(start, sizeof(intptr_t)) && os::is_readable_range(start, end)) {
 771          st->print_cr("Stack slot to memory mapping:");
 772          for (int i = 0; i < slots; ++i) {
 773            st->print("stack at sp + %d slots: ", i);
 774            os::print_location(st, *(start + i));
 775          }
 776        }
 777        st->cr();
 778      }
 779 
 780   STEP("printing code blob if possible")
 781 
 782      if (_verbose && _context) {
 783        CodeBlob* cb = CodeCache::find_blob(_pc);
 784        if (cb != NULL) {
 785          if (Interpreter::contains(_pc)) {
 786            // The interpreter CodeBlob is very large so try to print the codelet instead.
 787            InterpreterCodelet* codelet = Interpreter::codelet_containing(_pc);
 788            if (codelet != NULL) {
 789              codelet->print_on(st);
 790              Disassembler::decode(codelet->code_begin(), codelet->code_end(), st);
 791            }
 792          } else {
 793            StubCodeDesc* desc = StubCodeDesc::desc_for(_pc);
 794            if (desc != NULL) {
 795              desc->print_on(st);
 796              Disassembler::decode(desc->begin(), desc->end(), st);
 797            } else if (_thread != NULL) {
 798              // Disassembling nmethod will incur resource memory allocation,
 799              // only do so when thread is valid.
 800              ResourceMark rm(_thread);
 801              Disassembler::decode(cb, st);
 802              st->cr();
 803            }
 804          }
 805        }
 806      }
 807 
 808   STEP("printing VM operation")
 809 
 810      if (_verbose && _thread && _thread->is_VM_thread()) {
 811         VMThread* t = (VMThread*)_thread;
 812         VM_Operation* op = t->vm_operation();
 813         if (op) {
 814           op->print_on_error(st);
 815           st->cr();
 816           st->cr();
 817         }
 818      }
 819 
 820   STEP("printing process")
 821 
 822      if (_verbose) {
 823        st->cr();
 824        st->print_cr("---------------  P R O C E S S  ---------------");
 825        st->cr();
 826      }
 827 
 828 #ifndef _WIN32
 829   STEP("printing user info")
 830 
 831      if (ExtensiveErrorReports && _verbose) {
 832        os::Posix::print_user_info(st);
 833      }
 834 #endif
 835 
 836   STEP("printing all threads")
 837 
 838      // all threads
 839      if (_verbose && _thread) {
 840        Threads::print_on_error(st, _thread, buf, sizeof(buf));
 841        st->cr();
 842      }
 843 
 844   STEP("printing VM state")
 845 
 846      if (_verbose) {
 847        // Safepoint state
 848        st->print("VM state:");
 849 
 850        if (SafepointSynchronize::is_synchronizing()) st->print("synchronizing");
 851        else if (SafepointSynchronize::is_at_safepoint()) st->print("at safepoint");
 852        else st->print("not at safepoint");
 853 
 854        // Also see if error occurred during initialization or shutdown
 855        if (!Universe::is_fully_initialized()) {
 856          st->print(" (not fully initialized)");
 857        } else if (VM_Exit::vm_exited()) {
 858          st->print(" (shutting down)");
 859        } else {
 860          st->print(" (normal execution)");
 861        }
 862        st->cr();
 863        st->cr();
 864      }
 865 
 866   STEP("printing owned locks on error")
 867 
 868      // mutexes/monitors that currently have an owner
 869      if (_verbose) {
 870        print_owned_locks_on_error(st);
 871        st->cr();
 872      }
 873 
 874   STEP("printing number of OutOfMemoryError and StackOverflow exceptions")
 875 
 876      if (_verbose && Exceptions::has_exception_counts()) {
 877        st->print_cr("OutOfMemory and StackOverflow Exception counts:");
 878        Exceptions::print_exception_counts_on_error(st);
 879        st->cr();
 880      }
 881 
 882   STEP("printing compressed oops mode")
 883 
 884      if (_verbose && UseCompressedOops) {
 885        Universe::print_compressed_oops_mode(st);
 886        if (UseCompressedClassPointers) {
 887          Metaspace::print_compressed_class_space(st);
 888        }
 889        st->cr();
 890      }
 891 
 892   STEP("printing heap information")
 893 
 894      if (_verbose && Universe::is_fully_initialized()) {
 895        Universe::heap()->print_on_error(st);
 896        st->cr();
 897        st->print_cr("Polling page: " INTPTR_FORMAT, p2i(os::get_polling_page()));
 898        st->cr();
 899      }
 900 
 901   STEP("printing metaspace information")
 902 
 903      if (_verbose && Universe::is_fully_initialized()) {
 904        st->print_cr("Metaspace:");
 905        MetaspaceUtils::print_basic_report(st, 0);
 906      }
 907 
 908   STEP("printing code cache information")
 909 
 910      if (_verbose && Universe::is_fully_initialized()) {
 911        // print code cache information before vm abort
 912        CodeCache::print_summary(st);
 913        st->cr();
 914      }
 915 
 916   STEP("printing ring buffers")
 917 
 918      if (_verbose) {
 919        Events::print_all(st);
 920        st->cr();
 921      }
 922 
 923   STEP("printing dynamic libraries")
 924 
 925      if (_verbose) {
 926        // dynamic libraries, or memory map
 927        os::print_dll_info(st);
 928        st->cr();
 929      }
 930 
 931   STEP("printing native decoder state")
 932 
 933      if (_verbose) {
 934        Decoder::print_state_on(st);
 935        st->cr();
 936      }
 937 
 938   STEP("printing VM options")
 939 
 940      if (_verbose) {
 941        // VM options
 942        Arguments::print_on(st);
 943        st->cr();
 944      }
 945 
 946   STEP("printing flags")
 947 
 948     if (_verbose) {
 949       JVMFlag::printFlags(
 950         st,
 951         true, // with comments
 952         false, // no ranges
 953         true); // skip defaults
 954       st->cr();
 955     }
 956 
 957   STEP("printing warning if internal testing API used")
 958 
 959      if (WhiteBox::used()) {
 960        st->print_cr("Unsupported internal testing APIs have been used.");
 961        st->cr();
 962      }
 963 
 964   STEP("printing log configuration")
 965     if (_verbose){
 966       st->print_cr("Logging:");
 967       LogConfiguration::describe_current_configuration(st);
 968       st->cr();
 969     }
 970 
 971   STEP("printing all environment variables")
 972 
 973      if (_verbose) {
 974        os::print_environment_variables(st, env_list);
 975        st->cr();
 976      }
 977 
 978   STEP("printing signal handlers")
 979 
 980      if (_verbose) {
 981        os::print_signal_handlers(st, buf, sizeof(buf));
 982        st->cr();
 983      }
 984 
 985   STEP("Native Memory Tracking")
 986      if (_verbose) {
 987        MemTracker::error_report(st);
 988      }
 989 
 990   STEP("printing system")
 991 
 992      if (_verbose) {
 993        st->cr();
 994        st->print_cr("---------------  S Y S T E M  ---------------");
 995        st->cr();
 996      }
 997 
 998   STEP("printing OS information")
 999 
1000      if (_verbose) {
1001        os::print_os_info(st);
1002        st->cr();
1003      }
1004 
1005   STEP("printing CPU info")
1006      if (_verbose) {
1007        os::print_cpu_info(st, buf, sizeof(buf));
1008        st->cr();
1009      }
1010 
1011   STEP("printing memory info")
1012 
1013      if (_verbose) {
1014        os::print_memory_info(st);
1015        st->cr();
1016      }
1017 
1018   STEP("printing internal vm info")
1019 
1020      if (_verbose) {
1021        st->print_cr("vm_info: %s", VM_Version::internal_vm_info_string());
1022        st->cr();
1023      }
1024 
1025   // print a defined marker to show that error handling finished correctly.
1026   STEP("printing end marker")
1027 
1028      if (_verbose) {
1029        st->print_cr("END.");
1030      }
1031 
1032   END
1033 
1034 # undef BEGIN
1035 # undef STEP
1036 # undef END
1037 }
1038 
1039 // Report for the vm_info_cmd. This prints out the information above omitting
1040 // crash and thread specific information.  If output is added above, it should be added
1041 // here also, if it is safe to call during a running process.
1042 void VMError::print_vm_info(outputStream* st) {
1043 
1044   char buf[O_BUFLEN];
1045   report_vm_version(st, buf, sizeof(buf));
1046 
1047   // STEP("printing summary")
1048 
1049   st->cr();
1050   st->print_cr("---------------  S U M M A R Y ------------");
1051   st->cr();
1052 
1053   // STEP("printing VM option summary")
1054 
1055   // VM options
1056   Arguments::print_summary_on(st);
1057   st->cr();
1058 
1059   // STEP("printing summary machine and OS info")
1060 
1061   os::print_summary_info(st, buf, sizeof(buf));
1062 
1063   // STEP("printing date and time")
1064 
1065   os::print_date_and_time(st, buf, sizeof(buf));
1066 
1067   // Skip: STEP("printing thread")
1068 
1069   // STEP("printing process")
1070 
1071   st->cr();
1072   st->print_cr("---------------  P R O C E S S  ---------------");
1073   st->cr();
1074 
1075   // STEP("printing number of OutOfMemoryError and StackOverflow exceptions")
1076 
1077   if (Exceptions::has_exception_counts()) {
1078     st->print_cr("OutOfMemory and StackOverflow Exception counts:");
1079     Exceptions::print_exception_counts_on_error(st);
1080     st->cr();
1081   }
1082 
1083   // STEP("printing compressed oops mode")
1084 
1085   if (UseCompressedOops) {
1086     Universe::print_compressed_oops_mode(st);
1087     if (UseCompressedClassPointers) {
1088       Metaspace::print_compressed_class_space(st);
1089     }
1090     st->cr();
1091   }
1092 
1093   // STEP("printing heap information")
1094 
1095   if (Universe::is_fully_initialized()) {
1096     MutexLocker hl(Heap_lock);
1097     Universe::heap()->print_on_error(st);
1098     st->cr();
1099     st->print_cr("Polling page: " INTPTR_FORMAT, p2i(os::get_polling_page()));
1100     st->cr();
1101   }
1102 
1103   // STEP("printing metaspace information")
1104 
1105   if (Universe::is_fully_initialized()) {
1106     st->print_cr("Metaspace:");
1107     MetaspaceUtils::print_basic_report(st, 0);
1108   }
1109 
1110   // STEP("printing code cache information")
1111 
1112   if (Universe::is_fully_initialized()) {
1113     // print code cache information before vm abort
1114     CodeCache::print_summary(st);
1115     st->cr();
1116   }
1117 
1118   // STEP("printing ring buffers")
1119 
1120   Events::print_all(st);
1121   st->cr();
1122 
1123   // STEP("printing dynamic libraries")
1124 
1125   // dynamic libraries, or memory map
1126   os::print_dll_info(st);
1127   st->cr();
1128 
1129   // STEP("printing VM options")
1130 
1131   // VM options
1132   Arguments::print_on(st);
1133   st->cr();
1134 
1135   // STEP("printing warning if internal testing API used")
1136 
1137   if (WhiteBox::used()) {
1138     st->print_cr("Unsupported internal testing APIs have been used.");
1139     st->cr();
1140   }
1141 
1142   // STEP("printing log configuration")
1143   st->print_cr("Logging:");
1144   LogConfiguration::describe(st);
1145   st->cr();
1146 
1147   // STEP("printing all environment variables")
1148 
1149   os::print_environment_variables(st, env_list);
1150   st->cr();
1151 
1152   // STEP("printing signal handlers")
1153 
1154   os::print_signal_handlers(st, buf, sizeof(buf));
1155   st->cr();
1156 
1157   // STEP("Native Memory Tracking")
1158 
1159   MemTracker::error_report(st);
1160 
1161   // STEP("printing system")
1162 
1163   st->cr();
1164   st->print_cr("---------------  S Y S T E M  ---------------");
1165   st->cr();
1166 
1167   // STEP("printing OS information")
1168 
1169   os::print_os_info(st);
1170   st->cr();
1171 
1172   // STEP("printing CPU info")
1173 
1174   os::print_cpu_info(st, buf, sizeof(buf));
1175   st->cr();
1176 
1177   // STEP("printing memory info")
1178 
1179   os::print_memory_info(st);
1180   st->cr();
1181 
1182   // STEP("printing internal vm info")
1183 
1184   st->print_cr("vm_info: %s", VM_Version::internal_vm_info_string());
1185   st->cr();
1186 
1187   // print a defined marker to show that error handling finished correctly.
1188   // STEP("printing end marker")
1189 
1190   st->print_cr("END.");
1191 }
1192 
1193 volatile intptr_t VMError::first_error_tid = -1;
1194 
1195 /** Expand a pattern into a buffer starting at pos and open a file using constructed path */
1196 static int expand_and_open(const char* pattern, char* buf, size_t buflen, size_t pos) {
1197   int fd = -1;
1198   if (Arguments::copy_expand_pid(pattern, strlen(pattern), &buf[pos], buflen - pos)) {
1199     // the O_EXCL flag will cause the open to fail if the file exists
1200     fd = open(buf, O_RDWR | O_CREAT | O_EXCL, 0666);
1201   }
1202   return fd;
1203 }
1204 
1205 /**
1206  * Construct file name for a log file and return it's file descriptor.
1207  * Name and location depends on pattern, default_pattern params and access
1208  * permissions.
1209  */
1210 static int prepare_log_file(const char* pattern, const char* default_pattern, char* buf, size_t buflen) {
1211   int fd = -1;
1212 
1213   // If possible, use specified pattern to construct log file name
1214   if (pattern != NULL) {
1215     fd = expand_and_open(pattern, buf, buflen, 0);
1216   }
1217 
1218   // Either user didn't specify, or the user's location failed,
1219   // so use the default name in the current directory
1220   if (fd == -1) {
1221     const char* cwd = os::get_current_directory(buf, buflen);
1222     if (cwd != NULL) {
1223       size_t pos = strlen(cwd);
1224       int fsep_len = jio_snprintf(&buf[pos], buflen-pos, "%s", os::file_separator());
1225       pos += fsep_len;
1226       if (fsep_len > 0) {
1227         fd = expand_and_open(default_pattern, buf, buflen, pos);
1228       }
1229     }
1230   }
1231 
1232    // try temp directory if it exists.
1233    if (fd == -1) {
1234      const char* tmpdir = os::get_temp_directory();
1235      if (tmpdir != NULL && strlen(tmpdir) > 0) {
1236        int pos = jio_snprintf(buf, buflen, "%s%s", tmpdir, os::file_separator());
1237        if (pos > 0) {
1238          fd = expand_and_open(default_pattern, buf, buflen, pos);
1239        }
1240      }
1241    }
1242 
1243   return fd;
1244 }
1245 
1246 int         VMError::_id;
1247 const char* VMError::_message;
1248 char        VMError::_detail_msg[1024];
1249 Thread*     VMError::_thread;
1250 address     VMError::_pc;
1251 void*       VMError::_siginfo;
1252 void*       VMError::_context;
1253 const char* VMError::_filename;
1254 int         VMError::_lineno;
1255 size_t      VMError::_size;
1256 
1257 void VMError::report_and_die(Thread* thread, unsigned int sig, address pc, void* siginfo,
1258                              void* context, const char* detail_fmt, ...)
1259 {
1260   va_list detail_args;
1261   va_start(detail_args, detail_fmt);
1262   report_and_die(sig, NULL, detail_fmt, detail_args, thread, pc, siginfo, context, NULL, 0, 0);
1263   va_end(detail_args);
1264 }
1265 
1266 void VMError::report_and_die(Thread* thread, unsigned int sig, address pc, void* siginfo, void* context)
1267 {
1268   report_and_die(thread, sig, pc, siginfo, context, "%s", "");
1269 }
1270 
1271 void VMError::report_and_die(const char* message, const char* detail_fmt, ...)
1272 {
1273   va_list detail_args;
1274   va_start(detail_args, detail_fmt);
1275   report_and_die(INTERNAL_ERROR, message, detail_fmt, detail_args, NULL, NULL, NULL, NULL, NULL, 0, 0);
1276   va_end(detail_args);
1277 }
1278 
1279 void VMError::report_and_die(const char* message)
1280 {
1281   report_and_die(message, "%s", "");
1282 }
1283 
1284 void VMError::report_and_die(Thread* thread, void* context, const char* filename, int lineno, const char* message,
1285                              const char* detail_fmt, va_list detail_args)
1286 {
1287   report_and_die(INTERNAL_ERROR, message, detail_fmt, detail_args, thread, NULL, NULL, context, filename, lineno, 0);
1288 }
1289 
1290 void VMError::report_and_die(Thread* thread, const char* filename, int lineno, size_t size,
1291                              VMErrorType vm_err_type, const char* detail_fmt, va_list detail_args) {
1292   report_and_die(vm_err_type, NULL, detail_fmt, detail_args, thread, NULL, NULL, NULL, filename, lineno, size);
1293 }
1294 
1295 void VMError::report_and_die(int id, const char* message, const char* detail_fmt, va_list detail_args,
1296                              Thread* thread, address pc, void* siginfo, void* context, const char* filename,
1297                              int lineno, size_t size)
1298 {
1299   // A single scratch buffer to be used from here on.
1300   // Do not rely on it being preserved across function calls.
1301   static char buffer[O_BUFLEN];
1302 
1303   // File descriptor to tty to print an error summary to.
1304   // Hard wired to stdout; see JDK-8215004 (compatibility concerns).
1305   static const int fd_out = 1; // stdout
1306 
1307   // File descriptor to the error log file.
1308   static int fd_log = -1;
1309 
1310   // Use local fdStream objects only. Do not use global instances whose initialization
1311   // relies on dynamic initialization (see JDK-8214975). Do not rely on these instances
1312   // to carry over into recursions or invocations from other threads.
1313   fdStream out(fd_out);
1314   out.set_scratch_buffer(buffer, sizeof(buffer));
1315 
1316   // Depending on the re-entrance depth at this point, fd_log may be -1 or point to an open hs-err file.
1317   fdStream log(fd_log);
1318   log.set_scratch_buffer(buffer, sizeof(buffer));
1319 
1320   // How many errors occurred in error handler when reporting first_error.
1321   static int recursive_error_count;
1322 
1323   // We will first print a brief message to standard out (verbose = false),
1324   // then save detailed information in log file (verbose = true).
1325   static bool out_done = false;         // done printing to standard out
1326   static bool log_done = false;         // done saving error log
1327 
1328   if (SuppressFatalErrorMessage) {
1329       os::abort(CreateCoredumpOnCrash);
1330   }
1331   intptr_t mytid = os::current_thread_id();
1332   if (first_error_tid == -1 &&
1333       Atomic::cmpxchg(mytid, &first_error_tid, (intptr_t)-1) == -1) {
1334 
1335     // Initialize time stamps to use the same base.
1336     out.time_stamp().update_to(1);
1337     log.time_stamp().update_to(1);
1338 
1339     _id = id;
1340     _message = message;
1341     _thread = thread;
1342     _pc = pc;
1343     _siginfo = siginfo;
1344     _context = context;
1345     _filename = filename;
1346     _lineno = lineno;
1347     _size = size;
1348     jio_vsnprintf(_detail_msg, sizeof(_detail_msg), detail_fmt, detail_args);
1349 
1350     // first time
1351     _error_reported = true;
1352 
1353     reporting_started();
1354     record_reporting_start_time();
1355 
1356     if (ShowMessageBoxOnError || PauseAtExit) {
1357       show_message_box(buffer, sizeof(buffer));
1358 
1359       // User has asked JVM to abort. Reset ShowMessageBoxOnError so the
1360       // WatcherThread can kill JVM if the error handler hangs.
1361       ShowMessageBoxOnError = false;
1362     }
1363 
1364     os::check_dump_limit(buffer, sizeof(buffer));
1365 
1366     // reset signal handlers or exception filter; make sure recursive crashes
1367     // are handled properly.
1368     reset_signal_handlers();
1369 
1370     EventShutdown e;
1371     if (e.should_commit()) {
1372       e.set_reason("VM Error");
1373       e.commit();
1374     }
1375 
1376     JFR_ONLY(Jfr::on_vm_shutdown(true);)
1377 
1378   } else {
1379     // If UseOsErrorReporting we call this for each level of the call stack
1380     // while searching for the exception handler.  Only the first level needs
1381     // to be reported.
1382     if (UseOSErrorReporting && log_done) return;
1383 
1384     // This is not the first error, see if it happened in a different thread
1385     // or in the same thread during error reporting.
1386     if (first_error_tid != mytid) {
1387       char msgbuf[64];
1388       jio_snprintf(msgbuf, sizeof(msgbuf),
1389                    "[thread " INTX_FORMAT " also had an error]",
1390                    mytid);
1391       out.print_raw_cr(msgbuf);
1392 
1393       // error reporting is not MT-safe, block current thread
1394       os::infinite_sleep();
1395 
1396     } else {
1397       if (recursive_error_count++ > 30) {
1398         out.print_raw_cr("[Too many errors, abort]");
1399         os::die();
1400       }
1401 
1402       outputStream* const st = log.is_open() ? &log : &out;
1403       st->cr();
1404 
1405       // Timeout handling.
1406       if (_step_did_timeout) {
1407         // The current step had a timeout. Lets continue reporting with the next step.
1408         st->print_raw("[timeout occurred during error reporting in step \"");
1409         st->print_raw(_current_step_info);
1410         st->print_cr("\"] after " INT64_FORMAT " s.",
1411                      (int64_t)
1412                      ((get_current_timestamp() - _step_start_time) / TIMESTAMP_TO_SECONDS_FACTOR));
1413       } else if (_reporting_did_timeout) {
1414         // We hit ErrorLogTimeout. Reporting will stop altogether. Let's wrap things
1415         // up, the process is about to be stopped by the WatcherThread.
1416         st->print_cr("------ Timeout during error reporting after " INT64_FORMAT " s. ------",
1417                      (int64_t)
1418                      ((get_current_timestamp() - _reporting_start_time) / TIMESTAMP_TO_SECONDS_FACTOR));
1419         st->flush();
1420         // Watcherthread is about to call os::die. Lets just wait.
1421         os::infinite_sleep();
1422       } else {
1423         // Crash or assert during error reporting. Lets continue reporting with the next step.
1424         stringStream ss(buffer, sizeof(buffer));
1425         // Note: this string does get parsed by a number of jtreg tests,
1426         // see hotspot/jtreg/runtime/ErrorHandling.
1427         ss.print("[error occurred during error reporting (%s), id 0x%x",
1428                    _current_step_info, id);
1429         char signal_name[64];
1430         if (os::exception_name(id, signal_name, sizeof(signal_name))) {
1431           ss.print(", %s (0x%x) at pc=" PTR_FORMAT, signal_name, id, p2i(pc));
1432         } else {
1433           if (should_report_bug(id)) {
1434             ss.print(", Internal Error (%s:%d)",
1435               filename == NULL ? "??" : filename, lineno);
1436           } else {
1437             ss.print(", Out of Memory Error (%s:%d)",
1438               filename == NULL ? "??" : filename, lineno);
1439           }
1440         }
1441         ss.print("]");
1442         st->print_raw_cr(buffer);
1443         st->cr();
1444       }
1445     }
1446   }
1447 
1448   // print to screen
1449   if (!out_done) {
1450     report(&out, false);
1451 
1452     out_done = true;
1453 
1454     _current_step = 0;
1455     _current_step_info = "";
1456   }
1457 
1458   // print to error log file
1459   if (!log_done) {
1460     // see if log file is already open
1461     if (!log.is_open()) {
1462       // open log file
1463       fd_log = prepare_log_file(ErrorFile, "hs_err_pid%p.log", buffer, sizeof(buffer));
1464       if (fd_log != -1) {
1465         out.print_raw("# An error report file with more information is saved as:\n# ");
1466         out.print_raw_cr(buffer);
1467 
1468         log.set_fd(fd_log);
1469       } else {
1470         out.print_raw_cr("# Can not save log file, dump to screen..");
1471         log.set_fd(fd_out);
1472       }
1473     }
1474 
1475     report(&log, true);
1476     log_done = true;
1477     _current_step = 0;
1478     _current_step_info = "";
1479 
1480     if (fd_log != -1) {
1481       close(fd_log);
1482       fd_log = -1;
1483     }
1484 
1485     log.set_fd(-1);
1486   }
1487 
1488   static bool skip_replay = ReplayCompiles; // Do not overwrite file during replay
1489   if (DumpReplayDataOnError && _thread && _thread->is_Compiler_thread() && !skip_replay) {
1490     skip_replay = true;
1491     ciEnv* env = ciEnv::current();
1492     if (env != NULL) {
1493       int fd = prepare_log_file(ReplayDataFile, "replay_pid%p.log", buffer, sizeof(buffer));
1494       if (fd != -1) {
1495         FILE* replay_data_file = os::open(fd, "w");
1496         if (replay_data_file != NULL) {
1497           fileStream replay_data_stream(replay_data_file, /*need_close=*/true);
1498           env->dump_replay_data_unsafe(&replay_data_stream);
1499           out.print_raw("#\n# Compiler replay data is saved as:\n# ");
1500           out.print_raw_cr(buffer);
1501         } else {
1502           int e = errno;
1503           out.print_raw("#\n# Can't open file to dump replay data. Error: ");
1504           out.print_raw_cr(os::strerror(e));
1505         }
1506       }
1507     }
1508   }
1509 
1510   static bool skip_bug_url = !should_report_bug(_id);
1511   if (!skip_bug_url) {
1512     skip_bug_url = true;
1513 
1514     out.print_raw_cr("#");
1515     print_bug_submit_message(&out, _thread);
1516   }
1517 
1518   static bool skip_OnError = false;
1519   if (!skip_OnError && OnError && OnError[0]) {
1520     skip_OnError = true;
1521 
1522     // Flush output and finish logs before running OnError commands.
1523     ostream_abort();
1524 
1525     out.print_raw_cr("#");
1526     out.print_raw   ("# -XX:OnError=\"");
1527     out.print_raw   (OnError);
1528     out.print_raw_cr("\"");
1529 
1530     char* cmd;
1531     const char* ptr = OnError;
1532     while ((cmd = next_OnError_command(buffer, sizeof(buffer), &ptr)) != NULL){
1533       out.print_raw   ("#   Executing ");
1534 #if defined(LINUX) || defined(_ALLBSD_SOURCE)
1535       out.print_raw   ("/bin/sh -c ");
1536 #elif defined(SOLARIS)
1537       out.print_raw   ("/usr/bin/sh -c ");
1538 #elif defined(_WINDOWS)
1539       out.print_raw   ("cmd /C ");
1540 #endif
1541       out.print_raw   ("\"");
1542       out.print_raw   (cmd);
1543       out.print_raw_cr("\" ...");
1544 
1545       if (os::fork_and_exec(cmd) < 0) {
1546         out.print_cr("os::fork_and_exec failed: %s (%s=%d)",
1547                      os::strerror(errno), os::errno_name(errno), errno);
1548       }
1549     }
1550 
1551     // done with OnError
1552     OnError = NULL;
1553   }
1554 
1555   if (!UseOSErrorReporting) {
1556     // os::abort() will call abort hooks, try it first.
1557     static bool skip_os_abort = false;
1558     if (!skip_os_abort) {
1559       skip_os_abort = true;
1560       bool dump_core = should_report_bug(_id);
1561       os::abort(dump_core && CreateCoredumpOnCrash, _siginfo, _context);
1562     }
1563 
1564     // if os::abort() doesn't abort, try os::die();
1565     os::die();
1566   }
1567 }
1568 
1569 /*
1570  * OnOutOfMemoryError scripts/commands executed while VM is a safepoint - this
1571  * ensures utilities such as jmap can observe the process is a consistent state.
1572  */
1573 class VM_ReportJavaOutOfMemory : public VM_Operation {
1574  private:
1575   const char* _message;
1576  public:
1577   VM_ReportJavaOutOfMemory(const char* message) { _message = message; }
1578   VMOp_Type type() const                        { return VMOp_ReportJavaOutOfMemory; }
1579   void doit();
1580 };
1581 
1582 void VM_ReportJavaOutOfMemory::doit() {
1583   // Don't allocate large buffer on stack
1584   static char buffer[O_BUFLEN];
1585 
1586   tty->print_cr("#");
1587   tty->print_cr("# java.lang.OutOfMemoryError: %s", _message);
1588   tty->print_cr("# -XX:OnOutOfMemoryError=\"%s\"", OnOutOfMemoryError);
1589 
1590   // make heap parsability
1591   Universe::heap()->ensure_parsability(false);  // no need to retire TLABs
1592 
1593   char* cmd;
1594   const char* ptr = OnOutOfMemoryError;
1595   while ((cmd = next_OnError_command(buffer, sizeof(buffer), &ptr)) != NULL){
1596     tty->print("#   Executing ");
1597 #if defined(LINUX)
1598     tty->print  ("/bin/sh -c ");
1599 #elif defined(SOLARIS)
1600     tty->print  ("/usr/bin/sh -c ");
1601 #endif
1602     tty->print_cr("\"%s\"...", cmd);
1603 
1604     if (os::fork_and_exec(cmd, true) < 0) {
1605       tty->print_cr("os::fork_and_exec failed: %s (%s=%d)",
1606                      os::strerror(errno), os::errno_name(errno), errno);
1607     }
1608   }
1609 }
1610 
1611 void VMError::report_java_out_of_memory(const char* message) {
1612   if (OnOutOfMemoryError && OnOutOfMemoryError[0]) {
1613     MutexLocker ml(Heap_lock);
1614     VM_ReportJavaOutOfMemory op(message);
1615     VMThread::execute(&op);
1616   }
1617 }
1618 
1619 void VMError::show_message_box(char *buf, int buflen) {
1620   bool yes;
1621   do {
1622     error_string(buf, buflen);
1623     yes = os::start_debugging(buf,buflen);
1624   } while (yes);
1625 }
1626 
1627 // Timeout handling: check if a timeout happened (either a single step did
1628 // timeout or the whole of error reporting hit ErrorLogTimeout). Interrupt
1629 // the reporting thread if that is the case.
1630 bool VMError::check_timeout() {
1631 
1632   if (ErrorLogTimeout == 0) {
1633     return false;
1634   }
1635 
1636   // Do not check for timeouts if we still have a message box to show to the
1637   // user or if there are OnError handlers to be run.
1638   if (ShowMessageBoxOnError
1639       || (OnError != NULL && OnError[0] != '\0')
1640       || Arguments::abort_hook() != NULL) {
1641     return false;
1642   }
1643 
1644   const jlong reporting_start_time_l = get_reporting_start_time();
1645   const jlong now = get_current_timestamp();
1646   // Timestamp is stored in nanos.
1647   if (reporting_start_time_l > 0) {
1648     const jlong end = reporting_start_time_l + (jlong)ErrorLogTimeout * TIMESTAMP_TO_SECONDS_FACTOR;
1649     if (end <= now) {
1650       _reporting_did_timeout = true;
1651       interrupt_reporting_thread();
1652       return true; // global timeout
1653     }
1654   }
1655 
1656   const jlong step_start_time_l = get_step_start_time();
1657   if (step_start_time_l > 0) {
1658     // A step times out after a quarter of the total timeout. Steps are mostly fast unless they
1659     // hang for some reason, so this simple rule allows for three hanging step and still
1660     // hopefully leaves time enough for the rest of the steps to finish.
1661     const jlong end = step_start_time_l + (jlong)ErrorLogTimeout * TIMESTAMP_TO_SECONDS_FACTOR / 4;
1662     if (end <= now) {
1663       _step_did_timeout = true;
1664       interrupt_reporting_thread();
1665       return false; // (Not a global timeout)
1666     }
1667   }
1668 
1669   return false;
1670 
1671 }
1672 
1673 #ifndef PRODUCT
1674 #if defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140
1675 #pragma error_messages(off, SEC_NULL_PTR_DEREF)
1676 #endif
1677 typedef void (*voidfun_t)();
1678 // Crash with an authentic sigfpe
1679 static void crash_with_sigfpe() {
1680   // generate a native synchronous SIGFPE where possible;
1681   // if that did not cause a signal (e.g. on ppc), just
1682   // raise the signal.
1683   volatile int x = 0;
1684   volatile int y = 1/x;
1685 #ifndef _WIN32
1686   // OSX implements raise(sig) incorrectly so we need to
1687   // explicitly target the current thread
1688   pthread_kill(pthread_self(), SIGFPE);
1689 #endif
1690 } // end: crash_with_sigfpe
1691 
1692 // crash with sigsegv at non-null address.
1693 static void crash_with_segfault() {
1694 
1695   char* const crash_addr = (char*) VMError::get_segfault_address();
1696   *crash_addr = 'X';
1697 
1698 } // end: crash_with_segfault
1699 
1700 void VMError::test_error_handler() {
1701   controlled_crash(ErrorHandlerTest);
1702 }
1703 
1704 // crash in a controlled way:
1705 // how can be one of:
1706 // 1,2 - asserts
1707 // 3,4 - guarantee
1708 // 5-7 - fatal
1709 // 8 - vm_exit_out_of_memory
1710 // 9 - ShouldNotCallThis
1711 // 10 - ShouldNotReachHere
1712 // 11 - Unimplemented
1713 // 12,13 - (not guaranteed) crashes
1714 // 14 - SIGSEGV
1715 // 15 - SIGFPE
1716 void VMError::controlled_crash(int how) {
1717   if (how == 0) return;
1718 
1719   // If asserts are disabled, use the corresponding guarantee instead.
1720   NOT_DEBUG(if (how <= 2) how += 2);
1721 
1722   const char* const str = "hello";
1723   const size_t      num = (size_t)os::vm_page_size();
1724 
1725   const char* const eol = os::line_separator();
1726   const char* const msg = "this message should be truncated during formatting";
1727   char * const dataPtr = NULL;  // bad data pointer
1728   const void (*funcPtr)(void) = (const void(*)()) 0xF;  // bad function pointer
1729 
1730   // Keep this in sync with test/hotspot/jtreg/runtime/ErrorHandling/ErrorHandler.java
1731   // which tests cases 1 thru 13.
1732   // Case 14 is tested by test/hotspot/jtreg/runtime/ErrorHandling/SafeFetchInErrorHandlingTest.java.
1733   // Case 15 is tested by test/hotspot/jtreg/runtime/ErrorHandling/SecondaryErrorTest.java.
1734   // Case 16 is tested by test/hotspot/jtreg/runtime/ErrorHandling/ThreadsListHandleInErrorHandlingTest.java.
1735   // Case 17 is tested by test/hotspot/jtreg/runtime/ErrorHandling/NestedThreadsListHandleInErrorHandlingTest.java.
1736 
1737   // We grab Threads_lock to keep ThreadsSMRSupport::print_info_on()
1738   // from racing with Threads::add() or Threads::remove() as we
1739   // generate the hs_err_pid file. This makes our ErrorHandling tests
1740   // more stable.
1741   MutexLockerEx ml(Threads_lock->owned_by_self() ? NULL : Threads_lock, Mutex::_no_safepoint_check_flag);
1742 
1743   switch (how) {
1744     case  1: vmassert(str == NULL, "expected null"); break;
1745     case  2: vmassert(num == 1023 && *str == 'X',
1746                       "num=" SIZE_FORMAT " str=\"%s\"", num, str); break;
1747     case  3: guarantee(str == NULL, "expected null"); break;
1748     case  4: guarantee(num == 1023 && *str == 'X',
1749                        "num=" SIZE_FORMAT " str=\"%s\"", num, str); break;
1750     case  5: fatal("expected null"); break;
1751     case  6: fatal("num=" SIZE_FORMAT " str=\"%s\"", num, str); break;
1752     case  7: fatal("%s%s#    %s%s#    %s%s#    %s%s#    %s%s#    "
1753                    "%s%s#    %s%s#    %s%s#    %s%s#    %s%s#    "
1754                    "%s%s#    %s%s#    %s%s#    %s%s#    %s",
1755                    msg, eol, msg, eol, msg, eol, msg, eol, msg, eol,
1756                    msg, eol, msg, eol, msg, eol, msg, eol, msg, eol,
1757                    msg, eol, msg, eol, msg, eol, msg, eol, msg); break;
1758     case  8: vm_exit_out_of_memory(num, OOM_MALLOC_ERROR, "ChunkPool::allocate"); break;
1759     case  9: ShouldNotCallThis(); break;
1760     case 10: ShouldNotReachHere(); break;
1761     case 11: Unimplemented(); break;
1762     // There's no guarantee the bad data pointer will crash us
1763     // so "break" out to the ShouldNotReachHere().
1764     case 12: *dataPtr = '\0'; break;
1765     // There's no guarantee the bad function pointer will crash us
1766     // so "break" out to the ShouldNotReachHere().
1767     case 13: (*funcPtr)(); break;
1768     case 14: crash_with_segfault(); break;
1769     case 15: crash_with_sigfpe(); break;
1770     case 16: {
1771       ThreadsListHandle tlh;
1772       fatal("Force crash with an active ThreadsListHandle.");
1773     }
1774     case 17: {
1775       ThreadsListHandle tlh;
1776       {
1777         ThreadsListHandle tlh2;
1778         fatal("Force crash with a nested ThreadsListHandle.");
1779       }
1780     }
1781 
1782     default: tty->print_cr("ERROR: %d: unexpected test_num value.", how);
1783   }
1784   tty->print_cr("VMError::controlled_crash: survived intentional crash. Did you suppress the assert?");
1785   ShouldNotReachHere();
1786 }
1787 #endif // !PRODUCT
1788