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