1 /* 2 * Copyright (c) 1997, 2014, 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 "classfile/systemDictionary.hpp" 27 #include "code/codeCache.hpp" 28 #include "code/icBuffer.hpp" 29 #include "code/nmethod.hpp" 30 #include "code/vtableStubs.hpp" 31 #include "compiler/compileBroker.hpp" 32 #include "compiler/disassembler.hpp" 33 #include "gc_implementation/shared/markSweep.hpp" 34 #include "gc_interface/collectedHeap.hpp" 35 #include "interpreter/bytecodeHistogram.hpp" 36 #include "interpreter/interpreter.hpp" 37 #include "memory/resourceArea.hpp" 38 #include "memory/universe.hpp" 39 #include "oops/oop.inline.hpp" 40 #include "prims/privilegedStack.hpp" 41 #include "runtime/arguments.hpp" 42 #include "runtime/atomic.inline.hpp" 43 #include "runtime/frame.hpp" 44 #include "runtime/java.hpp" 45 #include "runtime/os.hpp" 46 #include "runtime/sharedRuntime.hpp" 47 #include "runtime/stubCodeGenerator.hpp" 48 #include "runtime/stubRoutines.hpp" 49 #include "runtime/thread.inline.hpp" 50 #include "runtime/vframe.hpp" 51 #include "runtime/vm_version.hpp" 52 #include "services/heapDumper.hpp" 53 #include "utilities/defaultStream.hpp" 54 #include "utilities/events.hpp" 55 #include "utilities/top.hpp" 56 #include "utilities/vmError.hpp" 57 58 #ifndef ASSERT 59 # ifdef _DEBUG 60 // NOTE: don't turn the lines below into a comment -- if you're getting 61 // a compile error here, change the settings to define ASSERT 62 ASSERT should be defined when _DEBUG is defined. It is not intended to be used for debugging 63 functions that do not slow down the system too much and thus can be left in optimized code. 64 On the other hand, the code should not be included in a production version. 65 # endif // _DEBUG 66 #endif // ASSERT 67 68 69 #ifdef _DEBUG 70 # ifndef ASSERT 71 configuration error: ASSERT must be defined in debug version 72 # endif // ASSERT 73 #endif // _DEBUG 74 75 76 #ifdef PRODUCT 77 # if -defined _DEBUG || -defined ASSERT 78 configuration error: ASSERT et al. must not be defined in PRODUCT version 79 # endif 80 #endif // PRODUCT 81 82 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC 83 84 FormatBufferResource::FormatBufferResource(const char * format, ...) 85 : FormatBufferBase((char*)resource_allocate_bytes(RES_BUFSZ)) { 86 va_list argp; 87 va_start(argp, format); 88 jio_vsnprintf(_buf, RES_BUFSZ, format, argp); 89 va_end(argp); 90 } 91 92 ATTRIBUTE_PRINTF(1, 2) 93 void warning(const char* format, ...) { 94 if (PrintWarnings) { 95 FILE* const err = defaultStream::error_stream(); 96 jio_fprintf(err, "%s warning: ", VM_Version::vm_name()); 97 va_list ap; 98 va_start(ap, format); 99 vfprintf(err, format, ap); 100 va_end(ap); 101 fputc('\n', err); 102 } 103 if (BreakAtWarning) BREAKPOINT; 104 } 105 106 #ifndef PRODUCT 107 108 #define is_token_break(ch) (isspace(ch) || (ch) == ',') 109 110 static const char* last_file_name = NULL; 111 static int last_line_no = -1; 112 113 // assert/guarantee/... may happen very early during VM initialization. 114 // Don't rely on anything that is initialized by Threads::create_vm(). For 115 // example, don't use tty. 116 bool error_is_suppressed(const char* file_name, int line_no) { 117 // The following 1-element cache requires that passed-in 118 // file names are always only constant literals. 119 if (file_name == last_file_name && line_no == last_line_no) return true; 120 121 int file_name_len = (int)strlen(file_name); 122 char separator = os::file_separator()[0]; 123 const char* base_name = strrchr(file_name, separator); 124 if (base_name == NULL) 125 base_name = file_name; 126 127 // scan the SuppressErrorAt option 128 const char* cp = SuppressErrorAt; 129 for (;;) { 130 const char* sfile; 131 int sfile_len; 132 int sline; 133 bool noisy; 134 while ((*cp) != '\0' && is_token_break(*cp)) cp++; 135 if ((*cp) == '\0') break; 136 sfile = cp; 137 while ((*cp) != '\0' && !is_token_break(*cp) && (*cp) != ':') cp++; 138 sfile_len = cp - sfile; 139 if ((*cp) == ':') cp++; 140 sline = 0; 141 while ((*cp) != '\0' && isdigit(*cp)) { 142 sline *= 10; 143 sline += (*cp) - '0'; 144 cp++; 145 } 146 // "file:line!" means the assert suppression is not silent 147 noisy = ((*cp) == '!'); 148 while ((*cp) != '\0' && !is_token_break(*cp)) cp++; 149 // match the line 150 if (sline != 0) { 151 if (sline != line_no) continue; 152 } 153 // match the file 154 if (sfile_len > 0) { 155 const char* look = file_name; 156 const char* look_max = file_name + file_name_len - sfile_len; 157 const char* foundp; 158 bool match = false; 159 while (!match 160 && (foundp = strchr(look, sfile[0])) != NULL 161 && foundp <= look_max) { 162 match = true; 163 for (int i = 1; i < sfile_len; i++) { 164 if (sfile[i] != foundp[i]) { 165 match = false; 166 break; 167 } 168 } 169 look = foundp + 1; 170 } 171 if (!match) continue; 172 } 173 // got a match! 174 if (noisy) { 175 fdStream out(defaultStream::output_fd()); 176 out.print_raw("[error suppressed at "); 177 out.print_raw(base_name); 178 char buf[16]; 179 jio_snprintf(buf, sizeof(buf), ":%d]", line_no); 180 out.print_raw_cr(buf); 181 } else { 182 // update 1-element cache for fast silent matches 183 last_file_name = file_name; 184 last_line_no = line_no; 185 } 186 return true; 187 } 188 189 if (!is_error_reported()) { 190 // print a friendly hint: 191 fdStream out(defaultStream::output_fd()); 192 out.print_raw_cr("# To suppress the following error report, specify this argument"); 193 out.print_raw ("# after -XX: or in .hotspotrc: SuppressErrorAt="); 194 out.print_raw (base_name); 195 char buf[16]; 196 jio_snprintf(buf, sizeof(buf), ":%d", line_no); 197 out.print_raw_cr(buf); 198 } 199 return false; 200 } 201 202 #undef is_token_break 203 204 #else 205 206 // Place-holder for non-existent suppression check: 207 #define error_is_suppressed(file_name, line_no) (false) 208 209 #endif // !PRODUCT 210 211 void report_vm_error(const char* file, int line, const char* error_msg, 212 const char* detail_msg) 213 { 214 if (Debugging || error_is_suppressed(file, line)) return; 215 Thread* const thread = ThreadLocalStorage::get_thread_slow(); 216 VMError err(thread, file, line, error_msg, detail_msg); 217 err.report_and_die(); 218 } 219 220 void report_fatal(const char* file, int line, const char* message) 221 { 222 report_vm_error(file, line, "fatal error", message); 223 } 224 225 void report_vm_out_of_memory(const char* file, int line, size_t size, 226 VMErrorType vm_err_type, const char* message) { 227 if (Debugging) return; 228 229 Thread* thread = ThreadLocalStorage::get_thread_slow(); 230 VMError(thread, file, line, size, vm_err_type, message).report_and_die(); 231 232 // The UseOSErrorReporting option in report_and_die() may allow a return 233 // to here. If so then we'll have to figure out how to handle it. 234 guarantee(false, "report_and_die() should not return here"); 235 } 236 237 void report_should_not_call(const char* file, int line) { 238 report_vm_error(file, line, "ShouldNotCall()"); 239 } 240 241 void report_should_not_reach_here(const char* file, int line) { 242 report_vm_error(file, line, "ShouldNotReachHere()"); 243 } 244 245 void report_unimplemented(const char* file, int line) { 246 report_vm_error(file, line, "Unimplemented()"); 247 } 248 249 void report_untested(const char* file, int line, const char* message) { 250 #ifndef PRODUCT 251 warning("Untested: %s in %s: %d\n", message, file, line); 252 #endif // !PRODUCT 253 } 254 255 void report_out_of_shared_space(SharedSpaceType shared_space) { 256 static const char* name[] = { 257 "shared read only space", 258 "shared read write space", 259 "shared miscellaneous data space" 260 }; 261 static const char* flag[] = { 262 "SharedReadOnlySize", 263 "SharedReadWriteSize", 264 "SharedMiscDataSize" 265 }; 266 267 warning("\nThe %s is not large enough\n" 268 "to preload requested classes. Use -XX:%s=\n" 269 "to increase the initial size of %s.\n", 270 name[shared_space], flag[shared_space], name[shared_space]); 271 exit(2); 272 } 273 274 void report_java_out_of_memory(const char* message) { 275 static jint out_of_memory_reported = 0; 276 277 // A number of threads may attempt to report OutOfMemoryError at around the 278 // same time. To avoid dumping the heap or executing the data collection 279 // commands multiple times we just do it once when the first threads reports 280 // the error. 281 if (Atomic::cmpxchg(1, &out_of_memory_reported, 0) == 0) { 282 // create heap dump before OnOutOfMemoryError commands are executed 283 if (HeapDumpOnOutOfMemoryError) { 284 tty->print_cr("java.lang.OutOfMemoryError: %s", message); 285 HeapDumper::dump_heap_from_oome(); 286 } 287 288 if (OnOutOfMemoryError && OnOutOfMemoryError[0]) { 289 VMError err(message); 290 err.report_java_out_of_memory(); 291 } 292 } 293 } 294 295 static bool error_reported = false; 296 297 // call this when the VM is dying--it might loosen some asserts 298 void set_error_reported() { 299 error_reported = true; 300 } 301 302 bool is_error_reported() { 303 return error_reported; 304 } 305 306 #ifndef PRODUCT 307 #include <signal.h> 308 309 void test_error_handler() { 310 uintx test_num = ErrorHandlerTest; 311 if (test_num == 0) return; 312 313 // If asserts are disabled, use the corresponding guarantee instead. 314 size_t n = test_num; 315 NOT_DEBUG(if (n <= 2) n += 2); 316 317 const char* const str = "hello"; 318 const size_t num = (size_t)os::vm_page_size(); 319 320 const char* const eol = os::line_separator(); 321 const char* const msg = "this message should be truncated during formatting"; 322 char * const dataPtr = NULL; // bad data pointer 323 const void (*funcPtr)(void) = (const void(*)()) 0xF; // bad function pointer 324 325 // Keep this in sync with test/runtime/6888954/vmerrors.sh. 326 switch (n) { 327 case 1: assert(str == NULL, "expected null"); 328 case 2: assert(num == 1023 && *str == 'X', 329 err_msg("num=" SIZE_FORMAT " str=\"%s\"", num, str)); 330 case 3: guarantee(str == NULL, "expected null"); 331 case 4: guarantee(num == 1023 && *str == 'X', 332 err_msg("num=" SIZE_FORMAT " str=\"%s\"", num, str)); 333 case 5: fatal("expected null"); 334 case 6: fatal(err_msg("num=" SIZE_FORMAT " str=\"%s\"", num, str)); 335 case 7: fatal(err_msg("%s%s# %s%s# %s%s# %s%s# %s%s# " 336 "%s%s# %s%s# %s%s# %s%s# %s%s# " 337 "%s%s# %s%s# %s%s# %s%s# %s", 338 msg, eol, msg, eol, msg, eol, msg, eol, msg, eol, 339 msg, eol, msg, eol, msg, eol, msg, eol, msg, eol, 340 msg, eol, msg, eol, msg, eol, msg, eol, msg)); 341 case 8: vm_exit_out_of_memory(num, OOM_MALLOC_ERROR, "ChunkPool::allocate"); 342 case 9: ShouldNotCallThis(); 343 case 10: ShouldNotReachHere(); 344 case 11: Unimplemented(); 345 // There's no guarantee the bad data pointer will crash us 346 // so "break" out to the ShouldNotReachHere(). 347 case 12: *dataPtr = '\0'; break; 348 // There's no guarantee the bad function pointer will crash us 349 // so "break" out to the ShouldNotReachHere(). 350 case 13: (*funcPtr)(); break; 351 352 default: tty->print_cr("ERROR: %d: unexpected test_num value.", n); 353 } 354 ShouldNotReachHere(); 355 } 356 #endif // !PRODUCT 357 358 // ------ helper functions for debugging go here ------------ 359 360 // All debug entries should be wrapped with a stack allocated 361 // Command object. It makes sure a resource mark is set and 362 // flushes the logfile to prevent file sharing problems. 363 364 class Command : public StackObj { 365 private: 366 ResourceMark rm; 367 ResetNoHandleMark rnhm; 368 HandleMark hm; 369 bool debug_save; 370 public: 371 static int level; 372 Command(const char* str) { 373 debug_save = Debugging; 374 Debugging = true; 375 if (level++ > 0) return; 376 tty->cr(); 377 tty->print_cr("\"Executing %s\"", str); 378 } 379 380 ~Command() { 381 tty->flush(); 382 Debugging = debug_save; 383 level--; 384 } 385 }; 386 387 int Command::level = 0; 388 389 #ifndef PRODUCT 390 391 extern "C" void blob(CodeBlob* cb) { 392 Command c("blob"); 393 cb->print(); 394 } 395 396 397 extern "C" void dump_vtable(address p) { 398 Command c("dump_vtable"); 399 Klass* k = (Klass*)p; 400 InstanceKlass::cast(k)->vtable()->print(); 401 } 402 403 404 extern "C" void nm(intptr_t p) { 405 // Actually we look through all CodeBlobs (the nm name has been kept for backwards compatability) 406 Command c("nm"); 407 CodeBlob* cb = CodeCache::find_blob((address)p); 408 if (cb == NULL) { 409 tty->print_cr("NULL"); 410 } else { 411 cb->print(); 412 } 413 } 414 415 416 extern "C" void disnm(intptr_t p) { 417 Command c("disnm"); 418 CodeBlob* cb = CodeCache::find_blob((address) p); 419 nmethod* nm = cb->as_nmethod_or_null(); 420 if (nm) { 421 nm->print(); 422 Disassembler::decode(nm); 423 } else { 424 cb->print(); 425 Disassembler::decode(cb); 426 } 427 } 428 429 430 extern "C" void printnm(intptr_t p) { 431 char buffer[256]; 432 sprintf(buffer, "printnm: " INTPTR_FORMAT, p); 433 Command c(buffer); 434 CodeBlob* cb = CodeCache::find_blob((address) p); 435 if (cb->is_nmethod()) { 436 nmethod* nm = (nmethod*)cb; 437 nm->print_nmethod(true); 438 } 439 } 440 441 442 extern "C" void universe() { 443 Command c("universe"); 444 Universe::print(); 445 } 446 447 448 extern "C" void verify() { 449 // try to run a verify on the entire system 450 // note: this may not be safe if we're not at a safepoint; for debugging, 451 // this manipulates the safepoint settings to avoid assertion failures 452 Command c("universe verify"); 453 bool safe = SafepointSynchronize::is_at_safepoint(); 454 if (!safe) { 455 tty->print_cr("warning: not at safepoint -- verify may fail"); 456 SafepointSynchronize::set_is_at_safepoint(); 457 } 458 // Ensure Eden top is correct before verification 459 Universe::heap()->prepare_for_verify(); 460 Universe::verify(); 461 if (!safe) SafepointSynchronize::set_is_not_at_safepoint(); 462 } 463 464 465 extern "C" void pp(void* p) { 466 Command c("pp"); 467 FlagSetting fl(PrintVMMessages, true); 468 FlagSetting f2(DisplayVMOutput, true); 469 if (Universe::heap()->is_in(p)) { 470 oop obj = oop(p); 471 obj->print(); 472 } else { 473 tty->print(PTR_FORMAT, p); 474 } 475 } 476 477 478 // pv: print vm-printable object 479 extern "C" void pa(intptr_t p) { ((AllocatedObj*) p)->print(); } 480 extern "C" void findpc(intptr_t x); 481 482 #endif // !PRODUCT 483 484 extern "C" void ps() { // print stack 485 if (Thread::current() == NULL) return; 486 Command c("ps"); 487 488 489 // Prints the stack of the current Java thread 490 JavaThread* p = JavaThread::active(); 491 tty->print(" for thread: "); 492 p->print(); 493 tty->cr(); 494 495 if (p->has_last_Java_frame()) { 496 // If the last_Java_fp is set we are in C land and 497 // can call the standard stack_trace function. 498 #ifdef PRODUCT 499 p->print_stack(); 500 } else { 501 tty->print_cr("Cannot find the last Java frame, printing stack disabled."); 502 #else // !PRODUCT 503 p->trace_stack(); 504 } else { 505 frame f = os::current_frame(); 506 RegisterMap reg_map(p); 507 f = f.sender(®_map); 508 tty->print("(guessing starting frame id=%#p based on current fp)\n", f.id()); 509 p->trace_stack_from(vframe::new_vframe(&f, ®_map, p)); 510 pd_ps(f); 511 #endif // PRODUCT 512 } 513 514 } 515 516 extern "C" void pfl() { 517 // print frame layout 518 Command c("pfl"); 519 JavaThread* p = JavaThread::active(); 520 tty->print(" for thread: "); 521 p->print(); 522 tty->cr(); 523 if (p->has_last_Java_frame()) { 524 p->print_frame_layout(); 525 } 526 } 527 528 #ifndef PRODUCT 529 530 extern "C" void psf() { // print stack frames 531 { 532 Command c("psf"); 533 JavaThread* p = JavaThread::active(); 534 tty->print(" for thread: "); 535 p->print(); 536 tty->cr(); 537 if (p->has_last_Java_frame()) { 538 p->trace_frames(); 539 } 540 } 541 } 542 543 544 extern "C" void threads() { 545 Command c("threads"); 546 Threads::print(false, true); 547 } 548 549 550 extern "C" void psd() { 551 Command c("psd"); 552 SystemDictionary::print(); 553 } 554 555 556 extern "C" void safepoints() { 557 Command c("safepoints"); 558 SafepointSynchronize::print_state(); 559 } 560 561 #endif // !PRODUCT 562 563 extern "C" void pss() { // print all stacks 564 if (Thread::current() == NULL) return; 565 Command c("pss"); 566 Threads::print(true, PRODUCT_ONLY(false) NOT_PRODUCT(true)); 567 } 568 569 #ifndef PRODUCT 570 571 extern "C" void debug() { // to set things up for compiler debugging 572 Command c("debug"); 573 WizardMode = true; 574 PrintVMMessages = PrintCompilation = true; 575 PrintInlining = PrintAssembly = true; 576 tty->flush(); 577 } 578 579 580 extern "C" void ndebug() { // undo debug() 581 Command c("ndebug"); 582 PrintCompilation = false; 583 PrintInlining = PrintAssembly = false; 584 tty->flush(); 585 } 586 587 588 extern "C" void flush() { 589 Command c("flush"); 590 tty->flush(); 591 } 592 593 extern "C" void events() { 594 Command c("events"); 595 Events::print(); 596 } 597 598 extern "C" Method* findm(intptr_t pc) { 599 Command c("findm"); 600 nmethod* nm = CodeCache::find_nmethod((address)pc); 601 return (nm == NULL) ? (Method*)NULL : nm->method(); 602 } 603 604 605 extern "C" nmethod* findnm(intptr_t addr) { 606 Command c("findnm"); 607 return CodeCache::find_nmethod((address)addr); 608 } 609 610 // Another interface that isn't ambiguous in dbx. 611 // Can we someday rename the other find to hsfind? 612 extern "C" void hsfind(intptr_t x) { 613 Command c("hsfind"); 614 os::print_location(tty, x, false); 615 } 616 617 618 extern "C" void find(intptr_t x) { 619 Command c("find"); 620 os::print_location(tty, x, false); 621 } 622 623 624 extern "C" void findpc(intptr_t x) { 625 Command c("findpc"); 626 os::print_location(tty, x, true); 627 } 628 629 630 // Need method pointer to find bcp, when not in permgen. 631 extern "C" void findbcp(intptr_t method, intptr_t bcp) { 632 Command c("findbcp"); 633 Method* mh = (Method*)method; 634 if (!mh->is_native()) { 635 tty->print_cr("bci_from(%p) = %d; print_codes():", 636 mh, mh->bci_from(address(bcp))); 637 mh->print_codes_on(tty); 638 } 639 } 640 641 // int versions of all methods to avoid having to type type casts in the debugger 642 643 void pp(intptr_t p) { pp((void*)p); } 644 void pp(oop p) { pp((void*)p); } 645 646 void help() { 647 Command c("help"); 648 tty->print_cr("basic"); 649 tty->print_cr(" pp(void* p) - try to make sense of p"); 650 tty->print_cr(" pv(intptr_t p)- ((PrintableResourceObj*) p)->print()"); 651 tty->print_cr(" ps() - print current thread stack"); 652 tty->print_cr(" pss() - print all thread stacks"); 653 tty->print_cr(" pm(int pc) - print Method* given compiled PC"); 654 tty->print_cr(" findm(intptr_t pc) - finds Method*"); 655 tty->print_cr(" find(intptr_t x) - finds & prints nmethod/stub/bytecode/oop based on pointer into it"); 656 657 tty->print_cr("misc."); 658 tty->print_cr(" flush() - flushes the log file"); 659 tty->print_cr(" events() - dump events from ring buffers"); 660 661 662 tty->print_cr("compiler debugging"); 663 tty->print_cr(" debug() - to set things up for compiler debugging"); 664 tty->print_cr(" ndebug() - undo debug"); 665 } 666 667 #endif // !PRODUCT